All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] iio: ad7793: implement IIO_CHAN_INFO_SAMP_FREQ
@ 2018-03-09 15:13 Michael Nosthoff
  2018-03-12  9:10 ` Michael Nosthoff
  0 siblings, 1 reply; 8+ messages in thread
From: Michael Nosthoff @ 2018-03-09 15:13 UTC (permalink / raw)
  To: linux-iio; +Cc: alexandru.Ardelean, Jonathan Cameron, Michael Nosthoff

This commit is a follow-up to changes made to ad_sigma_delta.h
in staging: iio: ad7192: implement IIO_CHAN_INFO_SAMP_FREQ
which broke ad7793 as it was not altered to match those changes.

This driver predates the availability of IIO_CHAN_INFO_SAMP_FREQ
attribute wherein usage has some advantages like it can be accessed by
in-kernel consumers as well as reduces the code size.

Therefore, use IIO_CHAN_INFO_SAMP_FREQ to implement the
sampling_frequency attribute instead of using IIO_DEV_ATTR_SAMP_FREQ()
macro.

Move code from the functions associated with IIO_DEV_ATTR_SAMP_FREQ()
into respective read and write hooks with the mask set to
IIO_CHAN_INFO_SAMP_FREQ.

Fixes: a13e831fcaa7 ("staging: iio: ad7192: implement IIO_CHAN_INFO_SAMP_FREQ")

Signed-off-by: Michael Nosthoff <committed@heine.so>
---
Changes in v5:

  - fixed checkpatchi.pl warnings for line-length

 drivers/iio/adc/ad7793.c | 75 ++++++++++++++++--------------------------------
 1 file changed, 24 insertions(+), 51 deletions(-)

diff --git a/drivers/iio/adc/ad7793.c b/drivers/iio/adc/ad7793.c
index 801afb6..d4bbe5b 100644
--- a/drivers/iio/adc/ad7793.c
+++ b/drivers/iio/adc/ad7793.c
@@ -348,55 +348,6 @@ static const u16 ad7793_sample_freq_avail[16] = {0, 470, 242, 123, 62, 50, 39,
 static const u16 ad7797_sample_freq_avail[16] = {0, 0, 0, 123, 62, 50, 0,
 					33, 0, 17, 16, 12, 10, 8, 6, 4};
 
-static ssize_t ad7793_read_frequency(struct device *dev,
-		struct device_attribute *attr,
-		char *buf)
-{
-	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
-	struct ad7793_state *st = iio_priv(indio_dev);
-
-	return sprintf(buf, "%d\n",
-	       st->chip_info->sample_freq_avail[AD7793_MODE_RATE(st->mode)]);
-}
-
-static ssize_t ad7793_write_frequency(struct device *dev,
-		struct device_attribute *attr,
-		const char *buf,
-		size_t len)
-{
-	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
-	struct ad7793_state *st = iio_priv(indio_dev);
-	long lval;
-	int i, ret;
-
-	ret = kstrtol(buf, 10, &lval);
-	if (ret)
-		return ret;
-
-	if (lval == 0)
-		return -EINVAL;
-
-	for (i = 0; i < 16; i++)
-		if (lval == st->chip_info->sample_freq_avail[i])
-			break;
-	if (i == 16)
-		return -EINVAL;
-
-	ret = iio_device_claim_direct_mode(indio_dev);
-	if (ret)
-		return ret;
-	st->mode &= ~AD7793_MODE_RATE(-1);
-	st->mode |= AD7793_MODE_RATE(i);
-	ad_sd_write_reg(&st->sd, AD7793_REG_MODE, sizeof(st->mode), st->mode);
-	iio_device_release_direct_mode(indio_dev);
-
-	return len;
-}
-
-static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO,
-		ad7793_read_frequency,
-		ad7793_write_frequency);
-
 static IIO_CONST_ATTR_SAMP_FREQ_AVAIL(
 	"470 242 123 62 50 39 33 19 17 16 12 10 8 6 4");
 
@@ -424,7 +375,6 @@ static IIO_DEVICE_ATTR_NAMED(in_m_in_scale_available,
 		ad7793_show_scale_available, NULL, 0);
 
 static struct attribute *ad7793_attributes[] = {
-	&iio_dev_attr_sampling_frequency.dev_attr.attr,
 	&iio_const_attr_sampling_frequency_available.dev_attr.attr,
 	&iio_dev_attr_in_m_in_scale_available.dev_attr.attr,
 	NULL
@@ -435,7 +385,6 @@ static const struct attribute_group ad7793_attribute_group = {
 };
 
 static struct attribute *ad7797_attributes[] = {
-	&iio_dev_attr_sampling_frequency.dev_attr.attr,
 	&iio_const_attr_sampling_frequency_available_ad7797.dev_attr.attr,
 	NULL
 };
@@ -505,6 +454,10 @@ static int ad7793_read_raw(struct iio_dev *indio_dev,
 			*val -= offset;
 		}
 		return IIO_VAL_INT;
+	case IIO_CHAN_INFO_SAMP_FREQ:
+		*val = st->chip_info
+			       ->sample_freq_avail[AD7793_MODE_RATE(st->mode)];
+		return IIO_VAL_INT;
 	}
 	return -EINVAL;
 }
@@ -542,6 +495,26 @@ static int ad7793_write_raw(struct iio_dev *indio_dev,
 				break;
 			}
 		break;
+	case IIO_CHAN_INFO_SAMP_FREQ:
+		if (!val) {
+			ret = -EINVAL;
+			break;
+		}
+
+		for (i = 0; i < 16; i++)
+			if (val == st->chip_info->sample_freq_avail[i])
+				break;
+
+		if (i == 16) {
+			ret = -EINVAL;
+			break;
+		}
+
+		st->mode &= ~AD7793_MODE_RATE(-1);
+		st->mode |= AD7793_MODE_RATE(i);
+		ad_sd_write_reg(&st->sd, AD7793_REG_MODE, sizeof(st->mode),
+				st->mode);
+		break;
 	default:
 		ret = -EINVAL;
 	}
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] iio: ad7793: implement IIO_CHAN_INFO_SAMP_FREQ
  2018-03-09 15:13 [PATCH] iio: ad7793: implement IIO_CHAN_INFO_SAMP_FREQ Michael Nosthoff
@ 2018-03-12  9:10 ` Michael Nosthoff
  2018-03-12  9:18   ` Ardelean, Alexandru
  0 siblings, 1 reply; 8+ messages in thread
From: Michael Nosthoff @ 2018-03-12  9:10 UTC (permalink / raw)
  To: linux-iio; +Cc: alexandru.Ardelean, Jonathan Cameron

On 2018-03-09 16:13, Michael Nosthoff wrote:

I noticed I forgot the "v5" in the subject tag. Should I resubmit?

> This commit is a follow-up to changes made to ad_sigma_delta.h
> in staging: iio: ad7192: implement IIO_CHAN_INFO_SAMP_FREQ
> which broke ad7793 as it was not altered to match those changes.
> 
> This driver predates the availability of IIO_CHAN_INFO_SAMP_FREQ
> attribute wherein usage has some advantages like it can be accessed by
> in-kernel consumers as well as reduces the code size.
> 
> Therefore, use IIO_CHAN_INFO_SAMP_FREQ to implement the
> sampling_frequency attribute instead of using IIO_DEV_ATTR_SAMP_FREQ()
> macro.
> 
> Move code from the functions associated with IIO_DEV_ATTR_SAMP_FREQ()
> into respective read and write hooks with the mask set to
> IIO_CHAN_INFO_SAMP_FREQ.
> 
> Fixes: a13e831fcaa7 ("staging: iio: ad7192: implement 
> IIO_CHAN_INFO_SAMP_FREQ")
> 
> Signed-off-by: Michael Nosthoff <committed@heine.so>
> ---
> Changes in v5:
> 
>   - fixed checkpatchi.pl warnings for line-length
> 
>  drivers/iio/adc/ad7793.c | 75 
> ++++++++++++++++--------------------------------
>  1 file changed, 24 insertions(+), 51 deletions(-)
> 
> diff --git a/drivers/iio/adc/ad7793.c b/drivers/iio/adc/ad7793.c
> index 801afb6..d4bbe5b 100644
> --- a/drivers/iio/adc/ad7793.c
> +++ b/drivers/iio/adc/ad7793.c
> @@ -348,55 +348,6 @@ static const u16 ad7793_sample_freq_avail[16] =
> {0, 470, 242, 123, 62, 50, 39,
>  static const u16 ad7797_sample_freq_avail[16] = {0, 0, 0, 123, 62, 50, 
> 0,
>  					33, 0, 17, 16, 12, 10, 8, 6, 4};
> 
> -static ssize_t ad7793_read_frequency(struct device *dev,
> -		struct device_attribute *attr,
> -		char *buf)
> -{
> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> -	struct ad7793_state *st = iio_priv(indio_dev);
> -
> -	return sprintf(buf, "%d\n",
> -	       st->chip_info->sample_freq_avail[AD7793_MODE_RATE(st->mode)]);
> -}
> -
> -static ssize_t ad7793_write_frequency(struct device *dev,
> -		struct device_attribute *attr,
> -		const char *buf,
> -		size_t len)
> -{
> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> -	struct ad7793_state *st = iio_priv(indio_dev);
> -	long lval;
> -	int i, ret;
> -
> -	ret = kstrtol(buf, 10, &lval);
> -	if (ret)
> -		return ret;
> -
> -	if (lval == 0)
> -		return -EINVAL;
> -
> -	for (i = 0; i < 16; i++)
> -		if (lval == st->chip_info->sample_freq_avail[i])
> -			break;
> -	if (i == 16)
> -		return -EINVAL;
> -
> -	ret = iio_device_claim_direct_mode(indio_dev);
> -	if (ret)
> -		return ret;
> -	st->mode &= ~AD7793_MODE_RATE(-1);
> -	st->mode |= AD7793_MODE_RATE(i);
> -	ad_sd_write_reg(&st->sd, AD7793_REG_MODE, sizeof(st->mode), 
> st->mode);
> -	iio_device_release_direct_mode(indio_dev);
> -
> -	return len;
> -}
> -
> -static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO,
> -		ad7793_read_frequency,
> -		ad7793_write_frequency);
> -
>  static IIO_CONST_ATTR_SAMP_FREQ_AVAIL(
>  	"470 242 123 62 50 39 33 19 17 16 12 10 8 6 4");
> 
> @@ -424,7 +375,6 @@ static 
> IIO_DEVICE_ATTR_NAMED(in_m_in_scale_available,
>  		ad7793_show_scale_available, NULL, 0);
> 
>  static struct attribute *ad7793_attributes[] = {
> -	&iio_dev_attr_sampling_frequency.dev_attr.attr,
>  	&iio_const_attr_sampling_frequency_available.dev_attr.attr,
>  	&iio_dev_attr_in_m_in_scale_available.dev_attr.attr,
>  	NULL
> @@ -435,7 +385,6 @@ static const struct attribute_group
> ad7793_attribute_group = {
>  };
> 
>  static struct attribute *ad7797_attributes[] = {
> -	&iio_dev_attr_sampling_frequency.dev_attr.attr,
>  	&iio_const_attr_sampling_frequency_available_ad7797.dev_attr.attr,
>  	NULL
>  };
> @@ -505,6 +454,10 @@ static int ad7793_read_raw(struct iio_dev 
> *indio_dev,
>  			*val -= offset;
>  		}
>  		return IIO_VAL_INT;
> +	case IIO_CHAN_INFO_SAMP_FREQ:
> +		*val = st->chip_info
> +			       ->sample_freq_avail[AD7793_MODE_RATE(st->mode)];
> +		return IIO_VAL_INT;
>  	}
>  	return -EINVAL;
>  }
> @@ -542,6 +495,26 @@ static int ad7793_write_raw(struct iio_dev 
> *indio_dev,
>  				break;
>  			}
>  		break;
> +	case IIO_CHAN_INFO_SAMP_FREQ:
> +		if (!val) {
> +			ret = -EINVAL;
> +			break;
> +		}
> +
> +		for (i = 0; i < 16; i++)
> +			if (val == st->chip_info->sample_freq_avail[i])
> +				break;
> +
> +		if (i == 16) {
> +			ret = -EINVAL;
> +			break;
> +		}
> +
> +		st->mode &= ~AD7793_MODE_RATE(-1);
> +		st->mode |= AD7793_MODE_RATE(i);
> +		ad_sd_write_reg(&st->sd, AD7793_REG_MODE, sizeof(st->mode),
> +				st->mode);
> +		break;
>  	default:
>  		ret = -EINVAL;
>  	}

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] iio: ad7793: implement IIO_CHAN_INFO_SAMP_FREQ
  2018-03-12  9:10 ` Michael Nosthoff
