Skip to content

Commit 317a0eb

Browse files
gwendalcrEnric Balletbo i Serra
authored andcommitted
iio: cros_ec: Use Hertz as unit for sampling frequency
To be compliant with other sensors, set and get sensor sampling frequency in Hz, not mHz. Fixes: ae7b02a ("iio: common: cros_ec_sensors: Expose cros_ec_sensors frequency range via iio sysfs") Signed-off-by: Gwendal Grignou <[email protected]> Acked-by: Jonathan Cameron <[email protected]> Signed-off-by: Enric Balletbo i Serra <[email protected]>
1 parent cb87556 commit 317a0eb

File tree

2 files changed

+22
-16
lines changed

2 files changed

+22
-16
lines changed

drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,7 @@ int cros_ec_sensors_core_init(struct platform_device *pdev,
253253
struct cros_ec_dev *ec = sensor_hub->ec;
254254
struct cros_ec_sensor_platform *sensor_platform = dev_get_platdata(dev);
255255
u32 ver_mask;
256+
int frequencies[ARRAY_SIZE(state->frequencies) / 2] = { 0 };
256257
int ret, i;
257258

258259
platform_set_drvdata(pdev, indio_dev);
@@ -301,20 +302,22 @@ int cros_ec_sensors_core_init(struct platform_device *pdev,
301302
state->calib[i].scale = MOTION_SENSE_DEFAULT_SCALE;
302303

303304
/* 0 is a correct value used to stop the device */
304-
state->frequencies[0] = 0;
305305
if (state->msg->version < 3) {
306306
get_default_min_max_freq(state->resp->info.type,
307-
&state->frequencies[1],
308-
&state->frequencies[2],
307+
&frequencies[1],
308+
&frequencies[2],
309309
&state->fifo_max_event_count);
310310
} else {
311-
state->frequencies[1] =
312-
state->resp->info_3.min_frequency;
313-
state->frequencies[2] =
314-
state->resp->info_3.max_frequency;
311+
frequencies[1] = state->resp->info_3.min_frequency;
312+
frequencies[2] = state->resp->info_3.max_frequency;
315313
state->fifo_max_event_count =
316314
state->resp->info_3.fifo_max_event_count;
317315
}
316+
for (i = 0; i < ARRAY_SIZE(frequencies); i++) {
317+
state->frequencies[2 * i] = frequencies[i] / 1000;
318+
state->frequencies[2 * i + 1] =
319+
(frequencies[i] % 1000) * 1000;
320+
}
318321

319322
if (cros_ec_check_features(ec, EC_FEATURE_MOTION_SENSE_FIFO)) {
320323
/*
@@ -728,7 +731,7 @@ int cros_ec_sensors_core_read(struct cros_ec_sensors_core_state *st,
728731
struct iio_chan_spec const *chan,
729732
int *val, int *val2, long mask)
730733
{
731-
int ret;
734+
int ret, frequency;
732735

733736
switch (mask) {
734737
case IIO_CHAN_INFO_SAMP_FREQ:
@@ -740,8 +743,10 @@ int cros_ec_sensors_core_read(struct cros_ec_sensors_core_state *st,
740743
if (ret)
741744
break;
742745

743-
*val = st->resp->sensor_odr.ret;
744-
ret = IIO_VAL_INT;
746+
frequency = st->resp->sensor_odr.ret;
747+
*val = frequency / 1000;
748+
*val2 = (frequency % 1000) * 1000;
749+
ret = IIO_VAL_INT_PLUS_MICRO;
745750
break;
746751
default:
747752
ret = -EINVAL;
@@ -776,7 +781,7 @@ int cros_ec_sensors_core_read_avail(struct iio_dev *indio_dev,
776781
case IIO_CHAN_INFO_SAMP_FREQ:
777782
*length = ARRAY_SIZE(state->frequencies);
778783
*vals = (const int *)&state->frequencies;
779-
*type = IIO_VAL_INT;
784+
*type = IIO_VAL_INT_PLUS_MICRO;
780785
return IIO_AVAIL_LIST;
781786
}
782787

@@ -798,12 +803,13 @@ int cros_ec_sensors_core_write(struct cros_ec_sensors_core_state *st,
798803
struct iio_chan_spec const *chan,
799804
int val, int val2, long mask)
800805
{
801-
int ret;
806+
int ret, frequency;
802807

803808
switch (mask) {
804809
case IIO_CHAN_INFO_SAMP_FREQ:
810+
frequency = val * 1000 + val2 / 1000;
805811
st->param.cmd = MOTIONSENSE_CMD_SENSOR_ODR;
806-
st->param.sensor_odr.data = val;
812+
st->param.sensor_odr.data = frequency;
807813

808814
/* Always roundup, so caller gets at least what it asks for. */
809815
st->param.sensor_odr.roundup = 1;

include/linux/iio/common/cros_ec_sensors_core.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ typedef irqreturn_t (*cros_ec_sensors_capture_t)(int irq, void *p);
5151
* is always 8-byte aligned.
5252
* @read_ec_sensors_data: function used for accessing sensors values
5353
* @fifo_max_event_count: Size of the EC sensor FIFO
54+
* @frequencies: Table of known available frequencies:
55+
* 0, Min and Max in mHz
5456
*/
5557
struct cros_ec_sensors_core_state {
5658
struct cros_ec_device *ec;
@@ -74,9 +76,7 @@ struct cros_ec_sensors_core_state {
7476
unsigned long scan_mask, s16 *data);
7577

7678
u32 fifo_max_event_count;
77-
78-
/* Table of known available frequencies : 0, Min and Max in mHz */
79-
int frequencies[3];
79+
int frequencies[6];
8080
};
8181

8282
int cros_ec_sensors_read_lpc(struct iio_dev *indio_dev, unsigned long scan_mask,

0 commit comments

Comments
 (0)