Lines Matching refs:ec_dev

25 static int prepare_packet(struct cros_ec_device *ec_dev,  in prepare_packet()  argument
33 BUG_ON(ec_dev->proto_version != EC_HOST_REQUEST_VERSION); in prepare_packet()
34 BUG_ON(msg->outsize + sizeof(*request) > ec_dev->dout_size); in prepare_packet()
36 out = ec_dev->dout; in prepare_packet()
58 static int send_command(struct cros_ec_device *ec_dev, in send_command() argument
63 if (ec_dev->proto_version > 2) in send_command()
64 ret = ec_dev->pkt_xfer(ec_dev, msg); in send_command()
66 ret = ec_dev->cmd_xfer(ec_dev, msg); in send_command()
90 ret = ec_dev->cmd_xfer(ec_dev, status_msg); in send_command()
110 int cros_ec_prepare_tx(struct cros_ec_device *ec_dev, in cros_ec_prepare_tx() argument
117 if (ec_dev->proto_version > 2) in cros_ec_prepare_tx()
118 return prepare_packet(ec_dev, msg); in cros_ec_prepare_tx()
121 out = ec_dev->dout; in cros_ec_prepare_tx()
134 int cros_ec_check_result(struct cros_ec_device *ec_dev, in cros_ec_check_result() argument
141 dev_dbg(ec_dev->dev, "command 0x%02x in progress\n", in cros_ec_check_result()
145 dev_dbg(ec_dev->dev, "command 0x%02x returned %d\n", in cros_ec_check_result()
152 static int cros_ec_host_command_proto_query(struct cros_ec_device *ec_dev, in cros_ec_host_command_proto_query() argument
164 if (!ec_dev->pkt_xfer) in cros_ec_host_command_proto_query()
171 ret = send_command(ec_dev, msg); in cros_ec_host_command_proto_query()
174 dev_dbg(ec_dev->dev, in cros_ec_host_command_proto_query()
188 static int cros_ec_host_command_proto_query_v2(struct cros_ec_device *ec_dev) in cros_ec_host_command_proto_query_v2() argument
209 ret = send_command(ec_dev, msg); in cros_ec_host_command_proto_query_v2()
212 dev_dbg(ec_dev->dev, in cros_ec_host_command_proto_query_v2()
217 dev_err(ec_dev->dev, in cros_ec_host_command_proto_query_v2()
223 dev_err(ec_dev->dev, in cros_ec_host_command_proto_query_v2()
237 int cros_ec_query_all(struct cros_ec_device *ec_dev) in cros_ec_query_all() argument
239 struct device *dev = ec_dev->dev; in cros_ec_query_all()
250 ec_dev->proto_version = 3; in cros_ec_query_all()
251 ret = cros_ec_host_command_proto_query(ec_dev, 0, proto_msg); in cros_ec_query_all()
256 ec_dev->max_request = proto_info->max_request_packet_size - in cros_ec_query_all()
258 ec_dev->max_response = proto_info->max_response_packet_size - in cros_ec_query_all()
260 ec_dev->proto_version = in cros_ec_query_all()
263 dev_dbg(ec_dev->dev, in cros_ec_query_all()
265 ec_dev->proto_version); in cros_ec_query_all()
267 ec_dev->din_size = ec_dev->max_response + in cros_ec_query_all()
270 ec_dev->dout_size = ec_dev->max_request + in cros_ec_query_all()
277 ret = cros_ec_host_command_proto_query(ec_dev, 1, proto_msg); in cros_ec_query_all()
280 dev_dbg(ec_dev->dev, "no PD chip found: %d\n", ret); in cros_ec_query_all()
281 ec_dev->max_passthru = 0; in cros_ec_query_all()
283 dev_dbg(ec_dev->dev, "found PD chip\n"); in cros_ec_query_all()
284 ec_dev->max_passthru = in cros_ec_query_all()
290 ec_dev->proto_version = 2; in cros_ec_query_all()
291 ret = cros_ec_host_command_proto_query_v2(ec_dev); in cros_ec_query_all()
295 dev_dbg(ec_dev->dev, "falling back to proto v2\n"); in cros_ec_query_all()
297 ec_dev->max_request = EC_PROTO2_MAX_PARAM_SIZE; in cros_ec_query_all()
298 ec_dev->max_response = EC_PROTO2_MAX_PARAM_SIZE; in cros_ec_query_all()
299 ec_dev->max_passthru = 0; in cros_ec_query_all()
300 ec_dev->pkt_xfer = NULL; in cros_ec_query_all()
301 ec_dev->din_size = EC_MSG_BYTES; in cros_ec_query_all()
302 ec_dev->dout_size = EC_MSG_BYTES; in cros_ec_query_all()
309 ec_dev->proto_version = EC_PROTO_VERSION_UNKNOWN; in cros_ec_query_all()
310 dev_dbg(ec_dev->dev, "EC query failed: %d\n", ret); in cros_ec_query_all()
315 devm_kfree(dev, ec_dev->din); in cros_ec_query_all()
316 devm_kfree(dev, ec_dev->dout); in cros_ec_query_all()
318 ec_dev->din = devm_kzalloc(dev, ec_dev->din_size, GFP_KERNEL); in cros_ec_query_all()
319 if (!ec_dev->din) { in cros_ec_query_all()
324 ec_dev->dout = devm_kzalloc(dev, ec_dev->dout_size, GFP_KERNEL); in cros_ec_query_all()
325 if (!ec_dev->dout) { in cros_ec_query_all()
326 devm_kfree(dev, ec_dev->din); in cros_ec_query_all()
337 int cros_ec_cmd_xfer(struct cros_ec_device *ec_dev, in cros_ec_cmd_xfer() argument
342 mutex_lock(&ec_dev->lock); in cros_ec_cmd_xfer()
343 if (ec_dev->proto_version == EC_PROTO_VERSION_UNKNOWN) { in cros_ec_cmd_xfer()
344 ret = cros_ec_query_all(ec_dev); in cros_ec_cmd_xfer()
346 dev_err(ec_dev->dev, in cros_ec_cmd_xfer()
348 mutex_unlock(&ec_dev->lock); in cros_ec_cmd_xfer()
353 if (msg->insize > ec_dev->max_response) { in cros_ec_cmd_xfer()
354 dev_dbg(ec_dev->dev, "clamping message receive buffer\n"); in cros_ec_cmd_xfer()
355 msg->insize = ec_dev->max_response; in cros_ec_cmd_xfer()
359 if (msg->outsize > ec_dev->max_request) { in cros_ec_cmd_xfer()
360 dev_err(ec_dev->dev, in cros_ec_cmd_xfer()
363 ec_dev->max_request); in cros_ec_cmd_xfer()
364 mutex_unlock(&ec_dev->lock); in cros_ec_cmd_xfer()
368 if (msg->outsize > ec_dev->max_passthru) { in cros_ec_cmd_xfer()
369 dev_err(ec_dev->dev, in cros_ec_cmd_xfer()
372 ec_dev->max_passthru); in cros_ec_cmd_xfer()
373 mutex_unlock(&ec_dev->lock); in cros_ec_cmd_xfer()
377 ret = send_command(ec_dev, msg); in cros_ec_cmd_xfer()
378 mutex_unlock(&ec_dev->lock); in cros_ec_cmd_xfer()