@ 2018-03-12  9:18   ` Ardelean, Alexandru
  2018-03-17 20:36     ` Jonathan Cameron
  0 siblings, 1 reply; 8+ messages in thread
From: Ardelean, Alexandru @ 2018-03-12  9:18 UTC (permalink / raw)
  To: linux-iio, committed; +Cc: jic23

T24gTW9uLCAyMDE4LTAzLTEyIGF0IDEwOjEwICswMTAwLCBNaWNoYWVsIE5vc3Rob2ZmIHdyb3Rl
Og0KPiBPbiAyMDE4LTAzLTA5IDE2OjEzLCBNaWNoYWVsIE5vc3Rob2ZmIHdyb3RlOg0KPiANCj4g
SSBub3RpY2VkIEkgZm9yZ290IHRoZSAidjUiIGluIHRoZSBzdWJqZWN0IHRhZy4gU2hvdWxkIEkg
cmVzdWJtaXQ/DQoNCkZyb20gbXkgc2lkZSwgSSB0aGluayBpdCdzIGZpbmUgdG8gc2tpcCBpdC4N
CkxldCdzIHNlZSBpZiBKb25hdGhhbiBoYXMgYW5vdGhlciBwcmVmZXJlbmNlLg0KDQo+IA0KPiA+
IFRoaXMgY29tbWl0IGlzIGEgZm9sbG93LXVwIHRvIGNoYW5nZXMgbWFkZSB0byBhZF9zaWdtYV9k
ZWx0YS5oDQo+ID4gaW4gc3RhZ2luZzogaWlvOiBhZDcxOTI6IGltcGxlbWVudCBJSU9fQ0hBTl9J
TkZPX1NBTVBfRlJFUQ0KPiA+IHdoaWNoIGJyb2tlIGFkNzc5MyBhcyBpdCB3YXMgbm90IGFsdGVy
ZWQgdG8gbWF0Y2ggdGhvc2UgY2hhbmdlcy4NCj4gPiANCj4gPiBUaGlzIGRyaXZlciBwcmVkYXRl
cyB0aGUgYXZhaWxhYmlsaXR5IG9mIElJT19DSEFOX0lORk9fU0FNUF9GUkVRDQo+ID4gYXR0cmli
dXRlIHdoZXJlaW4gdXNhZ2UgaGFzIHNvbWUgYWR2YW50YWdlcyBsaWtlIGl0IGNhbiBiZSBhY2Nl
c3NlZCBieQ0KPiA+IGluLWtlcm5lbCBjb25zdW1lcnMgYXMgd2VsbCBhcyByZWR1Y2VzIHRoZSBj
b2RlIHNpemUuDQo+ID4gDQo+ID4gVGhlcmVmb3JlLCB1c2UgSUlPX0NIQU5fSU5GT19TQU1QX0ZS
RVEgdG8gaW1wbGVtZW50IHRoZQ0KPiA+IHNhbXBsaW5nX2ZyZXF1ZW5jeSBhdHRyaWJ1dGUgaW5z
dGVhZCBvZiB1c2luZyBJSU9fREVWX0FUVFJfU0FNUF9GUkVRKCkNCj4gPiBtYWNyby4NCj4gPiAN
Cj4gPiBNb3ZlIGNvZGUgZnJvbSB0aGUgZnVuY3Rpb25zIGFzc29jaWF0ZWQgd2l0aCBJSU9fREVW
X0FUVFJfU0FNUF9GUkVRKCkNCj4gPiBpbnRvIHJlc3BlY3RpdmUgcmVhZCBhbmQgd3JpdGUgaG9v
a3Mgd2l0aCB0aGUgbWFzayBzZXQgdG8NCj4gPiBJSU9fQ0hBTl9JTkZPX1NBTVBfRlJFUS4NCj4g
PiANCj4gPiBGaXhlczogYTEzZTgzMWZjYWE3ICgic3RhZ2luZzogaWlvOiBhZDcxOTI6IGltcGxl
bWVudCANCj4gPiBJSU9fQ0hBTl9JTkZPX1NBTVBfRlJFUSIpDQo+ID4gDQo+ID4gU2lnbmVkLW9m
Zi1ieTogTWljaGFlbCBOb3N0aG9mZiA8Y29tbWl0dGVkQGhlaW5lLnNvPg0KPiA+IC0tLQ0KPiA+
IENoYW5nZXMgaW4gdjU6DQo+ID4gDQo+ID4gICAtIGZpeGVkIGNoZWNrcGF0Y2hpLnBsIHdhcm5p
bmdzIGZvciBsaW5lLWxlbmd0aA0KPiA+IA0KPiA+ICBkcml2ZXJzL2lpby9hZGMvYWQ3NzkzLmMg
fCA3NSANCj4gPiArKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0NCj4gPiAgMSBmaWxlIGNoYW5nZWQsIDI0IGluc2VydGlvbnMoKyksIDUxIGRlbGV0aW9ucygt
KQ0KPiA+IA0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9hZGMvYWQ3NzkzLmMgYi9kcml2
ZXJzL2lpby9hZGMvYWQ3NzkzLmMNCj4gPiBpbmRleCA4MDFhZmI2Li5kNGJiZTViIDEwMDY0NA0K
PiA+IC0tLSBhL2RyaXZlcnMvaWlvL2FkYy9hZDc3OTMuYw0KPiA+ICsrKyBiL2RyaXZlcnMvaWlv
L2FkYy9hZDc3OTMuYw0KPiA+IEBAIC0zNDgsNTUgKzM0OCw2IEBAIHN0YXRpYyBjb25zdCB1MTYg
YWQ3NzkzX3NhbXBsZV9mcmVxX2F2YWlsWzE2XSA9DQo+ID4gezAsIDQ3MCwgMjQyLCAxMjMsIDYy
LCA1MCwgMzksDQo+ID4gIHN0YXRpYyBjb25zdCB1MTYgYWQ3Nzk3X3NhbXBsZV9mcmVxX2F2YWls
WzE2XSA9IHswLCAwLCAwLCAxMjMsIDYyLCA1MCwgDQo+ID4gMCwNCj4gPiAgCQkJCQkzMywgMCwg
MTcsIDE2LCAxMiwgMTAsIDgsIDYsIDR9Ow0KPiA+IA0KPiA+IC1zdGF0aWMgc3NpemVfdCBhZDc3
OTNfcmVhZF9mcmVxdWVuY3koc3RydWN0IGRldmljZSAqZGV2LA0KPiA+IC0JCXN0cnVjdCBkZXZp
Y2VfYXR0cmlidXRlICphdHRyLA0KPiA+IC0JCWNoYXIgKmJ1ZikNCj4gPiAtew0KPiA+IC0Jc3Ry
dWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl90b19paW9fZGV2KGRldik7DQo+ID4gLQlzdHJ1
Y3QgYWQ3NzkzX3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7DQo+ID4gLQ0KPiA+IC0J
cmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsDQo+ID4gLQkgICAgICAgc3QtPmNoaXBfaW5mby0+
c2FtcGxlX2ZyZXFfYXZhaWxbQUQ3NzkzX01PREVfUkFURShzdC0+bW9kZSldKTsNCj4gPiAtfQ0K
PiA+IC0NCj4gPiAtc3RhdGljIHNzaXplX3QgYWQ3NzkzX3dyaXRlX2ZyZXF1ZW5jeShzdHJ1Y3Qg
ZGV2aWNlICpkZXYsDQo+ID4gLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsDQo+ID4g
LQkJY29uc3QgY2hhciAqYnVmLA0KPiA+IC0JCXNpemVfdCBsZW4pDQo+ID4gLXsNCj4gPiAtCXN0
cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfdG9faWlvX2RldihkZXYpOw0KPiA+IC0Jc3Ry
dWN0IGFkNzc5M19zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOw0KPiA+IC0JbG9uZyBs
dmFsOw0KPiA+IC0JaW50IGksIHJldDsNCj4gPiAtDQo+ID4gLQlyZXQgPSBrc3RydG9sKGJ1Ziwg
MTAsICZsdmFsKTsNCj4gPiAtCWlmIChyZXQpDQo+ID4gLQkJcmV0dXJuIHJldDsNCj4gPiAtDQo+
ID4gLQlpZiAobHZhbCA9PSAwKQ0KPiA+IC0JCXJldHVybiAtRUlOVkFMOw0KPiA+IC0NCj4gPiAt
CWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQ0KPiA+IC0JCWlmIChsdmFsID09IHN0LT5jaGlwX2lu
Zm8tPnNhbXBsZV9mcmVxX2F2YWlsW2ldKQ0KPiA+IC0JCQlicmVhazsNCj4gPiAtCWlmIChpID09
IDE2KQ0KPiA+IC0JCXJldHVybiAtRUlOVkFMOw0KPiA+IC0NCj4gPiAtCXJldCA9IGlpb19kZXZp
Y2VfY2xhaW1fZGlyZWN0X21vZGUoaW5kaW9fZGV2KTsNCj4gPiAtCWlmIChyZXQpDQo+ID4gLQkJ
cmV0dXJuIHJldDsNCj4gPiAtCXN0LT5tb2RlICY9IH5BRDc3OTNfTU9ERV9SQVRFKC0xKTsNCj4g
PiAtCXN0LT5tb2RlIHw9IEFENzc5M19NT0RFX1JBVEUoaSk7DQo+ID4gLQlhZF9zZF93cml0ZV9y
ZWcoJnN0LT5zZCwgQUQ3NzkzX1JFR19NT0RFLCBzaXplb2Yoc3QtPm1vZGUpLCANCj4gPiBzdC0+
bW9kZSk7DQo+ID4gLQlpaW9fZGV2aWNlX3JlbGVhc2VfZGlyZWN0X21vZGUoaW5kaW9fZGV2KTsN
Cj4gPiAtDQo+ID4gLQlyZXR1cm4gbGVuOw0KPiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgSUlP
X0RFVl9BVFRSX1NBTVBfRlJFUShTX0lXVVNSIHwgU19JUlVHTywNCj4gPiAtCQlhZDc3OTNfcmVh
ZF9mcmVxdWVuY3ksDQo+ID4gLQkJYWQ3NzkzX3dyaXRlX2ZyZXF1ZW5jeSk7DQo+ID4gLQ0KPiA+
ICBzdGF0aWMgSUlPX0NPTlNUX0FUVFJfU0FNUF9GUkVRX0FWQUlMKA0KPiA+ICAJIjQ3MCAyNDIg
MTIzIDYyIDUwIDM5IDMzIDE5IDE3IDE2IDEyIDEwIDggNiA0Iik7DQo+ID4gDQo+ID4gQEAgLTQy
NCw3ICszNzUsNiBAQCBzdGF0aWMgDQo+ID4gSUlPX0RFVklDRV9BVFRSX05BTUVEKGluX21faW5f
c2NhbGVfYXZhaWxhYmxlLA0KPiA+ICAJCWFkNzc5M19zaG93X3NjYWxlX2F2YWlsYWJsZSwgTlVM
TCwgMCk7DQo+ID4gDQo+ID4gIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZDc3OTNfYXR0cmli
dXRlc1tdID0gew0KPiA+IC0JJmlpb19kZXZfYXR0cl9zYW1wbGluZ19mcmVxdWVuY3kuZGV2X2F0
dHIuYXR0ciwNCj4gPiAgCSZpaW9fY29uc3RfYXR0cl9zYW1wbGluZ19mcmVxdWVuY3lfYXZhaWxh
YmxlLmRldl9hdHRyLmF0dHIsDQo+ID4gIAkmaWlvX2Rldl9hdHRyX2luX21faW5fc2NhbGVfYXZh
aWxhYmxlLmRldl9hdHRyLmF0dHIsDQo+ID4gIAlOVUxMDQo+ID4gQEAgLTQzNSw3ICszODUsNiBA
QCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cA0KPiA+IGFkNzc5M19hdHRyaWJ1
dGVfZ3JvdXAgPSB7DQo+ID4gIH07DQo+ID4gDQo+ID4gIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRl
ICphZDc3OTdfYXR0cmlidXRlc1tdID0gew0KPiA+IC0JJmlpb19kZXZfYXR0cl9zYW1wbGluZ19m
cmVxdWVuY3kuZGV2X2F0dHIuYXR0ciwNCj4gPiAgCSZpaW9fY29uc3RfYXR0cl9zYW1wbGluZ19m
cmVxdWVuY3lfYXZhaWxhYmxlX2FkNzc5Ny5kZXZfYXR0ci5hdHRyLA0KPiA+ICAJTlVMTA0KPiA+
ICB9Ow0KPiA+IEBAIC01MDUsNiArNDU0LDEwIEBAIHN0YXRpYyBpbnQgYWQ3NzkzX3JlYWRfcmF3
KHN0cnVjdCBpaW9fZGV2IA0KPiA+ICppbmRpb19kZXYsDQo+ID4gIAkJCSp2YWwgLT0gb2Zmc2V0
Ow0KPiA+ICAJCX0NCj4gPiAgCQlyZXR1cm4gSUlPX1ZBTF9JTlQ7DQo+ID4gKwljYXNlIElJT19D
SEFOX0lORk9fU0FNUF9GUkVROg0KPiA+ICsJCSp2YWwgPSBzdC0+Y2hpcF9pbmZvDQo+ID4gKwkJ
CSAgICAgICAtPnNhbXBsZV9mcmVxX2F2YWlsW0FENzc5M19NT0RFX1JBVEUoc3QtPm1vZGUpXTsN
Cj4gPiArCQlyZXR1cm4gSUlPX1ZBTF9JTlQ7DQo+ID4gIAl9DQo+ID4gIAlyZXR1cm4gLUVJTlZB
TDsNCj4gPiAgfQ0KPiA+IEBAIC01NDIsNiArNDk1LDI2IEBAIHN0YXRpYyBpbnQgYWQ3NzkzX3dy
aXRlX3JhdyhzdHJ1Y3QgaWlvX2RldiANCj4gPiAqaW5kaW9fZGV2LA0KPiA+ICAJCQkJYnJlYWs7
DQo+ID4gIAkJCX0NCj4gPiAgCQlicmVhazsNCj4gPiArCWNhc2UgSUlPX0NIQU5fSU5GT19TQU1Q
X0ZSRVE6DQo+ID4gKwkJaWYgKCF2YWwpIHsNCj4gPiArCQkJcmV0ID0gLUVJTlZBTDsNCj4gPiAr
CQkJYnJlYWs7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkr
KykNCj4gPiArCQkJaWYgKHZhbCA9PSBzdC0+Y2hpcF9pbmZvLT5zYW1wbGVfZnJlcV9hdmFpbFtp
XSkNCj4gPiArCQkJCWJyZWFrOw0KPiA+ICsNCj4gPiArCQlpZiAoaSA9PSAxNikgew0KPiA+ICsJ
CQlyZXQgPSAtRUlOVkFMOw0KPiA+ICsJCQlicmVhazsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJ
CXN0LT5tb2RlICY9IH5BRDc3OTNfTU9ERV9SQVRFKC0xKTsNCj4gPiArCQlzdC0+bW9kZSB8PSBB
RDc3OTNfTU9ERV9SQVRFKGkpOw0KPiA+ICsJCWFkX3NkX3dyaXRlX3JlZygmc3QtPnNkLCBBRDc3
OTNfUkVHX01PREUsIHNpemVvZihzdC0+bW9kZSksDQo+ID4gKwkJCQlzdC0+bW9kZSk7DQo+ID4g
KwkJYnJlYWs7DQo+ID4gIAlkZWZhdWx0Og0KPiA+ICAJCXJldCA9IC1FSU5WQUw7DQo+ID4gIAl9
DQo+IA0KPiAtLQ0KPiBUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbGlzdDogc2VuZCB0aGUgbGlu
ZSAidW5zdWJzY3JpYmUgbGludXgtaWlvIiBpbg0KPiB0aGUgYm9keSBvZiBhIG1lc3NhZ2UgdG8g
bWFqb3Jkb21vQHZnZXIua2VybmVsLm9yZw0KPiBNb3JlIG1ham9yZG9tbyBpbmZvIGF0ICBodHRw
Oi8vdmdlci5rZXJuZWwub3JnL21ham9yZG9tby1pbmZvLmh0bWwNCj4g

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] iio: ad7793: implement IIO_CHAN_INFO_SAMP_FREQ
  2018-03-12  9:18   ` Ardelean, Alexandru
@ 2018-03-17 20:36     ` Jonathan Cameron
  0 siblings, 0 replies; 8+ messages in thread
