summaryrefslogtreecommitdiffstats
path: root/drivers/iio
diff options
context:
space:
mode:
authorJonathan Cameron <jic23@kernel.org>2014-06-22 15:59:00 -0400
committerJonathan Cameron <jic23@kernel.org>2014-07-07 04:39:57 -0400
commit2d239c9e92087d5f4f667371ae350db9f76e3191 (patch)
tree114c0ce21c9f9258ee82ac849d15b715265f07b0 /drivers/iio
parenta244e7b57f0fb778bd333b10fffbeb362b94ffc3 (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.c12
-rw-r--r--drivers/iio/common/st_sensors/st_sensors_core.c29
-rw-r--r--drivers/iio/gyro/st_gyro_core.c12
-rw-r--r--drivers/iio/magnetometer/st_magn_core.c12
-rw-r--r--drivers/iio/pressure/st_pressure_core.c27
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
420static ST_SENSOR_DEV_ATTR_SAMP_FREQ();
421static ST_SENSORS_DEV_ATTR_SAMP_FREQ_AVAIL(); 430static ST_SENSORS_DEV_ATTR_SAMP_FREQ_AVAIL();
422static ST_SENSORS_DEV_ATTR_SCALE_AVAIL(in_accel_scale_available); 431static ST_SENSORS_DEV_ATTR_SCALE_AVAIL(in_accel_scale_available);
423 432
424static struct attribute *st_accel_attributes[] = { 433static 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}
464EXPORT_SYMBOL(st_sensors_check_device_support); 464EXPORT_SYMBOL(st_sensors_check_device_support);
465 465
466ssize_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}
473EXPORT_SYMBOL(st_sensors_sysfs_get_sampling_frequency);
474
475ssize_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
490conversion_error:
491 return err < 0 ? err : size;
492}
493EXPORT_SYMBOL(st_sensors_sysfs_set_sampling_frequency);
494
495ssize_t st_sensors_sysfs_sampling_frequency_avail(struct device *dev, 466ssize_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
272static ST_SENSOR_DEV_ATTR_SAMP_FREQ();
273static ST_SENSORS_DEV_ATTR_SAMP_FREQ_AVAIL(); 282static ST_SENSORS_DEV_ATTR_SAMP_FREQ_AVAIL();
274static ST_SENSORS_DEV_ATTR_SCALE_AVAIL(in_anglvel_scale_available); 283static ST_SENSORS_DEV_ATTR_SCALE_AVAIL(in_anglvel_scale_available);
275 284
276static struct attribute *st_gyro_attributes[] = { 285static 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
326static ST_SENSOR_DEV_ATTR_SAMP_FREQ();
327static ST_SENSORS_DEV_ATTR_SAMP_FREQ_AVAIL(); 336static ST_SENSORS_DEV_ATTR_SAMP_FREQ_AVAIL();
328static ST_SENSORS_DEV_ATTR_SCALE_AVAIL(in_magn_scale_available); 337static ST_SENSORS_DEV_ATTR_SCALE_AVAIL(in_magn_scale_available);
329 338
330static struct attribute *st_magn_attributes[] = { 339static 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
310static 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
310static int st_press_read_raw(struct iio_dev *indio_dev, 331static 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
360static ST_SENSOR_DEV_ATTR_SAMP_FREQ();
361static ST_SENSORS_DEV_ATTR_SAMP_FREQ_AVAIL(); 384static ST_SENSORS_DEV_ATTR_SAMP_FREQ_AVAIL();
362 385
363static struct attribute *st_press_attributes[] = { 386static 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