diff options
| author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2014-11-05 14:42:48 -0500 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2014-11-05 14:42:48 -0500 |
| commit | be61a0d78449f53519905640ac3a9f24c197cbaf (patch) | |
| tree | 216a7655e2d6dc8f751214aa93a4863a27954a98 /drivers/iio/common | |
| parent | 7be921a226dcbbbd8fb6f5d63bea4856b3a11624 (diff) | |
| parent | 4e4cd14e7cbead5ca20465f4a7ce973d42434a2f (diff) | |
Merge tag 'iio-for-3.19a' of git://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio into staging-next
Jonathan writes:
First round of new drivers, features and cleanups for IIO in the 3.19 cycle.
New drivers / supported parts
* rockchip - rk3066-tsadc variant
* si7020 humidity and temperature sensor
* mcp320x - add mcp3001, mcp3002, mcp3004, mcp3008, mcp3201, mcp3202
* bmp280 pressure and temperature sensor
* Qualcomm SPMI PMIC current ADC driver
* Exynos_adc - support exynos7
New features
* vf610-adc - add temperature sensor support
* Documentation of current attributes, scaled pressure, offset and
scaled humidity, RGBC intensity gain factor and scale applied to
differential voltage channels.
* Bring iio_event_monitor up to date with newer modifiers.
* Add of_xlate function to allow for complex channel mappings from the
device tree.
* Add -g parameter to generic_buffer example to allow for devices with
directly fed (no trigger) buffers.
* Move exynos driver over to syscon for PMU register access.
Cleanups, fixes for new drivers
* lis3l02dq drop an unneeded else.
* st sensors - renam st_sensors to st_sensor_settings (for clarity)
* st sensors - drop an unused parameter from all the probe utility
functions.
* vf610 better error handling and tidy up.
* si7020 - cleanups following merge
* as3935 - drop some unnecessary semicolons.
* bmp280 - fix the pressure calculation.
Diffstat (limited to 'drivers/iio/common')
| -rw-r--r-- | drivers/iio/common/st_sensors/st_sensors_core.c | 126 | ||||
| -rw-r--r-- | drivers/iio/common/st_sensors/st_sensors_i2c.c | 1 | ||||
| -rw-r--r-- | drivers/iio/common/st_sensors/st_sensors_spi.c | 1 |
3 files changed, 70 insertions, 58 deletions
diff --git a/drivers/iio/common/st_sensors/st_sensors_core.c b/drivers/iio/common/st_sensors/st_sensors_core.c index 24cfe4e044f9..edd13d2b4121 100644 --- a/drivers/iio/common/st_sensors/st_sensors_core.c +++ b/drivers/iio/common/st_sensors/st_sensors_core.c | |||
| @@ -44,18 +44,18 @@ st_sensors_write_data_with_mask_error: | |||
| 44 | return err; | 44 | return err; |
| 45 | } | 45 | } |
| 46 | 46 | ||
| 47 | static int st_sensors_match_odr(struct st_sensors *sensor, | 47 | static int st_sensors_match_odr(struct st_sensor_settings *sensor_settings, |
| 48 | unsigned int odr, struct st_sensor_odr_avl *odr_out) | 48 | unsigned int odr, struct st_sensor_odr_avl *odr_out) |
| 49 | { | 49 | { |
| 50 | int i, ret = -EINVAL; | 50 | int i, ret = -EINVAL; |
| 51 | 51 | ||
| 52 | for (i = 0; i < ST_SENSORS_ODR_LIST_MAX; i++) { | 52 | for (i = 0; i < ST_SENSORS_ODR_LIST_MAX; i++) { |
| 53 | if (sensor->odr.odr_avl[i].hz == 0) | 53 | if (sensor_settings->odr.odr_avl[i].hz == 0) |
| 54 | goto st_sensors_match_odr_error; | 54 | goto st_sensors_match_odr_error; |
| 55 | 55 | ||
| 56 | if (sensor->odr.odr_avl[i].hz == odr) { | 56 | if (sensor_settings->odr.odr_avl[i].hz == odr) { |
| 57 | odr_out->hz = sensor->odr.odr_avl[i].hz; | 57 | odr_out->hz = sensor_settings->odr.odr_avl[i].hz; |
| 58 | odr_out->value = sensor->odr.odr_avl[i].value; | 58 | odr_out->value = sensor_settings->odr.odr_avl[i].value; |
| 59 | ret = 0; | 59 | ret = 0; |
| 60 | break; | 60 | break; |
| 61 | } | 61 | } |
| @@ -71,23 +71,26 @@ int st_sensors_set_odr(struct iio_dev *indio_dev, unsigned int odr) | |||
| 71 | struct st_sensor_odr_avl odr_out = {0, 0}; | 71 | struct st_sensor_odr_avl odr_out = {0, 0}; |
| 72 | struct st_sensor_data *sdata = iio_priv(indio_dev); | 72 | struct st_sensor_data *sdata = iio_priv(indio_dev); |
| 73 | 73 | ||
| 74 | err = st_sensors_match_odr(sdata->sensor, odr, &odr_out); | 74 | err = st_sensors_match_odr(sdata->sensor_settings, odr, &odr_out); |
| 75 | if (err < 0) | 75 | if (err < 0) |
| 76 | goto st_sensors_match_odr_error; | 76 | goto st_sensors_match_odr_error; |
| 77 | 77 | ||
| 78 | if ((sdata->sensor->odr.addr == sdata->sensor->pw.addr) && | 78 | if ((sdata->sensor_settings->odr.addr == |
| 79 | (sdata->sensor->odr.mask == sdata->sensor->pw.mask)) { | 79 | sdata->sensor_settings->pw.addr) && |
| 80 | (sdata->sensor_settings->odr.mask == | ||
| 81 | sdata->sensor_settings->pw.mask)) { | ||
| 80 | if (sdata->enabled == true) { | 82 | if (sdata->enabled == true) { |
| 81 | err = st_sensors_write_data_with_mask(indio_dev, | 83 | err = st_sensors_write_data_with_mask(indio_dev, |
| 82 | sdata->sensor->odr.addr, | 84 | sdata->sensor_settings->odr.addr, |
| 83 | sdata->sensor->odr.mask, | 85 | sdata->sensor_settings->odr.mask, |
| 84 | odr_out.value); | 86 | odr_out.value); |
| 85 | } else { | 87 | } else { |
| 86 | err = 0; | 88 | err = 0; |
| 87 | } | 89 | } |
| 88 | } else { | 90 | } else { |
| 89 | err = st_sensors_write_data_with_mask(indio_dev, | 91 | err = st_sensors_write_data_with_mask(indio_dev, |
| 90 | sdata->sensor->odr.addr, sdata->sensor->odr.mask, | 92 | sdata->sensor_settings->odr.addr, |
| 93 | sdata->sensor_settings->odr.mask, | ||
| 91 | odr_out.value); | 94 | odr_out.value); |
| 92 | } | 95 | } |
| 93 | if (err >= 0) | 96 | if (err >= 0) |
| @@ -98,16 +101,16 @@ st_sensors_match_odr_error: | |||
| 98 | } | 101 | } |
| 99 | EXPORT_SYMBOL(st_sensors_set_odr); | 102 | EXPORT_SYMBOL(st_sensors_set_odr); |
| 100 | 103 | ||
| 101 | static int st_sensors_match_fs(struct st_sensors *sensor, | 104 | static int st_sensors_match_fs(struct st_sensor_settings *sensor_settings, |
| 102 | unsigned int fs, int *index_fs_avl) | 105 | unsigned int fs, int *index_fs_avl) |
| 103 | { | 106 | { |
| 104 | int i, ret = -EINVAL; | 107 | int i, ret = -EINVAL; |
| 105 | 108 | ||
| 106 | for (i = 0; i < ST_SENSORS_FULLSCALE_AVL_MAX; i++) { | 109 | for (i = 0; i < ST_SENSORS_FULLSCALE_AVL_MAX; i++) { |
| 107 | if (sensor->fs.fs_avl[i].num == 0) | 110 | if (sensor_settings->fs.fs_avl[i].num == 0) |
| 108 | goto st_sensors_match_odr_error; | 111 | goto st_sensors_match_odr_error; |
| 109 | 112 | ||
| 110 | if (sensor->fs.fs_avl[i].num == fs) { | 113 | if (sensor_settings->fs.fs_avl[i].num == fs) { |
| 111 | *index_fs_avl = i; | 114 | *index_fs_avl = i; |
| 112 | ret = 0; | 115 | ret = 0; |
| 113 | break; | 116 | break; |
| @@ -118,25 +121,24 @@ st_sensors_match_odr_error: | |||
| 118 | return ret; | 121 | return ret; |
| 119 | } | 122 | } |
| 120 | 123 | ||
| 121 | static int st_sensors_set_fullscale(struct iio_dev *indio_dev, | 124 | static int st_sensors_set_fullscale(struct iio_dev *indio_dev, unsigned int fs) |
| 122 | unsigned int fs) | ||
| 123 | { | 125 | { |
| 124 | int err, i = 0; | 126 | int err, i = 0; |
| 125 | struct st_sensor_data *sdata = iio_priv(indio_dev); | 127 | struct st_sensor_data *sdata = iio_priv(indio_dev); |
| 126 | 128 | ||
| 127 | err = st_sensors_match_fs(sdata->sensor, fs, &i); | 129 | err = st_sensors_match_fs(sdata->sensor_settings, fs, &i); |
| 128 | if (err < 0) | 130 | if (err < 0) |
| 129 | goto st_accel_set_fullscale_error; | 131 | goto st_accel_set_fullscale_error; |
| 130 | 132 | ||
| 131 | err = st_sensors_write_data_with_mask(indio_dev, | 133 | err = st_sensors_write_data_with_mask(indio_dev, |
| 132 | sdata->sensor->fs.addr, | 134 | sdata->sensor_settings->fs.addr, |
| 133 | sdata->sensor->fs.mask, | 135 | sdata->sensor_settings->fs.mask, |
| 134 | sdata->sensor->fs.fs_avl[i].value); | 136 | sdata->sensor_settings->fs.fs_avl[i].value); |
| 135 | if (err < 0) | 137 | if (err < 0) |
| 136 | goto st_accel_set_fullscale_error; | 138 | goto st_accel_set_fullscale_error; |
| 137 | 139 | ||
| 138 | sdata->current_fullscale = (struct st_sensor_fullscale_avl *) | 140 | sdata->current_fullscale = (struct st_sensor_fullscale_avl *) |
| 139 | &sdata->sensor->fs.fs_avl[i]; | 141 | &sdata->sensor_settings->fs.fs_avl[i]; |
| 140 | return err; | 142 | return err; |
| 141 | 143 | ||
| 142 | st_accel_set_fullscale_error: | 144 | st_accel_set_fullscale_error: |
| @@ -153,10 +155,12 @@ int st_sensors_set_enable(struct iio_dev *indio_dev, bool enable) | |||
| 153 | struct st_sensor_data *sdata = iio_priv(indio_dev); | 155 | struct st_sensor_data *sdata = iio_priv(indio_dev); |
| 154 | 156 | ||
| 155 | if (enable) { | 157 | if (enable) { |
| 156 | tmp_value = sdata->sensor->pw.value_on; | 158 | tmp_value = sdata->sensor_settings->pw.value_on; |
| 157 | if ((sdata->sensor->odr.addr == sdata->sensor->pw.addr) && | 159 | if ((sdata->sensor_settings->odr.addr == |
| 158 | (sdata->sensor->odr.mask == sdata->sensor->pw.mask)) { | 160 | sdata->sensor_settings->pw.addr) && |
| 159 | err = st_sensors_match_odr(sdata->sensor, | 161 | (sdata->sensor_settings->odr.mask == |
| 162 | sdata->sensor_settings->pw.mask)) { | ||
| 163 | err = st_sensors_match_odr(sdata->sensor_settings, | ||
| 160 | sdata->odr, &odr_out); | 164 | sdata->odr, &odr_out); |
| 161 | if (err < 0) | 165 | if (err < 0) |
| 162 | goto set_enable_error; | 166 | goto set_enable_error; |
| @@ -164,8 +168,8 @@ int st_sensors_set_enable(struct iio_dev *indio_dev, bool enable) | |||
| 164 | found = true; | 168 | found = true; |
| 165 | } | 169 | } |
| 166 | err = st_sensors_write_data_with_mask(indio_dev, | 170 | err = st_sensors_write_data_with_mask(indio_dev, |
| 167 | sdata->sensor->pw.addr, | 171 | sdata->sensor_settings->pw.addr, |
| 168 | sdata->sensor->pw.mask, tmp_value); | 172 | sdata->sensor_settings->pw.mask, tmp_value); |
| 169 | if (err < 0) | 173 | if (err < 0) |
| 170 | goto set_enable_error; | 174 | goto set_enable_error; |
| 171 | 175 | ||
| @@ -175,9 +179,9 @@ int st_sensors_set_enable(struct iio_dev *indio_dev, bool enable) | |||
| 175 | sdata->odr = odr_out.hz; | 179 | sdata->odr = odr_out.hz; |
| 176 | } else { | 180 | } else { |
| 177 | err = st_sensors_write_data_with_mask(indio_dev, | 181 | err = st_sensors_write_data_with_mask(indio_dev, |
| 178 | sdata->sensor->pw.addr, | 182 | sdata->sensor_settings->pw.addr, |
| 179 | sdata->sensor->pw.mask, | 183 | sdata->sensor_settings->pw.mask, |
| 180 | sdata->sensor->pw.value_off); | 184 | sdata->sensor_settings->pw.value_off); |
| 181 | if (err < 0) | 185 | if (err < 0) |
| 182 | goto set_enable_error; | 186 | goto set_enable_error; |
| 183 | 187 | ||
| @@ -194,8 +198,9 @@ int st_sensors_set_axis_enable(struct iio_dev *indio_dev, u8 axis_enable) | |||
| 194 | struct st_sensor_data *sdata = iio_priv(indio_dev); | 198 | struct st_sensor_data *sdata = iio_priv(indio_dev); |
| 195 | 199 | ||
| 196 | return st_sensors_write_data_with_mask(indio_dev, | 200 | return st_sensors_write_data_with_mask(indio_dev, |
| 197 | sdata->sensor->enable_axis.addr, | 201 | sdata->sensor_settings->enable_axis.addr, |
| 198 | sdata->sensor->enable_axis.mask, axis_enable); | 202 | sdata->sensor_settings->enable_axis.mask, |
| 203 | axis_enable); | ||
| 199 | } | 204 | } |
| 200 | EXPORT_SYMBOL(st_sensors_set_axis_enable); | 205 | EXPORT_SYMBOL(st_sensors_set_axis_enable); |
| 201 | 206 | ||
| @@ -236,13 +241,13 @@ void st_sensors_power_disable(struct iio_dev *indio_dev) | |||
| 236 | EXPORT_SYMBOL(st_sensors_power_disable); | 241 | EXPORT_SYMBOL(st_sensors_power_disable); |
| 237 | 242 | ||
| 238 | static int st_sensors_set_drdy_int_pin(struct iio_dev *indio_dev, | 243 | static int st_sensors_set_drdy_int_pin(struct iio_dev *indio_dev, |
| 239 | struct st_sensors_platform_data *pdata) | 244 | struct st_sensors_platform_data *pdata) |
| 240 | { | 245 | { |
| 241 | struct st_sensor_data *sdata = iio_priv(indio_dev); | 246 | struct st_sensor_data *sdata = iio_priv(indio_dev); |
| 242 | 247 | ||
| 243 | switch (pdata->drdy_int_pin) { | 248 | switch (pdata->drdy_int_pin) { |
| 244 | case 1: | 249 | case 1: |
| 245 | if (sdata->sensor->drdy_irq.mask_int1 == 0) { | 250 | if (sdata->sensor_settings->drdy_irq.mask_int1 == 0) { |
| 246 | dev_err(&indio_dev->dev, | 251 | dev_err(&indio_dev->dev, |
| 247 | "DRDY on INT1 not available.\n"); | 252 | "DRDY on INT1 not available.\n"); |
| 248 | return -EINVAL; | 253 | return -EINVAL; |
| @@ -250,7 +255,7 @@ static int st_sensors_set_drdy_int_pin(struct iio_dev *indio_dev, | |||
| 250 | sdata->drdy_int_pin = 1; | 255 | sdata->drdy_int_pin = 1; |
| 251 | break; | 256 | break; |
| 252 | case 2: | 257 | case 2: |
| 253 | if (sdata->sensor->drdy_irq.mask_int2 == 0) { | 258 | if (sdata->sensor_settings->drdy_irq.mask_int2 == 0) { |
| 254 | dev_err(&indio_dev->dev, | 259 | dev_err(&indio_dev->dev, |
| 255 | "DRDY on INT2 not available.\n"); | 260 | "DRDY on INT2 not available.\n"); |
| 256 | return -EINVAL; | 261 | return -EINVAL; |
| @@ -318,7 +323,7 @@ int st_sensors_init_sensor(struct iio_dev *indio_dev, | |||
| 318 | 323 | ||
| 319 | if (sdata->current_fullscale) { | 324 | if (sdata->current_fullscale) { |
| 320 | err = st_sensors_set_fullscale(indio_dev, | 325 | err = st_sensors_set_fullscale(indio_dev, |
| 321 | sdata->current_fullscale->num); | 326 | sdata->current_fullscale->num); |
| 322 | if (err < 0) | 327 | if (err < 0) |
| 323 | return err; | 328 | return err; |
| 324 | } else | 329 | } else |
| @@ -330,7 +335,8 @@ int st_sensors_init_sensor(struct iio_dev *indio_dev, | |||
| 330 | 335 | ||
| 331 | /* set BDU */ | 336 | /* set BDU */ |
| 332 | err = st_sensors_write_data_with_mask(indio_dev, | 337 | err = st_sensors_write_data_with_mask(indio_dev, |
| 333 | sdata->sensor->bdu.addr, sdata->sensor->bdu.mask, true); | 338 | sdata->sensor_settings->bdu.addr, |
| 339 | sdata->sensor_settings->bdu.mask, true); | ||
| 334 | if (err < 0) | 340 | if (err < 0) |
| 335 | return err; | 341 | return err; |
| 336 | 342 | ||
| @@ -346,26 +352,28 @@ int st_sensors_set_dataready_irq(struct iio_dev *indio_dev, bool enable) | |||
| 346 | u8 drdy_mask; | 352 | u8 drdy_mask; |
| 347 | struct st_sensor_data *sdata = iio_priv(indio_dev); | 353 | struct st_sensor_data *sdata = iio_priv(indio_dev); |
| 348 | 354 | ||
| 349 | if (!sdata->sensor->drdy_irq.addr) | 355 | if (!sdata->sensor_settings->drdy_irq.addr) |
| 350 | return 0; | 356 | return 0; |
| 351 | 357 | ||
| 352 | /* Enable/Disable the interrupt generator 1. */ | 358 | /* Enable/Disable the interrupt generator 1. */ |
| 353 | if (sdata->sensor->drdy_irq.ig1.en_addr > 0) { | 359 | if (sdata->sensor_settings->drdy_irq.ig1.en_addr > 0) { |
| 354 | err = st_sensors_write_data_with_mask(indio_dev, | 360 | err = st_sensors_write_data_with_mask(indio_dev, |
| 355 | sdata->sensor->drdy_irq.ig1.en_addr, | 361 | sdata->sensor_settings->drdy_irq.ig1.en_addr, |
| 356 | sdata->sensor->drdy_irq.ig1.en_mask, (int)enable); | 362 | sdata->sensor_settings->drdy_irq.ig1.en_mask, |
| 363 | (int)enable); | ||
| 357 | if (err < 0) | 364 | if (err < 0) |
| 358 | goto st_accel_set_dataready_irq_error; | 365 | goto st_accel_set_dataready_irq_error; |
| 359 | } | 366 | } |
| 360 | 367 | ||
| 361 | if (sdata->drdy_int_pin == 1) | 368 | if (sdata->drdy_int_pin == 1) |
| 362 | drdy_mask = sdata->sensor->drdy_irq.mask_int1; | 369 | drdy_mask = sdata->sensor_settings->drdy_irq.mask_int1; |
| 363 | else | 370 | else |
| 364 | drdy_mask = sdata->sensor->drdy_irq.mask_int2; | 371 | drdy_mask = sdata->sensor_settings->drdy_irq.mask_int2; |
| 365 | 372 | ||
| 366 | /* Enable/Disable the interrupt generator for data ready. */ | 373 | /* Enable/Disable the interrupt generator for data ready. */ |
| 367 | err = st_sensors_write_data_with_mask(indio_dev, | 374 | err = st_sensors_write_data_with_mask(indio_dev, |
| 368 | sdata->sensor->drdy_irq.addr, drdy_mask, (int)enable); | 375 | sdata->sensor_settings->drdy_irq.addr, |
| 376 | drdy_mask, (int)enable); | ||
| 369 | 377 | ||
| 370 | st_accel_set_dataready_irq_error: | 378 | st_accel_set_dataready_irq_error: |
| 371 | return err; | 379 | return err; |
| @@ -378,8 +386,8 @@ int st_sensors_set_fullscale_by_gain(struct iio_dev *indio_dev, int scale) | |||
| 378 | struct st_sensor_data *sdata = iio_priv(indio_dev); | 386 | struct st_sensor_data *sdata = iio_priv(indio_dev); |
| 379 | 387 | ||
| 380 | for (i = 0; i < ST_SENSORS_FULLSCALE_AVL_MAX; i++) { | 388 | for (i = 0; i < ST_SENSORS_FULLSCALE_AVL_MAX; i++) { |
| 381 | if ((sdata->sensor->fs.fs_avl[i].gain == scale) && | 389 | if ((sdata->sensor_settings->fs.fs_avl[i].gain == scale) && |
| 382 | (sdata->sensor->fs.fs_avl[i].gain != 0)) { | 390 | (sdata->sensor_settings->fs.fs_avl[i].gain != 0)) { |
| 383 | err = 0; | 391 | err = 0; |
| 384 | break; | 392 | break; |
| 385 | } | 393 | } |
| @@ -388,7 +396,7 @@ int st_sensors_set_fullscale_by_gain(struct iio_dev *indio_dev, int scale) | |||
| 388 | goto st_sensors_match_scale_error; | 396 | goto st_sensors_match_scale_error; |
| 389 | 397 | ||
| 390 | err = st_sensors_set_fullscale(indio_dev, | 398 | err = st_sensors_set_fullscale(indio_dev, |
| 391 | sdata->sensor->fs.fs_avl[i].num); | 399 | sdata->sensor_settings->fs.fs_avl[i].num); |
| 392 | 400 | ||
| 393 | st_sensors_match_scale_error: | 401 | st_sensors_match_scale_error: |
| 394 | return err; | 402 | return err; |
| @@ -439,7 +447,7 @@ int st_sensors_read_info_raw(struct iio_dev *indio_dev, | |||
| 439 | if (err < 0) | 447 | if (err < 0) |
| 440 | goto out; | 448 | goto out; |
| 441 | 449 | ||
| 442 | msleep((sdata->sensor->bootime * 1000) / sdata->odr); | 450 | msleep((sdata->sensor_settings->bootime * 1000) / sdata->odr); |
| 443 | err = st_sensors_read_axis_data(indio_dev, ch, val); | 451 | err = st_sensors_read_axis_data(indio_dev, ch, val); |
| 444 | if (err < 0) | 452 | if (err < 0) |
| 445 | goto out; | 453 | goto out; |
| @@ -456,7 +464,8 @@ out: | |||
| 456 | EXPORT_SYMBOL(st_sensors_read_info_raw); | 464 | EXPORT_SYMBOL(st_sensors_read_info_raw); |
| 457 | 465 | ||
| 458 | int st_sensors_check_device_support(struct iio_dev *indio_dev, | 466 | int st_sensors_check_device_support(struct iio_dev *indio_dev, |
| 459 | int num_sensors_list, const struct st_sensors *sensors) | 467 | int num_sensors_list, |
| 468 | const struct st_sensor_settings *sensor_settings) | ||
| 460 | { | 469 | { |
| 461 | u8 wai; | 470 | u8 wai; |
| 462 | int i, n, err; | 471 | int i, n, err; |
| @@ -470,23 +479,24 @@ int st_sensors_check_device_support(struct iio_dev *indio_dev, | |||
| 470 | } | 479 | } |
| 471 | 480 | ||
| 472 | for (i = 0; i < num_sensors_list; i++) { | 481 | for (i = 0; i < num_sensors_list; i++) { |
| 473 | if (sensors[i].wai == wai) | 482 | if (sensor_settings[i].wai == wai) |
| 474 | break; | 483 | break; |
| 475 | } | 484 | } |
| 476 | if (i == num_sensors_list) | 485 | if (i == num_sensors_list) |
| 477 | goto device_not_supported; | 486 | goto device_not_supported; |
| 478 | 487 | ||
| 479 | for (n = 0; n < ARRAY_SIZE(sensors[i].sensors_supported); n++) { | 488 | for (n = 0; n < ARRAY_SIZE(sensor_settings[i].sensors_supported); n++) { |
| 480 | if (strcmp(indio_dev->name, | 489 | if (strcmp(indio_dev->name, |
| 481 | &sensors[i].sensors_supported[n][0]) == 0) | 490 | &sensor_settings[i].sensors_supported[n][0]) == 0) |
| 482 | break; | 491 | break; |
| 483 | } | 492 | } |
| 484 | if (n == ARRAY_SIZE(sensors[i].sensors_supported)) { | 493 | if (n == ARRAY_SIZE(sensor_settings[i].sensors_supported)) { |
| 485 | dev_err(&indio_dev->dev, "device name and WhoAmI mismatch.\n"); | 494 | dev_err(&indio_dev->dev, "device name and WhoAmI mismatch.\n"); |
| 486 | goto sensor_name_mismatch; | 495 | goto sensor_name_mismatch; |
| 487 | } | 496 | } |
| 488 | 497 | ||
| 489 | sdata->sensor = (struct st_sensors *)&sensors[i]; | 498 | sdata->sensor_settings = |
| 499 | (struct st_sensor_settings *)&sensor_settings[i]; | ||
| 490 | 500 | ||
| 491 | return i; | 501 | return i; |
| 492 | 502 | ||
| @@ -508,11 +518,11 @@ ssize_t st_sensors_sysfs_sampling_frequency_avail(struct device *dev, | |||
| 508 | 518 | ||
| 509 | mutex_lock(&indio_dev->mlock); | 519 | mutex_lock(&indio_dev->mlock); |
| 510 | for (i = 0; i < ST_SENSORS_ODR_LIST_MAX; i++) { | 520 | for (i = 0; i < ST_SENSORS_ODR_LIST_MAX; i++) { |
| 511 | if (sdata->sensor->odr.odr_avl[i].hz == 0) | 521 | if (sdata->sensor_settings->odr.odr_avl[i].hz == 0) |
| 512 | break; | 522 | break; |
| 513 | 523 | ||
| 514 | len += scnprintf(buf + len, PAGE_SIZE - len, "%d ", | 524 | len += scnprintf(buf + len, PAGE_SIZE - len, "%d ", |
| 515 | sdata->sensor->odr.odr_avl[i].hz); | 525 | sdata->sensor_settings->odr.odr_avl[i].hz); |
| 516 | } | 526 | } |
| 517 | mutex_unlock(&indio_dev->mlock); | 527 | mutex_unlock(&indio_dev->mlock); |
| 518 | buf[len - 1] = '\n'; | 528 | buf[len - 1] = '\n'; |
| @@ -530,11 +540,11 @@ ssize_t st_sensors_sysfs_scale_avail(struct device *dev, | |||
| 530 | 540 | ||
| 531 | mutex_lock(&indio_dev->mlock); | 541 | mutex_lock(&indio_dev->mlock); |
| 532 | for (i = 0; i < ST_SENSORS_FULLSCALE_AVL_MAX; i++) { | 542 | for (i = 0; i < ST_SENSORS_FULLSCALE_AVL_MAX; i++) { |
| 533 | if (sdata->sensor->fs.fs_avl[i].num == 0) | 543 | if (sdata->sensor_settings->fs.fs_avl[i].num == 0) |
| 534 | break; | 544 | break; |
| 535 | 545 | ||
| 536 | len += scnprintf(buf + len, PAGE_SIZE - len, "0.%06u ", | 546 | len += scnprintf(buf + len, PAGE_SIZE - len, "0.%06u ", |
| 537 | sdata->sensor->fs.fs_avl[i].gain); | 547 | sdata->sensor_settings->fs.fs_avl[i].gain); |
| 538 | } | 548 | } |
| 539 | mutex_unlock(&indio_dev->mlock); | 549 | mutex_unlock(&indio_dev->mlock); |
| 540 | buf[len - 1] = '\n'; | 550 | buf[len - 1] = '\n'; |
diff --git a/drivers/iio/common/st_sensors/st_sensors_i2c.c b/drivers/iio/common/st_sensors/st_sensors_i2c.c index bb6f3085f57b..98cfee296d46 100644 --- a/drivers/iio/common/st_sensors/st_sensors_i2c.c +++ b/drivers/iio/common/st_sensors/st_sensors_i2c.c | |||
| @@ -72,6 +72,7 @@ void st_sensors_i2c_configure(struct iio_dev *indio_dev, | |||
| 72 | indio_dev->dev.parent = &client->dev; | 72 | indio_dev->dev.parent = &client->dev; |
| 73 | indio_dev->name = client->name; | 73 | indio_dev->name = client->name; |
| 74 | 74 | ||
| 75 | sdata->dev = &client->dev; | ||
| 75 | sdata->tf = &st_sensors_tf_i2c; | 76 | sdata->tf = &st_sensors_tf_i2c; |
| 76 | sdata->get_irq_data_ready = st_sensors_i2c_get_irq; | 77 | sdata->get_irq_data_ready = st_sensors_i2c_get_irq; |
| 77 | } | 78 | } |
diff --git a/drivers/iio/common/st_sensors/st_sensors_spi.c b/drivers/iio/common/st_sensors/st_sensors_spi.c index 251baf6abc25..78a6a1ab3ece 100644 --- a/drivers/iio/common/st_sensors/st_sensors_spi.c +++ b/drivers/iio/common/st_sensors/st_sensors_spi.c | |||
| @@ -111,6 +111,7 @@ void st_sensors_spi_configure(struct iio_dev *indio_dev, | |||
| 111 | indio_dev->dev.parent = &spi->dev; | 111 | indio_dev->dev.parent = &spi->dev; |
| 112 | indio_dev->name = spi->modalias; | 112 | indio_dev->name = spi->modalias; |
| 113 | 113 | ||
| 114 | sdata->dev = &spi->dev; | ||
| 114 | sdata->tf = &st_sensors_tf_spi; | 115 | sdata->tf = &st_sensors_tf_spi; |
| 115 | sdata->get_irq_data_ready = st_sensors_spi_get_irq; | 116 | sdata->get_irq_data_ready = st_sensors_spi_get_irq; |
| 116 | } | 117 | } |