From: Jonathan Cameron @ 2018-03-17 20:36 UTC (permalink / raw)
  To: Ardelean, Alexandru; +Cc: linux-iio, committed

On Mon, 12 Mar 2018 09:18:24 +0000
"Ardelean, Alexandru" <alexandru.Ardelean@analog.com> wrote:

> On Mon, 2018-03-12 at 10:10 +0100, Michael Nosthoff wrote:
> > On 2018-03-09 16:13, Michael Nosthoff wrote:
> > 
> > I noticed I forgot the "v5" in the subject tag. Should I resubmit?  
> 
> From my side, I think it's fine to skip it.
> Let's see if Jonathan has another preference.
It's fine - we all forget this from time to time (well at least
I do anyway)

Applied to the fixes-togreg branch of iio.git and marked for stable.

This may take a little while to go upstream because of where we are
in the cycle and whether I get another pull request out to greg
before the merge window. If not it'll go shortly after the window
closes.

Thanks,

Jonathan
> 
> >   
> > > This commit is a follow-up to changes made to ad_sigma_delta.h
> > > in staging: iio: ad7192: implement IIO_CHAN_INFO_SAMP_FREQ
> > > which broke ad7793 as it was not altered to match those changes.
> > > 
> > > This driver predates the availability of IIO_CHAN_INFO_SAMP_FREQ
> > > attribute wherein usage has some advantages like it can be accessed by
> > > in-kernel consumers as well as reduces the code size.
> > > 
> > > Therefore, use IIO_CHAN_INFO_SAMP_FREQ to implement the
> > > sampling_frequency attribute instead of using IIO_DEV_ATTR_SAMP_FREQ()
> > > macro.
> > > 
> > > Move code from the functions associated with IIO_DEV_ATTR_SAMP_FREQ()
> > > into respective read and write hooks with the mask set to
> > > IIO_CHAN_INFO_SAMP_FREQ.
> > > 
> > > Fixes: a13e831fcaa7 ("staging: iio: ad7192: implement 
> > > IIO_CHAN_INFO_SAMP_FREQ")
> > > 
> > > Signed-off-by: Michael Nosthoff <committed@heine.so>
> > > ---
> > > Changes in v5:
> > > 
> > >   - fixed checkpatchi.pl warnings for line-length
> > > 
> > >  drivers/iio/adc/ad7793.c | 75 
> > > ++++++++++++++++--------------------------------
> > >  1 file changed, 24 insertions(+), 51 deletions(-)
> > > 
> > > diff --git a/drivers/iio/adc/ad7793.c b/drivers/iio/adc/ad7793.c
> > > index 801afb6..d4bbe5b 100644
> > > --- a/drivers/iio/adc/ad7793.c
> > > +++ b/drivers/iio/adc/ad7793.c
> > > @@ -348,55 +348,6 @@ static const u16 ad7793_sample_freq_avail[16] =
> > > {0, 470, 242, 123, 62, 50, 39,
> > >  static const u16 ad7797_sample_freq_avail[16] = {0, 0, 0, 123, 62, 50, 
> > > 0,
> > >  					33, 0, 17, 16, 12, 10, 8, 6, 4};
> > > 
> > > -static ssize_t ad7793_read_frequency(struct device *dev,
> > > -		struct device_attribute *attr,
> > > -		char *buf)
> > > -{
> > > -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> > > -	struct ad7793_state *st = iio_priv(indio_dev);
> > > -
> > > -	return sprintf(buf, "%d\n",
> > > -	       st->chip_info->sample_freq_avail[AD7793_MODE_RATE(st->mode)]);
> > > -}
> > > -
> > > -static ssize_t ad7793_write_frequency(struct device *dev,
> > > -		struct device_attribute *attr,
> > > -		const char *buf,
> > > -		size_t len)
> > > -{
> > > -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> > > -	struct ad7793_state *st = iio_priv(indio_dev);
> > > -	long lval;
> > > -	int i, ret;
> > > -
> > > -	ret = kstrtol(buf, 10, &lval);
> > > -	if (ret)
> > > -		return ret;
> > > -
> > > -	if (lval == 0)
> > > -		return -EINVAL;
> > > -
> > > -	for (i = 0; i < 16; i++)
> > > -		if (lval == st->chip_info->sample_freq_avail[i])
> > > -			break;
> > > -	if (i == 16)
> > > -		return -EINVAL;
> > > -
> > > -	ret = iio_device_claim_direct_mode(indio_dev);
> > > -	if (ret)
> > > -		return ret;
> > > -	st->mode &= ~AD7793_MODE_RATE(-1);
> > > -	st->mode |= AD7793_MODE_RATE(i);
> > > -	ad_sd_write_reg(&st->sd, AD7793_REG_MODE, sizeof(st->mode), 
> > > st->mode);
> > > -	iio_device_release_direct_mode(indio_dev);
> > > -
> > > -	return len;
> > > -}
> > > -
> > > -static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO,
> > > -		ad7793_read_frequency,
> > > -		ad7793_write_frequency);
> > > -
> > >  static IIO_CONST_ATTR_SAMP_FREQ_AVAIL(
> > >  	"470 242 123 62 50 39 33 19 17 16 12 10 8 6 4");
> > > 
> > > @@ -424,7 +375,6 @@ static 
> > > IIO_DEVICE_ATTR_NAMED(in_m_in_scale_available,
> > >  		ad7793_show_scale_available, NULL, 0);
> > > 
> > >  static struct attribute *ad7793_attributes[] = {
> > > -	&iio_dev_attr_sampling_frequency.dev_attr.attr,
> > >  	&iio_const_attr_sampling_frequency_available.dev_attr.attr,
> > >  	&iio_dev_attr_in_m_in_scale_available.dev_attr.attr,
> > >  	NULL
> > > @@ -435,7 +385,6 @@ static const struct attribute_group
> > > ad7793_attribute_group = {
> > >  };
> > > 
> > >  static struct attribute *ad7797_attributes[] = {
> > > -	&iio_dev_attr_sampling_frequency.dev_attr.attr,
> > >  	&iio_const_attr_sampling_frequency_available_ad7797.dev_attr.attr,
> > >  	NULL
> > >  };
> > > @@ -505,6 +454,10 @@ static int ad7793_read_raw(struct iio_dev 
> > > *indio_dev,
> > >  			*val -= offset;
> > >  		}
> > >  		return IIO_VAL_INT;
> > > +	case IIO_CHAN_INFO_SAMP_FREQ:
> > > +		*val = st->chip_info
> > > +			       ->sample_freq_avail[AD7793_MODE_RATE(st->mode)];
> > > +		return IIO_VAL_INT;
> > >  	}
> > >  	return -EINVAL;
> > >  }
> > > @@ -542,6 +495,26 @@ static int ad7793_write_raw(struct iio_dev 
> > > *indio_dev,
> > >  				break;
> > >  			}
> > >  		break;
> > > +	case IIO_CHAN_INFO_SAMP_FREQ:
> > > +		if (!val) {
> > > +			ret = -EINVAL;
> > > +			break;
> > > +		}
> > > +
> > > +		for (i = 0; i < 16; i++)
> > > +			if (val == st->chip_info->sample_freq_avail[i])
> > > +				break;
> > > +
> > > +		if (i == 16) {
> > > +			ret = -EINVAL;
> > > +			break;
> > > +		}
> > > +
> > > +		st->mode &= ~AD7793_MODE_RATE(-1);
> > > +		st->mode |= AD7793_MODE_RATE(i);
> > > +		ad_sd_write_reg(&st->sd, AD7793_REG_MODE, sizeof(st->mode),
> > > +				st->mode);
> > > +		break;
> > >  	default:
> > >  		ret = -EINVAL;
> > >  	}  
> > 
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-iio" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> > N_____r__y____b_X____v_^_)__{.n_+____{__*"__^n_r___z_\x1a__h_____&__\x1e_G___h_\x03(_______j"__\x1a_^[m______z______f___h___~_  


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] iio: ad7793: implement IIO_CHAN_INFO_SAMP_FREQ
  2018-03-07 18:02   ` Michael Nosthoff
@ 2018-03-08  9:33     ` Michael Nosthoff
  0 siblings, 0 replies; 8+ messages in thread
