Lines Matching refs:ec_dev

102 static int terminate_request(struct cros_ec_device *ec_dev)  in terminate_request()  argument
104 struct cros_ec_spi *ec_spi = ec_dev->priv; in terminate_request()
123 dev_err(ec_dev->dev, in terminate_request()
136 static int receive_n_bytes(struct cros_ec_device *ec_dev, u8 *buf, int n) in receive_n_bytes() argument
138 struct cros_ec_spi *ec_spi = ec_dev->priv; in receive_n_bytes()
143 BUG_ON(buf - ec_dev->din + n > ec_dev->din_size); in receive_n_bytes()
154 dev_err(ec_dev->dev, "spi transfer failed: %d\n", ret); in receive_n_bytes()
171 static int cros_ec_spi_receive_packet(struct cros_ec_device *ec_dev, in cros_ec_spi_receive_packet() argument
180 BUG_ON(ec_dev->din_size < EC_MSG_PREAMBLE_COUNT); in cros_ec_spi_receive_packet()
187 ret = receive_n_bytes(ec_dev, in cros_ec_spi_receive_packet()
188 ec_dev->din, in cros_ec_spi_receive_packet()
193 ptr = ec_dev->din; in cros_ec_spi_receive_packet()
196 dev_dbg(ec_dev->dev, "msg found at %zd\n", in cros_ec_spi_receive_packet()
197 ptr - ec_dev->din); in cros_ec_spi_receive_packet()
210 dev_warn(ec_dev->dev, "EC failed to respond in time\n"); in cros_ec_spi_receive_packet()
220 BUG_ON(todo < 0 || todo > ec_dev->din_size); in cros_ec_spi_receive_packet()
222 memmove(ec_dev->din, ptr, todo); in cros_ec_spi_receive_packet()
223 ptr = ec_dev->din + todo; in cros_ec_spi_receive_packet()
224 dev_dbg(ec_dev->dev, "need %d, got %d bytes from preamble\n", in cros_ec_spi_receive_packet()
230 ret = receive_n_bytes(ec_dev, ptr, sizeof(*response) - todo); in cros_ec_spi_receive_packet()
237 response = (struct ec_host_response *)ec_dev->din; in cros_ec_spi_receive_packet()
240 if (response->data_len > ec_dev->din_size) in cros_ec_spi_receive_packet()
252 dev_dbg(ec_dev->dev, "loop, todo=%d, need_len=%d, ptr=%zd\n", in cros_ec_spi_receive_packet()
253 todo, need_len, ptr - ec_dev->din); in cros_ec_spi_receive_packet()
255 ret = receive_n_bytes(ec_dev, ptr, todo); in cros_ec_spi_receive_packet()
263 dev_dbg(ec_dev->dev, "loop done, ptr=%zd\n", ptr - ec_dev->din); in cros_ec_spi_receive_packet()
280 static int cros_ec_spi_receive_response(struct cros_ec_device *ec_dev, in cros_ec_spi_receive_response() argument
288 BUG_ON(ec_dev->din_size < EC_MSG_PREAMBLE_COUNT); in cros_ec_spi_receive_response()
295 ret = receive_n_bytes(ec_dev, in cros_ec_spi_receive_response()
296 ec_dev->din, in cros_ec_spi_receive_response()
301 ptr = ec_dev->din; in cros_ec_spi_receive_response()
304 dev_dbg(ec_dev->dev, "msg found at %zd\n", in cros_ec_spi_receive_response()
305 ptr - ec_dev->din); in cros_ec_spi_receive_response()
318 dev_warn(ec_dev->dev, "EC failed to respond in time\n"); in cros_ec_spi_receive_response()
328 BUG_ON(todo < 0 || todo > ec_dev->din_size); in cros_ec_spi_receive_response()
330 memmove(ec_dev->din, ptr, todo); in cros_ec_spi_receive_response()
331 ptr = ec_dev->din + todo; in cros_ec_spi_receive_response()
332 dev_dbg(ec_dev->dev, "need %d, got %d bytes from preamble\n", in cros_ec_spi_receive_response()
345 dev_dbg(ec_dev->dev, "loop, todo=%d, need_len=%d, ptr=%zd\n", in cros_ec_spi_receive_response()
346 todo, need_len, ptr - ec_dev->din); in cros_ec_spi_receive_response()
348 ret = receive_n_bytes(ec_dev, ptr, todo); in cros_ec_spi_receive_response()
352 debug_packet(ec_dev->dev, "interim", ptr, todo); in cros_ec_spi_receive_response()
357 dev_dbg(ec_dev->dev, "loop done, ptr=%zd\n", ptr - ec_dev->din); in cros_ec_spi_receive_response()
368 static int cros_ec_pkt_xfer_spi(struct cros_ec_device *ec_dev, in cros_ec_pkt_xfer_spi() argument
372 struct cros_ec_spi *ec_spi = ec_dev->priv; in cros_ec_pkt_xfer_spi()
383 len = cros_ec_prepare_tx(ec_dev, ec_msg); in cros_ec_pkt_xfer_spi()
384 dev_dbg(ec_dev->dev, "prepared, len=%d\n", len); in cros_ec_pkt_xfer_spi()
410 trans.tx_buf = ec_dev->dout; in cros_ec_pkt_xfer_spi()
447 ret = cros_ec_spi_receive_packet(ec_dev, in cros_ec_pkt_xfer_spi()
450 dev_err(ec_dev->dev, "spi transfer failed: %d\n", ret); in cros_ec_pkt_xfer_spi()
452 final_ret = terminate_request(ec_dev); in cros_ec_pkt_xfer_spi()
461 ptr = ec_dev->din; in cros_ec_pkt_xfer_spi()
467 ret = cros_ec_check_result(ec_dev, ec_msg); in cros_ec_pkt_xfer_spi()
474 dev_err(ec_dev->dev, "packet too long (%d bytes, expected %d)", in cros_ec_pkt_xfer_spi()
489 dev_err(ec_dev->dev, in cros_ec_pkt_xfer_spi()
511 static int cros_ec_cmd_xfer_spi(struct cros_ec_device *ec_dev, in cros_ec_cmd_xfer_spi() argument
514 struct cros_ec_spi *ec_spi = ec_dev->priv; in cros_ec_cmd_xfer_spi()
525 len = cros_ec_prepare_tx(ec_dev, ec_msg); in cros_ec_cmd_xfer_spi()
526 dev_dbg(ec_dev->dev, "prepared, len=%d\n", len); in cros_ec_cmd_xfer_spi()
540 debug_packet(ec_dev->dev, "out", ec_dev->dout, len); in cros_ec_cmd_xfer_spi()
542 trans.tx_buf = ec_dev->dout; in cros_ec_cmd_xfer_spi()
566 ret = cros_ec_spi_receive_response(ec_dev, in cros_ec_cmd_xfer_spi()
569 dev_err(ec_dev->dev, "spi transfer failed: %d\n", ret); in cros_ec_cmd_xfer_spi()
571 final_ret = terminate_request(ec_dev); in cros_ec_cmd_xfer_spi()
580 ptr = ec_dev->din; in cros_ec_cmd_xfer_spi()
584 ret = cros_ec_check_result(ec_dev, ec_msg); in cros_ec_cmd_xfer_spi()
591 dev_err(ec_dev->dev, "packet too long (%d bytes, expected %d)", in cros_ec_cmd_xfer_spi()
605 debug_packet(ec_dev->dev, "in", ptr, len + 3); in cros_ec_cmd_xfer_spi()
608 dev_err(ec_dev->dev, in cros_ec_cmd_xfer_spi()
642 struct cros_ec_device *ec_dev; in cros_ec_spi_probe() local
656 ec_dev = devm_kzalloc(dev, sizeof(*ec_dev), GFP_KERNEL); in cros_ec_spi_probe()
657 if (!ec_dev) in cros_ec_spi_probe()
663 spi_set_drvdata(spi, ec_dev); in cros_ec_spi_probe()
664 ec_dev->dev = dev; in cros_ec_spi_probe()
665 ec_dev->priv = ec_spi; in cros_ec_spi_probe()
666 ec_dev->irq = spi->irq; in cros_ec_spi_probe()
667 ec_dev->cmd_xfer = cros_ec_cmd_xfer_spi; in cros_ec_spi_probe()
668 ec_dev->pkt_xfer = cros_ec_pkt_xfer_spi; in cros_ec_spi_probe()
669 ec_dev->phys_name = dev_name(&ec_spi->spi->dev); in cros_ec_spi_probe()
670 ec_dev->din_size = EC_MSG_PREAMBLE_COUNT + in cros_ec_spi_probe()
673 ec_dev->dout_size = sizeof(struct ec_host_request); in cros_ec_spi_probe()
677 err = cros_ec_register(ec_dev); in cros_ec_spi_probe()
690 struct cros_ec_device *ec_dev; in cros_ec_spi_remove() local
692 ec_dev = spi_get_drvdata(spi); in cros_ec_spi_remove()
693 cros_ec_remove(ec_dev); in cros_ec_spi_remove()
701 struct cros_ec_device *ec_dev = dev_get_drvdata(dev); in cros_ec_spi_suspend() local
703 return cros_ec_suspend(ec_dev); in cros_ec_spi_suspend()
708 struct cros_ec_device *ec_dev = dev_get_drvdata(dev); in cros_ec_spi_resume() local
710 return cros_ec_resume(ec_dev); in cros_ec_spi_resume()