diff mbox

[v2] iio: ad7793: implement IIO_CHAN_INFO_SAMP_FREQ

Message ID 54a52d0cd2417e64b607956b81aa16ec@heine.so (mailing list archive)
State New, archived
Headers show

Commit Message

Michael Nosthoff March 8, 2018, 9:33 a.m. UTC
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 v2:

   - Added Fixes Tag
   - Removed unnecessary ret=0 statement

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

  	"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;
  	}

Comments

Alexandru Ardelean March 9, 2018, 12:39 p.m. UTC | #1
On Thu, 2018-03-08 at 10:33 +0100, 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.

> 

> Fixes: a13e831fcaa7 ("staging: iio: ad7192: implement 

> IIO_CHAN_INFO_SAMP_FREQ")


Hey,

Thanks for the effort in finding and fixing this :)

Can you recreate and resend the patch ?
It seems to be malformed ; lines look wrapped.
See example inline.

I'm suspecting you did not use `git send-mail`.
Can you resend it with `git send-email`.


Thanks
Alex

> 

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

> ---

> Changes in v2:

> 

>    - Added Fixes Tag

>    - Removed unnecessary ret=0 statement

> 

>   drivers/iio/adc/ad7793.c | 73 

> +++++++++++++++---------------------------------

>   1 file changed, 22 insertions(+), 51 deletions(-)

> 

> diff --git a/drivers/iio/adc/ad7793.c b/drivers/iio/adc/ad7793.c

> index 47c3d7f..fa31a36 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,


Example: this line seems to have been wrapped by an editor ; so is the next one;

>   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;

>   	}
diff mbox

Patch

diff --git a/drivers/iio/adc/ad7793.c b/drivers/iio/adc/ad7793.c
index 47c3d7f..fa31a36 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(