From: Michael Nosthoff @ 2018-03-08  9:33 UTC (permalink / raw)
  To: linux-iio

On 2018-03-07 19:02, Michael Nosthoff wrote:
> On 2018-03-07 17:43, Lars-Peter Clausen wrote:
>> On 03/07/2018 05:17 PM, Michael Nosthoff wrote:
>> [...]
>>> +    case IIO_CHAN_INFO_SAMP_FREQ:
>>> +        if (!val) {
>>> +            ret = -EINVAL;
>>> +            break;
>>> +        }
>>> +
>>> +        for (i = 0; i < 16; i++)
>>> +            if (val == st->chip_info->sample_freq_avail[i])
>>> +                break;
>>> +
>>> +        if (i == 16) {
>>> +            ret = -EINVAL;
>>> +            break;
>>> +        }
>>> +
>>> +        st->mode &= ~AD7793_MODE_RATE(-1);
>>> +        st->mode |= AD7793_MODE_RATE(i);
>>> +        ad_sd_write_reg(&st->sd, AD7793_REG_MODE, sizeof(st->mode), 
>>> st->mode);
>>> +        ret = 0;
>> 
>> I don't think the ret = 0 is needed here, it should already be 0. But 
>> of
>> course it does not hurt either.
> 
> My fault. I tested against 4.14 which doesn't have the
> "use iio helper function to guarantee direct mode" commit which 
> initializes
> ret. Which produces a compiler warning.
> So if I remove it a backport would require that commit to be pulled 
> first.

