Lines Matching full:sensor
4 * System Control and Management Interface(SCMI) based IIO sensor driver
40 struct scmi_iio_priv *sensor; in scmi_iio_sensor_update_cb() local
48 sensor = container_of(nb, struct scmi_iio_priv, sensor_update_nb); in scmi_iio_sensor_update_cb()
51 sensor->iio_buf[i] = sensor_update->readings[i].value; in scmi_iio_sensor_update_cb()
53 if (!sensor->sensor_info->timestamped) { in scmi_iio_sensor_update_cb()
67 tstamp_scale = sensor->sensor_info->tstamp_scale + in scmi_iio_sensor_update_cb()
77 scmi_iio_dev = sensor->indio_dev; in scmi_iio_sensor_update_cb()
78 iio_push_to_buffers_with_timestamp(scmi_iio_dev, sensor->iio_buf, in scmi_iio_sensor_update_cb()
85 struct scmi_iio_priv *sensor = iio_priv(iio_dev); in scmi_iio_buffer_preenable() local
89 if (sensor->sensor_info->timestamped) in scmi_iio_buffer_preenable()
95 err = sensor->sensor_ops->config_set(sensor->ph, in scmi_iio_buffer_preenable()
96 sensor->sensor_info->id, in scmi_iio_buffer_preenable()
99 dev_err(&iio_dev->dev, "Error in enabling sensor %s err %d", in scmi_iio_buffer_preenable()
100 sensor->sensor_info->name, err); in scmi_iio_buffer_preenable()
107 struct scmi_iio_priv *sensor = iio_priv(iio_dev); in scmi_iio_buffer_postdisable() local
113 err = sensor->sensor_ops->config_set(sensor->ph, in scmi_iio_buffer_postdisable()
114 sensor->sensor_info->id, in scmi_iio_buffer_postdisable()
118 "Error in disabling sensor %s with err %d", in scmi_iio_buffer_postdisable()
119 sensor->sensor_info->name, err); in scmi_iio_buffer_postdisable()
132 struct scmi_iio_priv *sensor = iio_priv(iio_dev); in scmi_iio_set_odr_val() local
138 int err = sensor->sensor_ops->config_get(sensor->ph, in scmi_iio_set_odr_val()
139 sensor->sensor_info->id, in scmi_iio_set_odr_val()
143 "Error in getting sensor config for sensor %s err %d", in scmi_iio_set_odr_val()
144 sensor->sensor_info->name, err); in scmi_iio_set_odr_val()
151 * The seconds field in the sensor interval in SCMI is 16 bits long in scmi_iio_set_odr_val()
166 "Trying to set invalid sensor update value for sensor %s", in scmi_iio_set_odr_val()
167 sensor->sensor_info->name); in scmi_iio_set_odr_val()
176 if (sensor->sensor_info->timestamped) { in scmi_iio_set_odr_val()
186 err = sensor->sensor_ops->config_set(sensor->ph, in scmi_iio_set_odr_val()
187 sensor->sensor_info->id, in scmi_iio_set_odr_val()
191 "Error in setting sensor update interval for sensor %s value %u err %d", in scmi_iio_set_odr_val()
192 sensor->sensor_info->name, sensor_config, err); in scmi_iio_set_odr_val()
219 struct scmi_iio_priv *sensor = iio_priv(iio_dev); in scmi_iio_read_avail() local
223 *vals = sensor->freq_avail; in scmi_iio_read_avail()
225 *length = sensor->sensor_info->intervals.count * 2; in scmi_iio_read_avail()
226 if (sensor->sensor_info->intervals.segmented) in scmi_iio_read_avail()
249 struct scmi_iio_priv *sensor = iio_priv(iio_dev); in scmi_iio_get_odr_val() local
253 int err = sensor->sensor_ops->config_get(sensor->ph, in scmi_iio_get_odr_val()
254 sensor->sensor_info->id, in scmi_iio_get_odr_val()
258 "Error in getting sensor config for sensor %s err %d", in scmi_iio_get_odr_val()
259 sensor->sensor_info->name, err); in scmi_iio_get_odr_val()
286 struct scmi_iio_priv *sensor = iio_priv(iio_dev); in scmi_iio_read_raw() local
292 scale = sensor->sensor_info->axis[ch->scan_index].scale; in scmi_iio_read_raw()
319 struct scmi_iio_priv *sensor = iio_priv(iio_dev); in scmi_iio_get_raw_available() local
329 if (sensor->sensor_info->axis[0].extended_attrs) { in scmi_iio_get_raw_available()
330 min_range = sensor->sensor_info->axis[0].attrs.min_range; in scmi_iio_get_raw_available()
331 max_range = sensor->sensor_info->axis[0].attrs.max_range; in scmi_iio_get_raw_available()
332 resolution = sensor->sensor_info->axis[0].resolution; in scmi_iio_get_raw_available()
333 exponent = sensor->sensor_info->axis[0].exponent; in scmi_iio_get_raw_available()
334 scale = sensor->sensor_info->axis[0].scale; in scmi_iio_get_raw_available()
338 * need to divide the resolution exponent by the sensor scale in scmi_iio_get_raw_available()
462 struct scmi_iio_priv *sensor = iio_priv(iio_dev); in scmi_iio_set_sampling_freq_avail() local
465 sensor->freq_avail = in scmi_iio_set_sampling_freq_avail()
467 sizeof(*sensor->freq_avail) * in scmi_iio_set_sampling_freq_avail()
468 (sensor->sensor_info->intervals.count * 2), in scmi_iio_set_sampling_freq_avail()
470 if (!sensor->freq_avail) in scmi_iio_set_sampling_freq_avail()
473 if (sensor->sensor_info->intervals.segmented) { in scmi_iio_set_sampling_freq_avail()
474 low_interval = sensor->sensor_info->intervals in scmi_iio_set_sampling_freq_avail()
478 sensor->freq_avail[0] = hz; in scmi_iio_set_sampling_freq_avail()
479 sensor->freq_avail[1] = uhz; in scmi_iio_set_sampling_freq_avail()
481 step_size = sensor->sensor_info->intervals in scmi_iio_set_sampling_freq_avail()
485 sensor->freq_avail[2] = hz; in scmi_iio_set_sampling_freq_avail()
486 sensor->freq_avail[3] = uhz; in scmi_iio_set_sampling_freq_avail()
488 high_interval = sensor->sensor_info->intervals in scmi_iio_set_sampling_freq_avail()
493 sensor->freq_avail[4] = hz; in scmi_iio_set_sampling_freq_avail()
494 sensor->freq_avail[5] = uhz; in scmi_iio_set_sampling_freq_avail()
496 for (i = 0; i < sensor->sensor_info->intervals.count; i++) { in scmi_iio_set_sampling_freq_avail()
497 cur_interval = sensor->sensor_info->intervals.desc[i]; in scmi_iio_set_sampling_freq_avail()
501 sensor->freq_avail[i * 2] = hz; in scmi_iio_set_sampling_freq_avail()
502 sensor->freq_avail[i * 2 + 1] = uhz; in scmi_iio_set_sampling_freq_avail()
515 struct scmi_iio_priv *sensor; in scmi_alloc_iiodev() local
523 iiodev = devm_iio_device_alloc(dev, sizeof(*sensor)); in scmi_alloc_iiodev()
528 sensor = iio_priv(iiodev); in scmi_alloc_iiodev()
529 sensor->sensor_ops = ops; in scmi_alloc_iiodev()
530 sensor->ph = ph; in scmi_alloc_iiodev()
531 sensor->sensor_info = sensor_info; in scmi_alloc_iiodev()
532 sensor->sensor_update_nb.notifier_call = scmi_iio_sensor_update_cb; in scmi_alloc_iiodev()
533 sensor->indio_dev = iiodev; in scmi_alloc_iiodev()
567 &sensor->sensor_info->id, in scmi_alloc_iiodev()
568 &sensor->sensor_update_nb); in scmi_alloc_iiodev()
571 "Error in registering sensor update notifier for sensor %s err %d", in scmi_alloc_iiodev()
572 sensor->sensor_info->name, ret); in scmi_alloc_iiodev()
597 dev_err(dev, "SCMI device has no sensor interface\n"); in scmi_iio_dev_probe()
610 dev_err(dev, "SCMI sensor %d has missing info\n", i); in scmi_iio_dev_probe()
627 "failed to allocate IIO device for sensor %s: %ld\n", in scmi_iio_dev_probe()
638 "IIO buffer setup error at sensor %s: %d\n", in scmi_iio_dev_probe()
646 "IIO device registration failed at sensor %s: %d\n", in scmi_iio_dev_probe()
662 .name = "scmi-sensor-iiodev",