Lines Matching +full:cros +full:- +full:ec

1 // SPDX-License-Identifier: GPL-2.0
19 #define DRV_NAME "cros-ec-sensorhub"
53 struct cros_ec_command *msg = sensorhub->msg; in cros_ec_sensorhub_register()
54 struct cros_ec_dev *ec = sensorhub->ec; in cros_ec_sensorhub_register() local
59 msg->version = 1; in cros_ec_sensorhub_register()
60 msg->insize = sizeof(struct ec_response_motion_sense); in cros_ec_sensorhub_register()
61 msg->outsize = sizeof(struct ec_params_motion_sense); in cros_ec_sensorhub_register()
63 for (i = 0; i < sensorhub->sensor_num; i++) { in cros_ec_sensorhub_register()
64 sensorhub->params->cmd = MOTIONSENSE_CMD_INFO; in cros_ec_sensorhub_register()
65 sensorhub->params->info.sensor_num = i; in cros_ec_sensorhub_register()
67 ret = cros_ec_cmd_xfer_status(ec->ec_dev, msg); in cros_ec_sensorhub_register()
69 dev_warn(dev, "no info for EC sensor %d : %d/%d\n", in cros_ec_sensorhub_register()
70 i, ret, msg->result); in cros_ec_sensorhub_register()
74 switch (sensorhub->resp->info.type) { in cros_ec_sensorhub_register()
76 name = "cros-ec-accel"; in cros_ec_sensorhub_register()
79 name = "cros-ec-baro"; in cros_ec_sensorhub_register()
82 name = "cros-ec-gyro"; in cros_ec_sensorhub_register()
85 name = "cros-ec-mag"; in cros_ec_sensorhub_register()
88 name = "cros-ec-prox"; in cros_ec_sensorhub_register()
91 name = "cros-ec-light"; in cros_ec_sensorhub_register()
94 name = "cros-ec-activity"; in cros_ec_sensorhub_register()
98 sensorhub->resp->info.type); in cros_ec_sensorhub_register()
106 sensor_type[sensorhub->resp->info.type]++; in cros_ec_sensorhub_register()
110 ec->has_kb_wake_angle = true; in cros_ec_sensorhub_register()
112 if (cros_ec_check_features(ec, in cros_ec_sensorhub_register()
115 "cros-ec-lid-angle", in cros_ec_sensorhub_register()
126 struct device *dev = &pdev->dev; in cros_ec_sensorhub_probe()
127 struct cros_ec_dev *ec = dev_get_drvdata(dev->parent); in cros_ec_sensorhub_probe() local
134 ec->ec_dev->max_response), GFP_KERNEL); in cros_ec_sensorhub_probe()
136 return -ENOMEM; in cros_ec_sensorhub_probe()
138 msg->command = EC_CMD_MOTION_SENSE_CMD + ec->cmd_offset; in cros_ec_sensorhub_probe()
142 return -ENOMEM; in cros_ec_sensorhub_probe()
144 mutex_init(&data->cmd_lock); in cros_ec_sensorhub_probe()
146 data->dev = dev; in cros_ec_sensorhub_probe()
147 data->ec = ec; in cros_ec_sensorhub_probe()
148 data->msg = msg; in cros_ec_sensorhub_probe()
149 data->params = (struct ec_params_motion_sense *)msg->data; in cros_ec_sensorhub_probe()
150 data->resp = (struct ec_response_motion_sense *)msg->data; in cros_ec_sensorhub_probe()
154 /* Check whether this EC is a sensor hub. */ in cros_ec_sensorhub_probe()
155 if (cros_ec_check_features(ec, EC_FEATURE_MOTION_SENSE)) { in cros_ec_sensorhub_probe()
156 sensor_num = cros_ec_get_sensor_count(ec); in cros_ec_sensorhub_probe()
165 return -EINVAL; in cros_ec_sensorhub_probe()
167 data->sensor_num = sensor_num; in cros_ec_sensorhub_probe()
173 if (cros_ec_check_features(ec, EC_FEATURE_MOTION_SENSE_FIFO)) { in cros_ec_sensorhub_probe()
185 * When the EC does not have a FIFO, the sensors will query in cros_ec_sensorhub_probe()
188 if (cros_ec_check_features(ec, EC_FEATURE_MOTION_SENSE_FIFO)) { in cros_ec_sensorhub_probe()
206 data->sensor_num = 2; in cros_ec_sensorhub_probe()
207 for (i = 0; i < data->sensor_num; i++) { in cros_ec_sensorhub_probe()
209 "cros-ec-accel-legacy", i); in cros_ec_sensorhub_probe()
221 * When the EC is suspending, we must stop sending interrupt,
223 * Tell the EC to stop sending non-interrupt event on the iio ring.
228 struct cros_ec_dev *ec = sensorhub->ec; in cros_ec_sensorhub_suspend() local
230 if (cros_ec_check_features(ec, EC_FEATURE_MOTION_SENSE_FIFO)) in cros_ec_sensorhub_suspend()
238 struct cros_ec_dev *ec = sensorhub->ec; in cros_ec_sensorhub_resume() local
240 if (cros_ec_check_features(ec, EC_FEATURE_MOTION_SENSE_FIFO)) in cros_ec_sensorhub_resume()
262 MODULE_DESCRIPTION("ChromeOS EC MEMS Sensor Hub Driver");