I just noticed I mixed something up, the mentioned patch is already 
applied in 4.14.
I'll remove the line and resubmit the patch.



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] iio: ad7793: implement IIO_CHAN_INFO_SAMP_FREQ
  2018-03-07 16:43 ` Lars-Peter Clausen
@ 2018-03-07 18:02   ` Michael Nosthoff
  2018-03-08  9:33     ` Michael Nosthoff
  0 siblings, 1 reply; 8+ messages in thread
From: Michael Nosthoff @ 2018-03-07 18:02 UTC (permalink / raw)
  To: linux-iio

On 2018-03-07 17:43, Lars-Peter Clausen wrote:
> On 03/07/2018 05:17 PM, Michael Nosthoff wrote:
>> This commit is a follow-up to changes made to ad_sigma_delta.h
>> in staging: iio: ad7192: implement IIO_CHAN_INFO_SAMP_FREQ
>> which broke ad7793 as it was not altered to match those changes.
>> 
>> This driver predates the availability of IIO_CHAN_INFO_SAMP_FREQ
>> attribute wherein usage has some advantages like it can be accessed by
>> in-kernel consumers as well as reduces the code size.
>> 
>> Therefore, use IIO_CHAN_INFO_SAMP_FREQ to implement the
>> sampling_frequency attribute instead of using IIO_DEV_ATTR_SAMP_FREQ()
>> macro.
>> 
>> Move code from the functions associated with IIO_DEV_ATTR_SAMP_FREQ()
>> into respective read and write hooks with the mask set to
>> IIO_CHAN_INFO_SAMP_FREQ.
>> 
>> Signed-off-by: Michael Nosthoff <committed@heine.so>
> 
> Hi,
> 
> Thanks for fixing this. Patch looks good. We should add the fixes tag 
> to the
> commit messages, so it gets picked up for the right stable branches.
> 
> Fixes: a13e831fcaa7 ("staging: iio: ad7192: implement 
> IIO_CHAN_INFO_SAMP_FREQ")
> 
> Other than that just one minor comment inline.

Agree on the fixes tag. Further comment inline.

> 
> [...]
>> +    case IIO_CHAN_INFO_SAMP_FREQ:
>> +        if (!val) {
>> +            ret = -EINVAL;
>> +            break;
>> +        }
>> +
>> +        for (i = 0; i < 16; i++)
>> +            if (val == st->chip_info->sample_freq_avail[i])
>> +                break;
>> +
>> +        if (i == 16) {
>> +            ret = -EINVAL;
>> +            break;
>> +        }
>> +
>> +        st->mode &= ~AD7793_MODE_RATE(-1);
>> +        st->mode |= AD7793_MODE_RATE(i);
>> +        ad_sd_write_reg(&st->sd, AD7793_REG_MODE, sizeof(st->mode), 
>> st->mode);
>> +        ret = 0;
> 
> I don't think the ret = 0 is needed here, it should already be 0. But 
> of
> course it does not hurt either.

My fault. I tested against 4.14 which doesn't have the
"use iio helper function to guarantee direct mode" commit which 
initializes
ret. Which produces a compiler warning.
So if I remove it a backport would require that commit to be pulled 
first.

> 
>> +        break;
>>     default:
>>         ret = -EINVAL;
>>     }
>> --
>> 2.7.4
>> 
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-iio" 
>> in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] iio: ad7793: implement IIO_CHAN_INFO_SAMP_FREQ
  2018-03-07 16:17 Michael Nosthoff
@ 2018-03-07 16:43 ` Lars-Peter Clausen
  2018-03-07 18:02   ` Michael Nosthoff
  0 siblings, 1 reply; 8+ messages in thread
From: Lars-Peter Clausen @ 2018-03-07 16:43 UTC (permalink / raw)
  To: Michael Nosthoff, linux-iio

On 03/07/2018 05:17 PM, Michael Nosthoff wrote:
> This commit is a follow-up to changes made to ad_sigma_delta.h
> in staging: iio: ad7192: implement IIO_CHAN_INFO_SAMP_FREQ
> which broke ad7793 as it was not altered to match those changes.
> 
> This driver predates the availability of IIO_CHAN_INFO_SAMP_FREQ
> attribute wherein usage has some advantages like it can be accessed by
> in-kernel consumers as well as reduces the code size.
> 
> Therefore, use IIO_CHAN_INFO_SAMP_FREQ to implement the
> sampling_frequency attribute instead of using IIO_DEV_ATTR_SAMP_FREQ()
> macro.
> 
> Move code from the functions associated with IIO_DEV_ATTR_SAMP_FREQ()
> into respective read and write hooks with the mask set to
> IIO_CHAN_INFO_SAMP_FREQ.
> 
> Signed-off-by: Michael Nosthoff <committed@heine.so>

Hi,

Thanks for fixing this. Patch looks good. We should add the fixes tag to the
commit messages, so it gets picked up for the right stable branches.

Fixes: a13e831fcaa7 ("staging: iio: ad7192: implement IIO_CHAN_INFO_SAMP_FREQ")

Other than that just one minor comment inline.

[...]
> +    case IIO_CHAN_INFO_SAMP_FREQ:
> +        if (!val) {
> +            ret = -EINVAL;
> +            break;
> +        }
> +
> +        for (i = 0; i < 16; i++)
> +            if (val == st->chip_info->sample_freq_avail[i])
> +                break;
> +
> +        if (i == 16) {
> +            ret = -EINVAL;
> +            break;
> +        }
> +
> +        st->mode &= ~AD7793_MODE_RATE(-1);
> +        st->mode |= AD7793_MODE_RATE(i);
> +        ad_sd_write_reg(&st->sd, AD7793_REG_MODE, sizeof(st->mode), st->mode);
> +        ret = 0;

I don't think the ret = 0 is needed here, it should already be 0. But of
course it does not hurt either.

> +        break;
>     default:
>         ret = -EINVAL;
>     }
> -- 
> 2.7.4
> 
> -- 
> To unsubscribe from this list: send the line "unsubscribe linux-iio" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH] iio: ad7793: implement IIO_CHAN_INFO_SAMP_FREQ
@ 2018-03-07 16:17 Michael Nosthoff
  2018-03-07 16:43 ` Lars-Peter Clausen
  0 siblings, 1 reply; 8+ messages in thread
