Lines Matching +full:cros +full:- +full:ec
1 // SPDX-License-Identifier: GPL-2.0
3 * Driver for cros-ec proximity sensor exposed through MKBP switch
27 struct cros_ec_device *ec; member
64 struct ec_params_mkbp_info *params = (struct ec_params_mkbp_info *)buf->data; in cros_ec_mkbp_proximity_query()
66 u32 *switches = (u32 *)buf->data; in cros_ec_mkbp_proximity_query()
70 msg->command = EC_CMD_MKBP_INFO; in cros_ec_mkbp_proximity_query()
71 msg->version = 1; in cros_ec_mkbp_proximity_query()
72 msg->outsize = sizeof(*params); in cros_ec_mkbp_proximity_query()
73 msg->insize = insize; in cros_ec_mkbp_proximity_query()
75 params->info_type = EC_MKBP_INFO_CURRENT; in cros_ec_mkbp_proximity_query()
76 params->event_type = EC_MKBP_EVENT_SWITCH; in cros_ec_mkbp_proximity_query()
83 dev_warn(ec_dev->dev, "wrong result size: %d != %zu\n", ret, in cros_ec_mkbp_proximity_query()
85 return -EPROTO; in cros_ec_mkbp_proximity_query()
97 struct iio_dev *indio_dev = data->indio_dev; in cros_ec_mkbp_proximity_push_event()
98 struct cros_ec_device *ec = data->ec; in cros_ec_mkbp_proximity_push_event() local
100 mutex_lock(&data->lock); in cros_ec_mkbp_proximity_push_event()
101 if (state != data->last_proximity) { in cros_ec_mkbp_proximity_push_event()
102 if (data->enabled) { in cros_ec_mkbp_proximity_push_event()
103 timestamp = ktime_to_ns(ec->last_event_time); in cros_ec_mkbp_proximity_push_event()
112 data->last_proximity = state; in cros_ec_mkbp_proximity_push_event()
114 mutex_unlock(&data->lock); in cros_ec_mkbp_proximity_push_event()
122 struct cros_ec_device *ec = _ec; in cros_ec_mkbp_proximity_notify() local
123 u8 event_type = ec->event_data.event_type & EC_MKBP_EVENT_TYPE_MASK; in cros_ec_mkbp_proximity_notify()
131 switches = &ec->event_data.data.switches; in cros_ec_mkbp_proximity_notify()
144 struct cros_ec_device *ec = data->ec; in cros_ec_mkbp_proximity_read_raw() local
146 if (chan->type == IIO_PROXIMITY && mask == IIO_CHAN_INFO_RAW) in cros_ec_mkbp_proximity_read_raw()
147 return cros_ec_mkbp_proximity_query(ec, val); in cros_ec_mkbp_proximity_read_raw()
149 return -EINVAL; in cros_ec_mkbp_proximity_read_raw()
159 return data->enabled; in cros_ec_mkbp_proximity_read_event_config()
169 mutex_lock(&data->lock); in cros_ec_mkbp_proximity_write_event_config()
170 data->enabled = state; in cros_ec_mkbp_proximity_write_event_config()
171 mutex_unlock(&data->lock); in cros_ec_mkbp_proximity_write_event_config()
185 struct cros_ec_device *ec = data->ec; in cros_ec_mkbp_proximity_resume() local
188 ret = cros_ec_mkbp_proximity_query(ec, &state); in cros_ec_mkbp_proximity_resume()
204 struct device *dev = &pdev->dev; in cros_ec_mkbp_proximity_probe()
205 struct cros_ec_device *ec = dev_get_drvdata(dev->parent); in cros_ec_mkbp_proximity_probe() local
212 return -ENOMEM; in cros_ec_mkbp_proximity_probe()
215 data->ec = ec; in cros_ec_mkbp_proximity_probe()
216 data->indio_dev = indio_dev; in cros_ec_mkbp_proximity_probe()
217 data->last_proximity = -1; /* Unknown to start */ in cros_ec_mkbp_proximity_probe()
218 mutex_init(&data->lock); in cros_ec_mkbp_proximity_probe()
221 indio_dev->name = dev->driver->name; in cros_ec_mkbp_proximity_probe()
222 indio_dev->info = &cros_ec_mkbp_proximity_info; in cros_ec_mkbp_proximity_probe()
223 indio_dev->modes = INDIO_DIRECT_MODE; in cros_ec_mkbp_proximity_probe()
224 indio_dev->channels = cros_ec_mkbp_proximity_chan_spec; in cros_ec_mkbp_proximity_probe()
225 indio_dev->num_channels = ARRAY_SIZE(cros_ec_mkbp_proximity_chan_spec); in cros_ec_mkbp_proximity_probe()
231 data->notifier.notifier_call = cros_ec_mkbp_proximity_notify; in cros_ec_mkbp_proximity_probe()
232 blocking_notifier_chain_register(&ec->event_notifier, &data->notifier); in cros_ec_mkbp_proximity_probe()
240 struct cros_ec_device *ec = data->ec; in cros_ec_mkbp_proximity_remove() local
242 blocking_notifier_chain_unregister(&ec->event_notifier, in cros_ec_mkbp_proximity_remove()
243 &data->notifier); in cros_ec_mkbp_proximity_remove()
247 { .compatible = "google,cros-ec-mkbp-proximity" },
254 .name = "cros-ec-mkbp-proximity",
264 MODULE_DESCRIPTION("ChromeOS EC MKBP proximity sensor driver");