All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23@kernel.org>
To: Peter Meerwald <pmeerw@pmeerw.net>
Cc: linux-iio@vger.kernel.org
Subject: Re: [PATCH 5/5] iio:temperature:tmp006 put sampling_frequency in info_mask_shared_by_all
Date: Sat, 17 Aug 2013 18:56:41 +0100	[thread overview]
Message-ID: <520FB959.80903@kernel.org> (raw)
In-Reply-To: <alpine.DEB.2.01.1308171746520.20232@pmeerw.net>

On 08/17/13 16:49, Peter Meerwald wrote:
> Hello Jonathan,
> 
>> Doing this makes it possible to access this control from within the kernel.
> 
> I noticed this shortcoming as well after submitting;
> so the plan is to remove IIO_DEV_ATTR_SAMP_FREQ() sometimes, right?
Definititely .
> 
> patch looks good!
> Acked-by: Peter Meerwald <pmeerw@pmeerw.net>
Thanks,

Jonathan
> 
> regards, p.
> 
>> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
>> ---
>>  drivers/iio/temperature/tmp006.c | 57 +++++++++++++++++++---------------------
>>  1 file changed, 27 insertions(+), 30 deletions(-)
>>
>> diff --git a/drivers/iio/temperature/tmp006.c b/drivers/iio/temperature/tmp006.c
>> index 64ccde3..3df7a7e 100644
>> --- a/drivers/iio/temperature/tmp006.c
>> +++ b/drivers/iio/temperature/tmp006.c
>> @@ -70,12 +70,16 @@ static int tmp006_read_measurement(struct tmp006_data *data, u8 reg)
>>  	return i2c_smbus_read_word_swapped(data->client, reg);
>>  }
>>  
>> +static const int const tmp006_freqs[5][2] = { {4, 0}, {2, 0}, {1, 0},
>> +					      {0, 500000}, {0, 250000} };
>> +
>>  static int tmp006_read_raw(struct iio_dev *indio_dev,
>>  			    struct iio_chan_spec const *channel, int *val,
>>  			    int *val2, long mask)
>>  {
>>  	struct tmp006_data *data = iio_priv(indio_dev);
>>  	s32 ret;
>> +	int cr;
>>  
>>  	switch (mask) {
>>  	case IIO_CHAN_INFO_RAW:
>> @@ -106,6 +110,12 @@ static int tmp006_read_raw(struct iio_dev *indio_dev,
>>  			break;
>>  		}
>>  		return IIO_VAL_INT_PLUS_MICRO;
>> +	case IIO_CHAN_INFO_SAMP_FREQ:
>> +		cr = (data->config & TMP006_CONFIG_CR_MASK)
>> +			>> TMP006_CONFIG_CR_SHIFT;
>> +		*val = tmp006_freqs[cr][0];
>> +		*val2 = tmp006_freqs[cr][1];
>> +		return IIO_VAL_INT_PLUS_MICRO;
>>  	default:
>>  		break;
>>  	}
>> @@ -113,48 +123,32 @@ static int tmp006_read_raw(struct iio_dev *indio_dev,
>>  	return -EINVAL;
>>  }
>>  
>> -static const char * const tmp006_freqs[] = { "4", "2", "1", "0.5", "0.25" };
>> -
>> -static ssize_t tmp006_show_freq(struct device *dev,
>> -				struct device_attribute *attr, char *buf)
>> -{
>> -	struct tmp006_data *data = iio_priv(dev_to_iio_dev(dev));
>> -	int cr = (data->config & TMP006_CONFIG_CR_MASK)
>> -		>> TMP006_CONFIG_CR_SHIFT;
>> -	return sprintf(buf, "%s\n", tmp006_freqs[cr]);
>> -}
>> -
>> -static ssize_t tmp006_store_freq(struct device *dev,
>> -				 struct device_attribute *attr,
>> -				 const char *buf, size_t len)
>> +static int tmp006_write_raw(struct iio_dev *indio_dev,
>> +			    struct iio_chan_spec const *chan,
>> +			    int val,
>> +			    int val2,
>> +			    long mask)
>>  {
>> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
>>  	struct tmp006_data *data = iio_priv(indio_dev);
>>  	int i;
>> -	bool found = false;
>>  
>>  	for (i = 0; i < ARRAY_SIZE(tmp006_freqs); i++)
>> -		if (sysfs_streq(buf, tmp006_freqs[i])) {
>> -			found = true;
>> -			break;
>> -		}
>> -	if (!found)
>> -		return -EINVAL;
>> +		if ((val == tmp006_freqs[i][0]) &&
>> +		    (val2 == tmp006_freqs[i][1])) {
>> +			data->config &= ~TMP006_CONFIG_CR_MASK;
>> +			data->config |= i << TMP006_CONFIG_CR_SHIFT;
>>  
>> -	data->config &= ~TMP006_CONFIG_CR_MASK;
>> -	data->config |= i << TMP006_CONFIG_CR_SHIFT;
>> +			return i2c_smbus_write_word_swapped(data->client,
>> +							    TMP006_CONFIG,
>> +							    data->config);
>>  
>> -	return i2c_smbus_write_word_swapped(data->client, TMP006_CONFIG,
>> -		data->config);
>> +		}
>> +	return -EINVAL;
>>  }
>>  
>> -static IIO_DEV_ATTR_SAMP_FREQ(S_IRUGO | S_IWUSR,
>> -			tmp006_show_freq, tmp006_store_freq);
>> -
>>  static IIO_CONST_ATTR(sampling_frequency_available, "4 2 1 0.5 0.25");
>>  
>>  static struct attribute *tmp006_attributes[] = {
>> -	&iio_dev_attr_sampling_frequency.dev_attr.attr,
>>  	&iio_const_attr_sampling_frequency_available.dev_attr.attr,
>>  	NULL
>>  };
>> @@ -168,16 +162,19 @@ static const struct iio_chan_spec tmp006_channels[] = {
>>  		.type = IIO_VOLTAGE,
>>  		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
>>  			BIT(IIO_CHAN_INFO_SCALE),
>> +		.info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SAMP_FREQ),
>>  	},
>>  	{
>>  		.type = IIO_TEMP,
>>  		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
>>  			BIT(IIO_CHAN_INFO_SCALE),
>> +		.info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SAMP_FREQ),
>>  	}
>>  };
>>  
>>  static const struct iio_info tmp006_info = {
>>  	.read_raw = tmp006_read_raw,
>> +	.write_raw = tmp006_write_raw,
>>  	.attrs = &tmp006_attribute_group,
>>  	.driver_module = THIS_MODULE,
>>  };
>>
> 

  reply	other threads:[~2013-08-17 16:56 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-08-17 14:38 [PATCH 0/5] IIO: Refactor info_mask* handling and introduce info_mask_shared_[by_all/by_type] Jonathan Cameron
2013-08-17 14:39 ` [PATCH 1/5] iio: drop info_mask from struct iio_dev Jonathan Cameron
2013-08-17 14:39 ` [PATCH 2/5] iio: refactor info mask attribute creation Jonathan Cameron
2013-08-17 20:37   ` Jonathan Cameron
2013-08-17 14:39 ` [PATCH 3/5] iio: add info_mask_[shared_by_dir/shared_by_all] Jonathan Cameron
2013-08-17 14:39 ` [PATCH 4/5] staging:iio: dummy driver additions to show shared_by_dir infomask usage Jonathan Cameron
2013-08-17 14:39 ` [PATCH 5/5] iio:temperature:tmp006 put sampling_frequency in info_mask_shared_by_all Jonathan Cameron
2013-08-17 15:49   ` Peter Meerwald
2013-08-17 17:56     ` Jonathan Cameron [this message]
  -- strict thread matches above, loose matches on Subject: below --
2013-08-18 15:50 [PATCH V2 0/5] IIO: Refactor info_mask* and ext_info handling and introduce info_mask_shared_[by_all/by_type] Jonathan Cameron
2013-08-18 15:50 ` [PATCH 5/5] iio:temperature:tmp006 put sampling_frequency in info_mask_shared_by_all Jonathan Cameron
2013-09-08 13:57 [PATCH V3 0/5] IIO: Refactor info_mask* and ext_info handling and introduce info_mask_shared_[by_all/by_type] Jonathan Cameron
2013-09-08 13:57 ` [PATCH 5/5] iio:temperature:tmp006 put sampling_frequency in info_mask_shared_by_all Jonathan Cameron

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=520FB959.80903@kernel.org \
    --to=jic23@kernel.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=pmeerw@pmeerw.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.