From: Michael Nosthoff @ 2018-03-07 16:17 UTC (permalink / raw)
  To: linux-iio

This commit is a follow-up to changes made to ad_sigma_delta.h
in staging: iio: ad7192: implement IIO_CHAN_INFO_SAMP_FREQ
which broke ad7793 as it was not altered to match those changes.

This driver predates the availability of IIO_CHAN_INFO_SAMP_FREQ
attribute wherein usage has some advantages like it can be accessed by
in-kernel consumers as well as reduces the code size.

Therefore, use IIO_CHAN_INFO_SAMP_FREQ to implement the
sampling_frequency attribute instead of using IIO_DEV_ATTR_SAMP_FREQ()
macro.

Move code from the functions associated with IIO_DEV_ATTR_SAMP_FREQ()
into respective read and write hooks with the mask set to
IIO_CHAN_INFO_SAMP_FREQ.

Signed-off-by: Michael Nosthoff <committed@heine.so>
---
  drivers/iio/adc/ad7793.c | 74 
+++++++++++++++---------------------------------
  1 file changed, 23 insertions(+), 51 deletions(-)

diff --git a/drivers/iio/adc/ad7793.c b/drivers/iio/adc/ad7793.c
index 47c3d7f..4079f40 100644
--- a/drivers/iio/adc/ad7793.c
+++ b/drivers/iio/adc/ad7793.c
@@ -348,55 +348,6 @@ static const u16 ad7793_sample_freq_avail[16] = {0, 
470, 242, 123, 62, 50, 39,
  static const u16 ad7797_sample_freq_avail[16] = {0, 0, 0, 123, 62, 50, 
0,
					33, 0, 17, 16, 12, 10, 8, 6, 4};

-static ssize_t ad7793_read_frequency(struct device *dev,
-		struct device_attribute *attr,
-		char *buf)
-{
-	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
-	struct ad7793_state *st = iio_priv(indio_dev);
-
-	return sprintf(buf, "%d\n",
-		st->chip_info->sample_freq_avail[AD7793_MODE_RATE(st->mode)]);
-}
-
-static ssize_t ad7793_write_frequency(struct device *dev,
-		 struct device_attribute *attr,
-		 const char *buf,
-		 size_t len)
-{
-	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
-	struct ad7793_state *st = iio_priv(indio_dev);
-	long lval;
-	int i, ret;
-
-	ret = kstrtol(buf, 10, &lval);
-	if (ret)
-		return ret;
-
-	if (lval == 0)
-		return -EINVAL;
-
-	for (i = 0; i < 16; i++)
-		if (lval == st->chip_info->sample_freq_avail[i])
-			break;
-	if (i == 16)
-		return -EINVAL;
-
-	ret = iio_device_claim_direct_mode(indio_dev);
-	if (ret)
-		return ret;
-	st->mode &= ~AD7793_MODE_RATE(-1);
-	st->mode |= AD7793_MODE_RATE(i);
-	ad_sd_write_reg(&st->sd, AD7793_REG_MODE, sizeof(st->mode), st->mode);
-	iio_device_release_direct_mode(indio_dev);
-
-	return len;
-}
-
-static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO,
-		ad7793_read_frequency,
-		ad7793_write_frequency);
-

  static IIO_CONST_ATTR_SAMP_FREQ_AVAIL(
	"470 242 123 62 50 39 33 19 17 16 12 10 8 6 4");

