mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-13 01:08:50 +00:00
iio: Add broken out info_mask fields for shared_by_type and separate
This simplifies the code, removes an extensive layer of 'helper' macros and gives us twice as much room to play with in these masks before we have any need to be clever. Signed-off-by: Jonathan Cameron <jic23@kernel.org> Acked-by: Lars-Peter Clausen <lars@metafoo.de>
This commit is contained in:
parent
10f5b14811
commit
8655cc490e
@ -708,6 +708,36 @@ static int iio_device_add_channel_sysfs(struct iio_dev *indio_dev,
|
|||||||
goto error_ret;
|
goto error_ret;
|
||||||
attrcount++;
|
attrcount++;
|
||||||
}
|
}
|
||||||
|
for_each_set_bit(i, &chan->info_mask_separate, sizeof(long)*8) {
|
||||||
|
ret = __iio_add_chan_devattr(iio_chan_info_postfix[i],
|
||||||
|
chan,
|
||||||
|
&iio_read_channel_info,
|
||||||
|
&iio_write_channel_info,
|
||||||
|
i,
|
||||||
|
0,
|
||||||
|
&indio_dev->dev,
|
||||||
|
&indio_dev->channel_attr_list);
|
||||||
|
if (ret < 0)
|
||||||
|
goto error_ret;
|
||||||
|
attrcount++;
|
||||||
|
}
|
||||||
|
for_each_set_bit(i, &chan->info_mask_shared_by_type, sizeof(long)*8) {
|
||||||
|
ret = __iio_add_chan_devattr(iio_chan_info_postfix[i],
|
||||||
|
chan,
|
||||||
|
&iio_read_channel_info,
|
||||||
|
&iio_write_channel_info,
|
||||||
|
i,
|
||||||
|
1,
|
||||||
|
&indio_dev->dev,
|
||||||
|
&indio_dev->channel_attr_list);
|
||||||
|
if (ret == -EBUSY) {
|
||||||
|
ret = 0;
|
||||||
|
continue;
|
||||||
|
} else if (ret < 0) {
|
||||||
|
goto error_ret;
|
||||||
|
}
|
||||||
|
attrcount++;
|
||||||
|
}
|
||||||
|
|
||||||
if (chan->ext_info) {
|
if (chan->ext_info) {
|
||||||
unsigned int i = 0;
|
unsigned int i = 0;
|
||||||
|
@ -218,6 +218,10 @@ ssize_t iio_enum_write(struct iio_dev *indio_dev,
|
|||||||
* endianness: little or big endian
|
* endianness: little or big endian
|
||||||
* @info_mask: What information is to be exported about this channel.
|
* @info_mask: What information is to be exported about this channel.
|
||||||
* This includes calibbias, scale etc.
|
* This includes calibbias, scale etc.
|
||||||
|
* @info_mask_separate: What information is to be exported that is specific to
|
||||||
|
* this channel.
|
||||||
|
* @info_mask_shared_by_type: What information is to be exported that is shared
|
||||||
|
* by all channels of the same type.
|
||||||
* @event_mask: What events can this channel produce.
|
* @event_mask: What events can this channel produce.
|
||||||
* @ext_info: Array of extended info attributes for this channel.
|
* @ext_info: Array of extended info attributes for this channel.
|
||||||
* The array is NULL terminated, the last element should
|
* The array is NULL terminated, the last element should
|
||||||
@ -253,6 +257,8 @@ struct iio_chan_spec {
|
|||||||
enum iio_endian endianness;
|
enum iio_endian endianness;
|
||||||
} scan_type;
|
} scan_type;
|
||||||
long info_mask;
|
long info_mask;
|
||||||
|
long info_mask_separate;
|
||||||
|
long info_mask_shared_by_type;
|
||||||
long event_mask;
|
long event_mask;
|
||||||
const struct iio_chan_spec_ext_info *ext_info;
|
const struct iio_chan_spec_ext_info *ext_info;
|
||||||
const char *extend_name;
|
const char *extend_name;
|
||||||
@ -275,7 +281,9 @@ struct iio_chan_spec {
|
|||||||
static inline bool iio_channel_has_info(const struct iio_chan_spec *chan,
|
static inline bool iio_channel_has_info(const struct iio_chan_spec *chan,
|
||||||
enum iio_chan_info_enum type)
|
enum iio_chan_info_enum type)
|
||||||
{
|
{
|
||||||
return chan->info_mask & IIO_CHAN_INFO_BITS(type);
|
return (chan->info_mask & IIO_CHAN_INFO_BITS(type)) |
|
||||||
|
(chan->info_mask_separate & type) |
|
||||||
|
(chan->info_mask_shared_by_type & type);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define IIO_ST(si, rb, sb, sh) \
|
#define IIO_ST(si, rb, sb, sh) \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user