iio: ad7793: implement IIO_CHAN_INFO_SAMP_FREQ
Subsystems (2)
PATCH v2 1/1 iio: ad7793: implement IIO_CHAN_INFO_SAMP_FREQ
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.
---
Changes in v2:
- Added Fixes Tag
- Removed unnecessary ret=0 statement
drivers/iio/adc/ad7793.c | 73 +++++++++++++++--------------------------------- 1 file changed, 22 insertions(+), 51 deletions(-)
drivers/iio/adc/ad7793.c +0 -0
@@ -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,25 @@ 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;
}
Signature · 1 line
2.7.4
T24gVGh1LCAyMDE4LTAzLTA4IGF0IDEwOjMzICswMTAwLCBNaWNoYWVsIE5vc3Rob2ZmIHdyb3Rl Og0KPiBUaGlzIGNvbW1pdCBpcyBhIGZvbGxvdy11cCB0byBjaGFuZ2VzIG1hZGUgdG8gYWRfc2ln bWFfZGVsdGEuaA0KPiBpbiBzdGFnaW5nOiBpaW86IGFkNzE5MjogaW1wbGVtZW50IElJT19DSEFO X0lORk9fU0FNUF9GUkVRDQo+IHdoaWNoIGJyb2tlIGFkNzc5MyBhcyBpdCB3YXMgbm90IGFsdGVy ZWQgdG8gbWF0Y2ggdGhvc2UgY2hhbmdlcy4NCj4gDQo+IFRoaXMgZHJpdmVyIHByZWRhdGVzIHRo ZSBhdmFpbGFiaWxpdHkgb2YgSUlPX0NIQU5fSU5GT19TQU1QX0ZSRVENCj4gYXR0cmlidXRlIHdo ZXJlaW4gdXNhZ2UgaGFzIHNvbWUgYWR2YW50YWdlcyBsaWtlIGl0IGNhbiBiZSBhY2Nlc3NlZCBi eQ0KPiBpbi1rZXJuZWwgY29uc3VtZXJzIGFzIHdlbGwgYXMgcmVkdWNlcyB0aGUgY29kZSBzaXpl Lg0KPiANCj4gVGhlcmVmb3JlLCB1c2UgSUlPX0NIQU5fSU5GT19TQU1QX0ZSRVEgdG8gaW1wbGVt ZW50IHRoZQ0KPiBzYW1wbGluZ19mcmVxdWVuY3kgYXR0cmlidXRlIGluc3RlYWQgb2YgdXNpbmcg SUlPX0RFVl9BVFRSX1NBTVBfRlJFUSgpDQo+IG1hY3JvLg0KPiANCj4gTW92ZSBjb2RlIGZyb20g dGhlIGZ1bmN0aW9ucyBhc3NvY2lhdGVkIHdpdGggSUlPX0RFVl9BVFRSX1NBTVBfRlJFUSgpDQo+ IGludG8gcmVzcGVjdGl2ZSByZWFkIGFuZCB3cml0ZSBob29rcyB3aXRoIHRoZSBtYXNrIHNldCB0 bw0KPiBJSU9fQ0hBTl9JTkZPX1NBTVBfRlJFUS4NCj4gDQo+IEZpeGVzOiBhMTNlODMxZmNhYTcg KCJzdGFnaW5nOiBpaW86IGFkNzE5MjogaW1wbGVtZW50IA0KPiBJSU9fQ0hBTl9JTkZPX1NBTVBf RlJFUSIpDQoNCkhleSwNCg0KVGhhbmtzIGZvciB0aGUgZWZmb3J0IGluIGZpbmRpbmcgYW5kIGZp eGluZyB0aGlzIDopDQoNCkNhbiB5b3UgcmVjcmVhdGUgYW5kIHJlc2VuZCB0aGUgcGF0Y2ggPw0K SXQgc2VlbXMgdG8gYmUgbWFsZm9ybWVkIDsgbGluZXMgbG9vayB3cmFwcGVkLg0KU2VlIGV4YW1w bGUgaW5saW5lLg0KDQpJJ20gc3VzcGVjdGluZyB5b3UgZGlkIG5vdCB1c2UgYGdpdCBzZW5kLW1h aWxgLg0KQ2FuIHlvdSByZXNlbmQgaXQgd2l0aCBgZ2l0IHNlbmQtZW1haWxgLg0KDQoNClRoYW5r cw0KQWxleA0KDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBNaWNoYWVsIE5vc3Rob2ZmIDxjb21taXR0 ZWRAaGVpbmUuc28+DQo+IC0tLQ0KPiBDaGFuZ2VzIGluIHYyOg0KPiANCj4gICAgLSBBZGRlZCBG aXhlcyBUYWcNCj4gICAgLSBSZW1vdmVkIHVubmVjZXNzYXJ5IHJldD0wIHN0YXRlbWVudA0KPiAN Cj4gICBkcml2ZXJzL2lpby9hZGMvYWQ3NzkzLmMgfCA3MyANCj4gKysrKysrKysrKysrKysrLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ICAgMSBmaWxlIGNoYW5nZWQsIDIyIGlu c2VydGlvbnMoKyksIDUxIGRlbGV0aW9ucygtKQ0KPiANCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv aWlvL2FkYy9hZDc3OTMuYyBiL2RyaXZlcnMvaWlvL2FkYy9hZDc3OTMuYw0KPiBpbmRleCA0N2Mz ZDdmLi5mYTMxYTM2IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2lpby9hZGMvYWQ3NzkzLmMNCj4g KysrIGIvZHJpdmVycy9paW8vYWRjL2FkNzc5My5jDQo+IEBAIC0zNDgsNTUgKzM0OCw2IEBAIHN0 YXRpYyBjb25zdCB1MTYgYWQ3NzkzX3NhbXBsZV9mcmVxX2F2YWlsWzE2XSA9IHswLCANCj4gNDcw LCAyNDIsIDEyMywgNjIsIDUwLCAzOSwNCg0KRXhhbXBsZTogdGhpcyBsaW5lIHNlZW1zIHRvIGhh dmUgYmVlbiB3cmFwcGVkIGJ5IGFuIGVkaXRvciA7IHNvIGlzIHRoZSBuZXh0IG9uZTsNCg0KPiAg IHN0YXRpYyBjb25zdCB1MTYgYWQ3Nzk3X3NhbXBsZV9mcmVxX2F2YWlsWzE2XSA9IHswLCAwLCAw LCAxMjMsIDYyLCA1MCwgDQo+IDAsDQo+ICAgCQkJCQkzMywgMCwgMTcsIDE2LCAxMiwgMTAsIDgs IDYsIDR9Ow0KPiANCj4gLXN0YXRpYyBzc2l6ZV90IGFkNzc5M19yZWFkX2ZyZXF1ZW5jeShzdHJ1 Y3QgZGV2aWNlICpkZXYsDQo+IC0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLA0KPiAt CQljaGFyICpidWYpDQo+IC17DQo+IC0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl90 b19paW9fZGV2KGRldik7DQo+IC0Jc3RydWN0IGFkNzc5M19zdGF0ZSAqc3QgPSBpaW9fcHJpdihp bmRpb19kZXYpOw0KPiAtDQo+IC0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsDQo+IC0JICAg ICAgIHN0LT5jaGlwX2luZm8tPnNhbXBsZV9mcmVxX2F2YWlsW0FENzc5M19NT0RFX1JBVEUoc3Qt Pm1vZGUpXSk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBzc2l6ZV90IGFkNzc5M193cml0ZV9mcmVx dWVuY3koc3RydWN0IGRldmljZSAqZGV2LA0KPiAtCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAq YXR0ciwNCj4gLQkJY29uc3QgY2hhciAqYnVmLA0KPiAtCQlzaXplX3QgbGVuKQ0KPiAtew0KPiAt CXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfdG9faWlvX2RldihkZXYpOw0KPiAtCXN0 cnVjdCBhZDc3OTNfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsNCj4gLQlsb25nIGx2 YWw7DQo+IC0JaW50IGksIHJldDsNCj4gLQ0KPiAtCXJldCA9IGtzdHJ0b2woYnVmLCAxMCwgJmx2 YWwpOw0KPiAtCWlmIChyZXQpDQo+IC0JCXJldHVybiByZXQ7DQo+IC0NCj4gLQlpZiAobHZhbCA9 PSAwKQ0KPiAtCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQ0KPiAtCWZvciAoaSA9IDA7IGkgPCAxNjsg aSsrKQ0KPiAtCQlpZiAobHZhbCA9PSBzdC0+Y2hpcF9pbmZvLT5zYW1wbGVfZnJlcV9hdmFpbFtp XSkNCj4gLQkJCWJyZWFrOw0KPiAtCWlmIChpID09IDE2KQ0KPiAtCQlyZXR1cm4gLUVJTlZBTDsN Cj4gLQ0KPiAtCXJldCA9IGlpb19kZXZpY2VfY2xhaW1fZGlyZWN0X21vZGUoaW5kaW9fZGV2KTsN Cj4gLQlpZiAocmV0KQ0KPiAtCQlyZXR1cm4gcmV0Ow0KPiAtCXN0LT5tb2RlICY9IH5BRDc3OTNf TU9ERV9SQVRFKC0xKTsNCj4gLQlzdC0+bW9kZSB8PSBBRDc3OTNfTU9ERV9SQVRFKGkpOw0KPiAt CWFkX3NkX3dyaXRlX3JlZygmc3QtPnNkLCBBRDc3OTNfUkVHX01PREUsIHNpemVvZihzdC0+bW9k ZSksIHN0LT5tb2RlKTsNCj4gLQlpaW9fZGV2aWNlX3JlbGVhc2VfZGlyZWN0X21vZGUoaW5kaW9f ZGV2KTsNCj4gLQ0KPiAtCXJldHVybiBsZW47DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBJSU9fREVW X0FUVFJfU0FNUF9GUkVRKFNfSVdVU1IgfCBTX0lSVUdPLA0KPiAtCQlhZDc3OTNfcmVhZF9mcmVx dWVuY3ksDQo+IC0JCWFkNzc5M193cml0ZV9mcmVxdWVuY3kpOw0KPiAtDQo+ICAgc3RhdGljIElJ T19DT05TVF9BVFRSX1NBTVBfRlJFUV9BVkFJTCgNCj4gICAJIjQ3MCAyNDIgMTIzIDYyIDUwIDM5 IDMzIDE5IDE3IDE2IDEyIDEwIDggNiA0Iik7DQo+IA0KPiBAQCAtNDI0LDcgKzM3NSw2IEBAIHN0 YXRpYyANCj4gSUlPX0RFVklDRV9BVFRSX05BTUVEKGluX21faW5fc2NhbGVfYXZhaWxhYmxlLA0K PiAgIAkJYWQ3NzkzX3Nob3dfc2NhbGVfYXZhaWxhYmxlLCBOVUxMLCAwKTsNCj4gDQo+ICAgc3Rh dGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkNzc5M19hdHRyaWJ1dGVzW10gPSB7DQo+IC0JJmlpb19k ZXZfYXR0cl9zYW1wbGluZ19mcmVxdWVuY3kuZGV2X2F0dHIuYXR0ciwNCj4gICAJJmlpb19jb25z dF9hdHRyX3NhbXBsaW5nX2ZyZXF1ZW5jeV9hdmFpbGFibGUuZGV2X2F0dHIuYXR0ciwNCj4gICAJ Jmlpb19kZXZfYXR0cl9pbl9tX2luX3NjYWxlX2F2YWlsYWJsZS5kZXZfYXR0ci5hdHRyLA0KPiAg IAlOVUxMDQo+IEBAIC00MzUsNyArMzg1LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1 dGVfZ3JvdXAgDQo+IGFkNzc5M19hdHRyaWJ1dGVfZ3JvdXAgPSB7DQo+ICAgfTsNCj4gDQo+ICAg c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkNzc5N19hdHRyaWJ1dGVzW10gPSB7DQo+IC0JJmlp b19kZXZfYXR0cl9zYW1wbGluZ19mcmVxdWVuY3kuZGV2X2F0dHIuYXR0ciwNCj4gICAJJmlpb19j b25zdF9hdHRyX3NhbXBsaW5nX2ZyZXF1ZW5jeV9hdmFpbGFibGVfYWQ3Nzk3LmRldl9hdHRyLmF0 dHIsDQo+ICAgCU5VTEwNCj4gICB9Ow0KPiBAQCAtNTA1LDYgKzQ1NCw5IEBAIHN0YXRpYyBpbnQg YWQ3NzkzX3JlYWRfcmF3KHN0cnVjdCBpaW9fZGV2IA0KPiAqaW5kaW9fZGV2LA0KPiAgIAkJCSp2 YWwgLT0gb2Zmc2V0Ow0KPiAgIAkJfQ0KPiAgIAkJcmV0dXJuIElJT19WQUxfSU5UOw0KPiArCWNh c2UgSUlPX0NIQU5fSU5GT19TQU1QX0ZSRVE6DQo+ICsJCSp2YWwgPSBzdC0+Y2hpcF9pbmZvLT5z YW1wbGVfZnJlcV9hdmFpbFtBRDc3OTNfTU9ERV9SQVRFKHN0LT5tb2RlKV07DQo+ICsJCXJldHVy biBJSU9fVkFMX0lOVDsNCj4gICAJfQ0KPiAgIAlyZXR1cm4gLUVJTlZBTDsNCj4gICB9DQo+IEBA IC01NDIsNiArNDk0LDI1IEBAIHN0YXRpYyBpbnQgYWQ3NzkzX3dyaXRlX3JhdyhzdHJ1Y3QgaWlv X2RldiANCj4gKmluZGlvX2RldiwNCj4gICAJCQkJYnJlYWs7DQo+ICAgCQkJfQ0KPiAgIAkJYnJl YWs7DQo+ICsJY2FzZSBJSU9fQ0hBTl9JTkZPX1NBTVBfRlJFUToNCj4gKwkJaWYgKCF2YWwpIHsN Cj4gKwkJCXJldCA9IC1FSU5WQUw7DQo+ICsJCQlicmVhazsNCj4gKwkJfQ0KPiArDQo+ICsJCWZv ciAoaSA9IDA7IGkgPCAxNjsgaSsrKQ0KPiArCQkJaWYgKHZhbCA9PSBzdC0+Y2hpcF9pbmZvLT5z YW1wbGVfZnJlcV9hdmFpbFtpXSkNCj4gKwkJCQlicmVhazsNCj4gKw0KPiArCQlpZiAoaSA9PSAx Nikgew0KPiArCQkJcmV0ID0gLUVJTlZBTDsNCj4gKwkJCWJyZWFrOw0KPiArCQl9DQo+ICsNCj4g KwkJc3QtPm1vZGUgJj0gfkFENzc5M19NT0RFX1JBVEUoLTEpOw0KPiArCQlzdC0+bW9kZSB8PSBB RDc3OTNfTU9ERV9SQVRFKGkpOw0KPiArCQlhZF9zZF93cml0ZV9yZWcoJnN0LT5zZCwgQUQ3Nzkz X1JFR19NT0RFLCBzaXplb2Yoc3QtPm1vZGUpLCANCj4gc3QtPm1vZGUpOw0KPiArCQlicmVhazsN Cj4gICAJZGVmYXVsdDoNCj4gICAJCXJldCA9IC1FSU5WQUw7DQo+ICAgCX0=