@@ -424,7 +375,6 @@ static 
IIO_DEVICE_ATTR_NAMED(in_m_in_scale_available,
		ad7793_show_scale_available, NULL, 0);

  static struct attribute *ad7793_attributes[] = {
-	&iio_dev_attr_sampling_frequency.dev_attr.attr,
	&iio_const_attr_sampling_frequency_available.dev_attr.attr,
	&iio_dev_attr_in_m_in_scale_available.dev_attr.attr,
	NULL
@@ -435,7 +385,6 @@ static const struct attribute_group 
ad7793_attribute_group = {
  };

  static struct attribute *ad7797_attributes[] = {
-	&iio_dev_attr_sampling_frequency.dev_attr.attr,
	&iio_const_attr_sampling_frequency_available_ad7797.dev_attr.attr,
	NULL
  };
@@ -505,6 +454,9 @@ static int ad7793_read_raw(struct iio_dev 
*indio_dev,
			*val -= offset;
		}
		return IIO_VAL_INT;
+	case IIO_CHAN_INFO_SAMP_FREQ:
+		 *val = st->chip_info->sample_freq_avail[AD7793_MODE_RATE(st->mode)];
+		 return IIO_VAL_INT;
	}
	return -EINVAL;
  }
@@ -542,6 +494,26 @@ static int ad7793_write_raw(struct iio_dev 
*indio_dev,
				break;
			}
		break;
