Lines Matching refs:ec_dev
100 static int terminate_request(struct cros_ec_device *ec_dev) in terminate_request() argument
102 struct cros_ec_spi *ec_spi = ec_dev->priv; in terminate_request()
121 dev_err(ec_dev->dev, in terminate_request()
134 static int receive_n_bytes(struct cros_ec_device *ec_dev, u8 *buf, int n) in receive_n_bytes() argument
136 struct cros_ec_spi *ec_spi = ec_dev->priv; in receive_n_bytes()
141 BUG_ON(buf - ec_dev->din + n > ec_dev->din_size); in receive_n_bytes()
152 dev_err(ec_dev->dev, "spi transfer failed: %d\n", ret); in receive_n_bytes()
169 static int cros_ec_spi_receive_packet(struct cros_ec_device *ec_dev, in cros_ec_spi_receive_packet() argument
178 BUG_ON(EC_MSG_PREAMBLE_COUNT > ec_dev->din_size); in cros_ec_spi_receive_packet()
185 ret = receive_n_bytes(ec_dev, in cros_ec_spi_receive_packet()
186 ec_dev->din, in cros_ec_spi_receive_packet()
191 ptr = ec_dev->din; in cros_ec_spi_receive_packet()
194 dev_dbg(ec_dev->dev, "msg found at %zd\n", in cros_ec_spi_receive_packet()
195 ptr - ec_dev->din); in cros_ec_spi_receive_packet()
208 dev_warn(ec_dev->dev, "EC failed to respond in time\n"); in cros_ec_spi_receive_packet()
218 BUG_ON(todo < 0 || todo > ec_dev->din_size); in cros_ec_spi_receive_packet()
220 memmove(ec_dev->din, ptr, todo); in cros_ec_spi_receive_packet()
221 ptr = ec_dev->din + todo; in cros_ec_spi_receive_packet()
222 dev_dbg(ec_dev->dev, "need %d, got %d bytes from preamble\n", in cros_ec_spi_receive_packet()
228 ret = receive_n_bytes(ec_dev, ptr, sizeof(*response) - todo); in cros_ec_spi_receive_packet()
235 response = (struct ec_host_response *)ec_dev->din; in cros_ec_spi_receive_packet()
238 if (response->data_len > ec_dev->din_size) in cros_ec_spi_receive_packet()
250 dev_dbg(ec_dev->dev, "loop, todo=%d, need_len=%d, ptr=%zd\n", in cros_ec_spi_receive_packet()
251 todo, need_len, ptr - ec_dev->din); in cros_ec_spi_receive_packet()
253 ret = receive_n_bytes(ec_dev, ptr, todo); in cros_ec_spi_receive_packet()
261 dev_dbg(ec_dev->dev, "loop done, ptr=%zd\n", ptr - ec_dev->din); in cros_ec_spi_receive_packet()
278 static int cros_ec_spi_receive_response(struct cros_ec_device *ec_dev, in cros_ec_spi_receive_response() argument
286 BUG_ON(EC_MSG_PREAMBLE_COUNT > ec_dev->din_size); in cros_ec_spi_receive_response()
293 ret = receive_n_bytes(ec_dev, in cros_ec_spi_receive_response()
294 ec_dev->din, in cros_ec_spi_receive_response()
299 ptr = ec_dev->din; in cros_ec_spi_receive_response()
302 dev_dbg(ec_dev->dev, "msg found at %zd\n", in cros_ec_spi_receive_response()
303 ptr - ec_dev->din); in cros_ec_spi_receive_response()
316 dev_warn(ec_dev->dev, "EC failed to respond in time\n"); in cros_ec_spi_receive_response()
326 BUG_ON(todo < 0 || todo > ec_dev->din_size); in cros_ec_spi_receive_response()
328 memmove(ec_dev->din, ptr, todo); in cros_ec_spi_receive_response()
329 ptr = ec_dev->din + todo; in cros_ec_spi_receive_response()
330 dev_dbg(ec_dev->dev, "need %d, got %d bytes from preamble\n", in cros_ec_spi_receive_response()
343 dev_dbg(ec_dev->dev, "loop, todo=%d, need_len=%d, ptr=%zd\n", in cros_ec_spi_receive_response()
344 todo, need_len, ptr - ec_dev->din); in cros_ec_spi_receive_response()
346 ret = receive_n_bytes(ec_dev, ptr, todo); in cros_ec_spi_receive_response()
350 debug_packet(ec_dev->dev, "interim", ptr, todo); in cros_ec_spi_receive_response()
355 dev_dbg(ec_dev->dev, "loop done, ptr=%zd\n", ptr - ec_dev->din); in cros_ec_spi_receive_response()
366 static int cros_ec_pkt_xfer_spi(struct cros_ec_device *ec_dev, in cros_ec_pkt_xfer_spi() argument
371 struct cros_ec_spi *ec_spi = ec_dev->priv; in cros_ec_pkt_xfer_spi()
380 len = cros_ec_prepare_tx(ec_dev, ec_msg); in cros_ec_pkt_xfer_spi()
381 request = (struct ec_host_request *)ec_dev->dout; in cros_ec_pkt_xfer_spi()
382 dev_dbg(ec_dev->dev, "prepared, len=%d\n", len); in cros_ec_pkt_xfer_spi()
412 trans.tx_buf = ec_dev->dout; in cros_ec_pkt_xfer_spi()
436 ret = cros_ec_spi_receive_packet(ec_dev, in cros_ec_pkt_xfer_spi()
439 dev_err(ec_dev->dev, "spi transfer failed: %d\n", ret); in cros_ec_pkt_xfer_spi()
442 final_ret = terminate_request(ec_dev); in cros_ec_pkt_xfer_spi()
448 ptr = ec_dev->din; in cros_ec_pkt_xfer_spi()
454 ret = cros_ec_check_result(ec_dev, ec_msg); in cros_ec_pkt_xfer_spi()
461 dev_err(ec_dev->dev, "packet too long (%d bytes, expected %d)", in cros_ec_pkt_xfer_spi()
476 dev_err(ec_dev->dev, in cros_ec_pkt_xfer_spi()
498 static int cros_ec_cmd_xfer_spi(struct cros_ec_device *ec_dev, in cros_ec_cmd_xfer_spi() argument
501 struct cros_ec_spi *ec_spi = ec_dev->priv; in cros_ec_cmd_xfer_spi()
510 len = cros_ec_prepare_tx(ec_dev, ec_msg); in cros_ec_cmd_xfer_spi()
511 dev_dbg(ec_dev->dev, "prepared, len=%d\n", len); in cros_ec_cmd_xfer_spi()
529 debug_packet(ec_dev->dev, "out", ec_dev->dout, len); in cros_ec_cmd_xfer_spi()
531 trans.tx_buf = ec_dev->dout; in cros_ec_cmd_xfer_spi()
556 ret = cros_ec_spi_receive_response(ec_dev, in cros_ec_cmd_xfer_spi()
559 dev_err(ec_dev->dev, "spi transfer failed: %d\n", ret); in cros_ec_cmd_xfer_spi()
562 final_ret = terminate_request(ec_dev); in cros_ec_cmd_xfer_spi()
568 ptr = ec_dev->din; in cros_ec_cmd_xfer_spi()
572 ret = cros_ec_check_result(ec_dev, ec_msg); in cros_ec_cmd_xfer_spi()
579 dev_err(ec_dev->dev, "packet too long (%d bytes, expected %d)", in cros_ec_cmd_xfer_spi()
593 debug_packet(ec_dev->dev, "in", ptr, len + 3); in cros_ec_cmd_xfer_spi()
596 dev_err(ec_dev->dev, in cros_ec_cmd_xfer_spi()
630 struct cros_ec_device *ec_dev; in cros_ec_spi_probe() local
644 ec_dev = devm_kzalloc(dev, sizeof(*ec_dev), GFP_KERNEL); in cros_ec_spi_probe()
645 if (!ec_dev) in cros_ec_spi_probe()
651 spi_set_drvdata(spi, ec_dev); in cros_ec_spi_probe()
652 ec_dev->dev = dev; in cros_ec_spi_probe()
653 ec_dev->priv = ec_spi; in cros_ec_spi_probe()
654 ec_dev->irq = spi->irq; in cros_ec_spi_probe()
655 ec_dev->cmd_xfer = cros_ec_cmd_xfer_spi; in cros_ec_spi_probe()
656 ec_dev->pkt_xfer = cros_ec_pkt_xfer_spi; in cros_ec_spi_probe()
657 ec_dev->phys_name = dev_name(&ec_spi->spi->dev); in cros_ec_spi_probe()
658 ec_dev->din_size = EC_MSG_PREAMBLE_COUNT + in cros_ec_spi_probe()
661 ec_dev->dout_size = sizeof(struct ec_host_request); in cros_ec_spi_probe()
664 err = cros_ec_register(ec_dev); in cros_ec_spi_probe()
677 struct cros_ec_device *ec_dev; in cros_ec_spi_remove() local
679 ec_dev = spi_get_drvdata(spi); in cros_ec_spi_remove()
680 cros_ec_remove(ec_dev); in cros_ec_spi_remove()
688 struct cros_ec_device *ec_dev = dev_get_drvdata(dev); in cros_ec_spi_suspend() local
690 return cros_ec_suspend(ec_dev); in cros_ec_spi_suspend()
695 struct cros_ec_device *ec_dev = dev_get_drvdata(dev); in cros_ec_spi_resume() local
697 return cros_ec_resume(ec_dev); in cros_ec_spi_resume()