diff options
author | Jonathan Cameron <jic23@kernel.org> | 2014-06-22 15:59:00 -0400 |
---|---|---|
committer | Jonathan Cameron <jic23@kernel.org> | 2014-07-07 04:39:57 -0400 |
commit | 2d239c9e92087d5f4f667371ae350db9f76e3191 (patch) | |
tree | 114c0ce21c9f9258ee82ac849d15b715265f07b0 /drivers/iio | |
parent | a244e7b57f0fb778bd333b10fffbeb362b94ffc3 (diff) |
iio:st sensors: remove custom sampling frequence attribute in favour of core support.
This allows in kernel client drivers to access this
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Cc: Denis Ciocca <denis.ciocca@st.com>
Reviewed-by: Hartmut Knaack <knaack.h@gmx.de>
Diffstat (limited to 'drivers/iio')
-rw-r--r-- | drivers/iio/accel/st_accel_core.c | 12 | ||||
-rw-r--r-- | drivers/iio/common/st_sensors/st_sensors_core.c | 29 | ||||
-rw-r--r-- | drivers/iio/gyro/st_gyro_core.c | 12 | ||||
-rw-r--r-- | drivers/iio/magnetometer/st_magn_core.c | 12 | ||||
-rw-r--r-- | drivers/iio/pressure/st_pressure_core.c | 27 |
5 files changed, 55 insertions, 37 deletions
diff --git a/drivers/iio/accel/st_accel_core.c b/drivers/iio/accel/st_accel_core.c index a2abf7c2ce3b..087864854c61 100644 --- a/drivers/iio/accel/st_accel_core.c +++ b/drivers/iio/accel/st_accel_core.c | |||
@@ -393,6 +393,9 @@ static int st_accel_read_raw(struct iio_dev *indio_dev, | |||
393 | *val = 0; | 393 | *val = 0; |
394 | *val2 = adata->current_fullscale->gain; | 394 | *val2 = adata->current_fullscale->gain; |
395 | return IIO_VAL_INT_PLUS_MICRO; | 395 | return IIO_VAL_INT_PLUS_MICRO; |
396 | case IIO_CHAN_INFO_SAMP_FREQ: | ||
397 | *val = adata->odr; | ||
398 | return IIO_VAL_INT; | ||
396 | default: | 399 | default: |
397 | return -EINVAL; | 400 | return -EINVAL; |
398 | } | 401 | } |
@@ -410,6 +413,13 @@ static int st_accel_write_raw(struct iio_dev *indio_dev, | |||
410 | case IIO_CHAN_INFO_SCALE: | 413 | case IIO_CHAN_INFO_SCALE: |
411 | err = st_sensors_set_fullscale_by_gain(indio_dev, val2); | 414 | err = st_sensors_set_fullscale_by_gain(indio_dev, val2); |
412 | break; | 415 | break; |
416 | case IIO_CHAN_INFO_SAMP_FREQ: | ||
417 | if (val2) | ||
418 | return -EINVAL; | ||
419 | mutex_lock(&indio_dev->mlock); | ||
420 | err = st_sensors_set_odr(indio_dev, val); | ||
421 | mutex_unlock(&indio_dev->mlock); | ||
422 | return err; | ||
413 | default: | 423 | default: |
414 | return -EINVAL; | 424 | return -EINVAL; |
415 | } | 425 | } |
@@ -417,14 +427,12 @@ static int st_accel_write_raw(struct iio_dev *indio_dev, | |||
417 | return err; | 427 | return err; |
418 | } | 428 | } |
419 | 429 | ||
420 | static ST_SENSOR_DEV_ATTR_SAMP_FREQ(); | ||
421 | static ST_SENSORS_DEV_ATTR_SAMP_FREQ_AVAIL(); | 430 | static ST_SENSORS_DEV_ATTR_SAMP_FREQ_AVAIL(); |
422 | static ST_SENSORS_DEV_ATTR_SCALE_AVAIL(in_accel_scale_available); | 431 | static ST_SENSORS_DEV_ATTR_SCALE_AVAIL(in_accel_scale_available); |
423 | 432 | ||
424 | static struct attribute *st_accel_attributes[] = { | 433 | static struct attribute *st_accel_attributes[] = { |
425 | &iio_dev_attr_sampling_frequency_available.dev_attr.attr, | 434 | &iio_dev_attr_sampling_frequency_available.dev_attr.attr, |
426 | &iio_dev_attr_in_accel_scale_available.dev_attr.attr, | 435 | &iio_dev_attr_in_accel_scale_available.dev_attr.attr, |
427 | &iio_dev_attr_sampling_frequency.dev_attr.attr, | ||
428 | NULL, | 436 | NULL, |
429 | }; | 437 | }; |
430 | 438 | ||
diff --git a/drivers/iio/common/st_sensors/st_sensors_core.c b/drivers/iio/common/st_sensors/st_sensors_core.c index e8b932fed70e..30fb6407fad0 100644 --- a/drivers/iio/common/st_sensors/st_sensors_core.c +++ b/drivers/iio/common/st_sensors/st_sensors_core.c | |||
@@ -463,35 +463,6 @@ read_wai_error: | |||
463 | } | 463 | } |
464 | EXPORT_SYMBOL(st_sensors_check_device_support); | 464 | EXPORT_SYMBOL(st_sensors_check_device_support); |
465 | 465 | ||
466 | ssize_t st_sensors_sysfs_get_sampling_frequency(struct device *dev, | ||
467 | struct device_attribute *attr, char *buf) | ||
468 | { | ||
469 | struct st_sensor_data *adata = iio_priv(dev_get_drvdata(dev)); | ||
470 | |||
471 | return sprintf(buf, "%d\n", adata->odr); | ||
472 | } | ||
473 | EXPORT_SYMBOL(st_sensors_sysfs_get_sampling_frequency); | ||
474 | |||
475 | ssize_t st_sensors_sysfs_set_sampling_frequency(struct device *dev, | ||
476 | struct device_attribute *attr, const char *buf, size_t size) | ||
477 | { | ||
478 | int err; | ||
479 | unsigned int odr; | ||
480 | struct iio_dev *indio_dev = dev_get_drvdata(dev); | ||
481 | |||
482 | err = kstrtoint(buf, 10, &odr); | ||
483 | if (err < 0) | ||
484 | goto conversion_error; | ||
485 | |||
486 | mutex_lock(&indio_dev->mlock); | ||
487 | err = st_sensors_set_odr(indio_dev, odr); | ||
488 | mutex_unlock(&indio_dev->mlock); | ||
489 | |||
490 | conversion_error: | ||
491 | return err < 0 ? err : size; | ||
492 | } | ||
493 | EXPORT_SYMBOL(st_sensors_sysfs_set_sampling_frequency); | ||
494 | |||
495 | ssize_t st_sensors_sysfs_sampling_frequency_avail(struct device *dev, | 466 | ssize_t st_sensors_sysfs_sampling_frequency_avail(struct device *dev, |
496 | struct device_attribute *attr, char *buf) | 467 | struct device_attribute *attr, char *buf) |
497 | { | 468 | { |
diff --git a/drivers/iio/gyro/st_gyro_core.c b/drivers/iio/gyro/st_gyro_core.c index ed74a9069989..f156fc6c5c6c 100644 --- a/drivers/iio/gyro/st_gyro_core.c +++ b/drivers/iio/gyro/st_gyro_core.c | |||
@@ -245,6 +245,9 @@ static int st_gyro_read_raw(struct iio_dev *indio_dev, | |||
245 | *val = 0; | 245 | *val = 0; |
246 | *val2 = gdata->current_fullscale->gain; | 246 | *val2 = gdata->current_fullscale->gain; |
247 | return IIO_VAL_INT_PLUS_MICRO; | 247 | return IIO_VAL_INT_PLUS_MICRO; |
248 | case IIO_CHAN_INFO_SAMP_FREQ: | ||
249 | *val = gdata->odr; | ||
250 | return IIO_VAL_INT; | ||
248 | default: | 251 | default: |
249 | return -EINVAL; | 252 | return -EINVAL; |
250 | } | 253 | } |
@@ -262,6 +265,13 @@ static int st_gyro_write_raw(struct iio_dev *indio_dev, | |||
262 | case IIO_CHAN_INFO_SCALE: | 265 | case IIO_CHAN_INFO_SCALE: |
263 | err = st_sensors_set_fullscale_by_gain(indio_dev, val2); | 266 | err = st_sensors_set_fullscale_by_gain(indio_dev, val2); |
264 | break; | 267 | break; |
268 | case IIO_CHAN_INFO_SAMP_FREQ: | ||
269 | if (val2) | ||
270 | return -EINVAL; | ||
271 | mutex_lock(&indio_dev->mlock); | ||
272 | err = st_sensors_set_odr(indio_dev, val); | ||
273 | mutex_unlock(&indio_dev->mlock); | ||
274 | return err; | ||
265 | default: | 275 | default: |
266 | err = -EINVAL; | 276 | err = -EINVAL; |
267 | } | 277 | } |
@@ -269,14 +279,12 @@ static int st_gyro_write_raw(struct iio_dev *indio_dev, | |||
269 | return err; | 279 | return err; |
270 | } | 280 | } |
271 | 281 | ||
272 | static ST_SENSOR_DEV_ATTR_SAMP_FREQ(); | ||
273 | static ST_SENSORS_DEV_ATTR_SAMP_FREQ_AVAIL(); | 282 | static ST_SENSORS_DEV_ATTR_SAMP_FREQ_AVAIL(); |
274 | static ST_SENSORS_DEV_ATTR_SCALE_AVAIL(in_anglvel_scale_available); | 283 | static ST_SENSORS_DEV_ATTR_SCALE_AVAIL(in_anglvel_scale_available); |
275 | 284 | ||
276 | static struct attribute *st_gyro_attributes[] = { | 285 | static struct attribute *st_gyro_attributes[] = { |
277 | &iio_dev_attr_sampling_frequency_available.dev_attr.attr, | 286 | &iio_dev_attr_sampling_frequency_available.dev_attr.attr, |
278 | &iio_dev_attr_in_anglvel_scale_available.dev_attr.attr, | 287 | &iio_dev_attr_in_anglvel_scale_available.dev_attr.attr, |
279 | &iio_dev_attr_sampling_frequency.dev_attr.attr, | ||
280 | NULL, | 288 | NULL, |
281 | }; | 289 | }; |
282 | 290 | ||
diff --git a/drivers/iio/magnetometer/st_magn_core.c b/drivers/iio/magnetometer/st_magn_core.c index 240a21dd0c61..a4b64130ac2f 100644 --- a/drivers/iio/magnetometer/st_magn_core.c +++ b/drivers/iio/magnetometer/st_magn_core.c | |||
@@ -299,6 +299,9 @@ static int st_magn_read_raw(struct iio_dev *indio_dev, | |||
299 | else | 299 | else |
300 | *val2 = mdata->current_fullscale->gain; | 300 | *val2 = mdata->current_fullscale->gain; |
301 | return IIO_VAL_INT_PLUS_MICRO; | 301 | return IIO_VAL_INT_PLUS_MICRO; |
302 | case IIO_CHAN_INFO_SAMP_FREQ: | ||
303 | *val = mdata->odr; | ||
304 | return IIO_VAL_INT; | ||
302 | default: | 305 | default: |
303 | return -EINVAL; | 306 | return -EINVAL; |
304 | } | 307 | } |
@@ -316,6 +319,13 @@ static int st_magn_write_raw(struct iio_dev *indio_dev, | |||
316 | case IIO_CHAN_INFO_SCALE: | 319 | case IIO_CHAN_INFO_SCALE: |
317 | err = st_sensors_set_fullscale_by_gain(indio_dev, val2); | 320 | err = st_sensors_set_fullscale_by_gain(indio_dev, val2); |
318 | break; | 321 | break; |
322 | case IIO_CHAN_INFO_SAMP_FREQ: | ||
323 | if (val2) | ||
324 | return -EINVAL; | ||
325 | mutex_lock(&indio_dev->mlock); | ||
326 | err = st_sensors_set_odr(indio_dev, val); | ||
327 | mutex_unlock(&indio_dev->mlock); | ||
328 | return err; | ||
319 | default: | 329 | default: |
320 | err = -EINVAL; | 330 | err = -EINVAL; |
321 | } | 331 | } |
@@ -323,14 +333,12 @@ static int st_magn_write_raw(struct iio_dev *indio_dev, | |||
323 | return err; | 333 | return err; |
324 | } | 334 | } |
325 | 335 | ||
326 | static ST_SENSOR_DEV_ATTR_SAMP_FREQ(); | ||
327 | static ST_SENSORS_DEV_ATTR_SAMP_FREQ_AVAIL(); | 336 | static ST_SENSORS_DEV_ATTR_SAMP_FREQ_AVAIL(); |
328 | static ST_SENSORS_DEV_ATTR_SCALE_AVAIL(in_magn_scale_available); | 337 | static ST_SENSORS_DEV_ATTR_SCALE_AVAIL(in_magn_scale_available); |
329 | 338 | ||
330 | static struct attribute *st_magn_attributes[] = { | 339 | static struct attribute *st_magn_attributes[] = { |
331 | &iio_dev_attr_sampling_frequency_available.dev_attr.attr, | 340 | &iio_dev_attr_sampling_frequency_available.dev_attr.attr, |
332 | &iio_dev_attr_in_magn_scale_available.dev_attr.attr, | 341 | &iio_dev_attr_in_magn_scale_available.dev_attr.attr, |
333 | &iio_dev_attr_sampling_frequency.dev_attr.attr, | ||
334 | NULL, | 342 | NULL, |
335 | }; | 343 | }; |
336 | 344 | ||
diff --git a/drivers/iio/pressure/st_pressure_core.c b/drivers/iio/pressure/st_pressure_core.c index cd7e01f3a93b..473d914ef470 100644 --- a/drivers/iio/pressure/st_pressure_core.c +++ b/drivers/iio/pressure/st_pressure_core.c | |||
@@ -307,6 +307,27 @@ static const struct st_sensors st_press_sensors[] = { | |||
307 | }, | 307 | }, |
308 | }; | 308 | }; |
309 | 309 | ||
310 | static int st_press_write_raw(struct iio_dev *indio_dev, | ||
311 | struct iio_chan_spec const *ch, | ||
312 | int val, | ||
313 | int val2, | ||
314 | long mask) | ||
315 | { | ||
316 | int err; | ||
317 | |||
318 | switch (mask) { | ||
319 | case IIO_CHAN_INFO_SAMP_FREQ: | ||
320 | if (val2) | ||
321 | return -EINVAL; | ||
322 | mutex_lock(&indio_dev->mlock); | ||
323 | err = st_sensors_set_odr(indio_dev, val); | ||
324 | mutex_unlock(&indio_dev->mlock); | ||
325 | return err; | ||
326 | default: | ||
327 | return -EINVAL; | ||
328 | } | ||
329 | } | ||
330 | |||
310 | static int st_press_read_raw(struct iio_dev *indio_dev, | 331 | static int st_press_read_raw(struct iio_dev *indio_dev, |
311 | struct iio_chan_spec const *ch, int *val, | 332 | struct iio_chan_spec const *ch, int *val, |
312 | int *val2, long mask) | 333 | int *val2, long mask) |
@@ -349,6 +370,9 @@ static int st_press_read_raw(struct iio_dev *indio_dev, | |||
349 | } | 370 | } |
350 | 371 | ||
351 | return IIO_VAL_FRACTIONAL; | 372 | return IIO_VAL_FRACTIONAL; |
373 | case IIO_CHAN_INFO_SAMP_FREQ: | ||
374 | *val = pdata->odr; | ||
375 | return IIO_VAL_INT; | ||
352 | default: | 376 | default: |
353 | return -EINVAL; | 377 | return -EINVAL; |
354 | } | 378 | } |
@@ -357,12 +381,10 @@ read_error: | |||
357 | return err; | 381 | return err; |
358 | } | 382 | } |
359 | 383 | ||
360 | static ST_SENSOR_DEV_ATTR_SAMP_FREQ(); | ||
361 | static ST_SENSORS_DEV_ATTR_SAMP_FREQ_AVAIL(); | 384 | static ST_SENSORS_DEV_ATTR_SAMP_FREQ_AVAIL(); |
362 | 385 | ||
363 | static struct attribute *st_press_attributes[] = { | 386 | static struct attribute *st_press_attributes[] = { |
364 | &iio_dev_attr_sampling_frequency_available.dev_attr.attr, | 387 | &iio_dev_attr_sampling_frequency_available.dev_attr.attr, |
365 | &iio_dev_attr_sampling_frequency.dev_attr.attr, | ||
366 | NULL, | 388 | NULL, |
367 | }; | 389 | }; |
368 | 390 | ||
@@ -374,6 +396,7 @@ static const struct iio_info press_info = { | |||
374 | .driver_module = THIS_MODULE, | 396 | .driver_module = THIS_MODULE, |
375 | .attrs = &st_press_attribute_group, | 397 | .attrs = &st_press_attribute_group, |
376 | .read_raw = &st_press_read_raw, | 398 | .read_raw = &st_press_read_raw, |
399 | .write_raw = &st_press_write_raw, | ||
377 | }; | 400 | }; |
378 | 401 | ||
379 | #ifdef CONFIG_IIO_TRIGGER | 402 | #ifdef CONFIG_IIO_TRIGGER |