+	case IIO_CHAN_INFO_SAMP_FREQ:
+		if (!val) {
+			ret = -EINVAL;
+			break;
+		}
+
+		for (i = 0; i < 16; i++)
+			if (val == st->chip_info->sample_freq_avail[i])
+				break;
+
+		if (i == 16) {
+			ret = -EINVAL;
+			break;
+		}
+
+		st->mode &= ~AD7793_MODE_RATE(-1);
+		st->mode |= AD7793_MODE_RATE(i);
+		ad_sd_write_reg(&st->sd, AD7793_REG_MODE, sizeof(st->mode), 
st->mode);
+		ret = 0;
+		break;
	default:
		ret = -EINVAL;
	}
--
2.7.4


^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2018-03-17 20:36 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-09 15:13 [PATCH] iio: ad7793: implement IIO_CHAN_INFO_SAMP_FREQ Michael Nosthoff
2018-03-12  9:10 ` Michael Nosthoff
2018-03-12  9:18   ` Ardelean, Alexandru
2018-03-17 20:36     ` Jonathan Cameron
  -- strict thread matches above, loose matches on Subject: below --
2018-03-07 16:17 Michael Nosthoff
2018-03-07 16:43 ` Lars-Peter Clausen
2018-03-07 18:02   ` Michael Nosthoff
2018-03-08  9:33     ` Michael Nosthoff

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.