Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9214cc6e authored by Jonathan Cameron's avatar Jonathan Cameron Committed by Greg Kroah-Hartman
Browse files

staging:iio:adc:ad7606 unwind use of is_visible for attrs.



This is the most controversial of this set of is_visible removals.
There are two conditions controlling availability of attrs resulting
in 4 different attribute groups.

Still for a few more lines things are clearer to read to my mind.

Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
Acked-by: default avatarLars-Peter Clausen <lars@metafoo.de>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 7389266c
Loading
Loading
Loading
Loading
+53 −30
Original line number Original line Diff line number Diff line
@@ -197,7 +197,7 @@ static IIO_DEVICE_ATTR(oversampling_ratio, S_IRUGO | S_IWUSR,
		       ad7606_store_oversampling_ratio, 0);
		       ad7606_store_oversampling_ratio, 0);
static IIO_CONST_ATTR(oversampling_ratio_available, "0 2 4 8 16 32 64");
static IIO_CONST_ATTR(oversampling_ratio_available, "0 2 4 8 16 32 64");


static struct attribute *ad7606_attributes[] = {
static struct attribute *ad7606_attributes_os_and_range[] = {
	&iio_dev_attr_in_voltage_range.dev_attr.attr,
	&iio_dev_attr_in_voltage_range.dev_attr.attr,
	&iio_const_attr_in_voltage_range_available.dev_attr.attr,
	&iio_const_attr_in_voltage_range_available.dev_attr.attr,
	&iio_dev_attr_oversampling_ratio.dev_attr.attr,
	&iio_dev_attr_oversampling_ratio.dev_attr.attr,
@@ -205,34 +205,28 @@ static struct attribute *ad7606_attributes[] = {
	NULL,
	NULL,
};
};


static umode_t ad7606_attr_is_visible(struct kobject *kobj,
static const struct attribute_group ad7606_attribute_group_os_and_range = {
				     struct attribute *attr, int n)
	.attrs = ad7606_attributes_os_and_range,
{
};
	struct device *dev = container_of(kobj, struct device, kobj);
	struct iio_dev *indio_dev = dev_get_drvdata(dev);
	struct ad7606_state *st = iio_priv(indio_dev);


	umode_t mode = attr->mode;
static struct attribute *ad7606_attributes_os[] = {
	&iio_dev_attr_oversampling_ratio.dev_attr.attr,
	&iio_const_attr_oversampling_ratio_available.dev_attr.attr,
	NULL,
};


	if (!(gpio_is_valid(st->pdata->gpio_os0) &&
static const struct attribute_group ad7606_attribute_group_os = {
	      gpio_is_valid(st->pdata->gpio_os1) &&
	.attrs = ad7606_attributes_os,
	      gpio_is_valid(st->pdata->gpio_os2)) &&
};
	    (attr == &iio_dev_attr_oversampling_ratio.dev_attr.attr ||

	     attr ==
static struct attribute *ad7606_attributes_range[] = {
	     &iio_const_attr_oversampling_ratio_available.dev_attr.attr))
	&iio_dev_attr_in_voltage_range.dev_attr.attr,
		mode = 0;
	&iio_const_attr_in_voltage_range_available.dev_attr.attr,
	else if (!gpio_is_valid(st->pdata->gpio_range) &&
	NULL,
		 (attr == &iio_dev_attr_in_voltage_range.dev_attr.attr ||
};
		  attr ==

		  &iio_const_attr_in_voltage_range_available.dev_attr.attr))
static const struct attribute_group ad7606_attribute_group_range = {
		mode = 0;
	.attrs = ad7606_attributes_range,

	return mode;
}

static const struct attribute_group ad7606_attribute_group = {
	.attrs = ad7606_attributes,
	.is_visible = ad7606_attr_is_visible,
};
};


#define AD7606_CHANNEL(num)				\
#define AD7606_CHANNEL(num)				\
@@ -435,10 +429,27 @@ static irqreturn_t ad7606_interrupt(int irq, void *dev_id)
	return IRQ_HANDLED;
	return IRQ_HANDLED;
};
};


static const struct iio_info ad7606_info = {
static const struct iio_info ad7606_info_no_os_or_range = {
	.driver_module = THIS_MODULE,
	.driver_module = THIS_MODULE,
	.read_raw = &ad7606_read_raw,
	.read_raw = &ad7606_read_raw,
	.attrs = &ad7606_attribute_group,
};

static const struct iio_info ad7606_info_os_and_range = {
	.driver_module = THIS_MODULE,
	.read_raw = &ad7606_read_raw,
	.attrs = &ad7606_attribute_group_os_and_range,
};

static const struct iio_info ad7606_info_os = {
	.driver_module = THIS_MODULE,
	.read_raw = &ad7606_read_raw,
	.attrs = &ad7606_attribute_group_os,
};

static const struct iio_info ad7606_info_range = {
	.driver_module = THIS_MODULE,
	.read_raw = &ad7606_read_raw,
	.attrs = &ad7606_attribute_group_range,
};
};


struct iio_dev *ad7606_probe(struct device *dev, int irq,
struct iio_dev *ad7606_probe(struct device *dev, int irq,
@@ -483,7 +494,19 @@ struct iio_dev *ad7606_probe(struct device *dev, int irq,
	st->chip_info = &ad7606_chip_info_tbl[id];
	st->chip_info = &ad7606_chip_info_tbl[id];


	indio_dev->dev.parent = dev;
	indio_dev->dev.parent = dev;
	indio_dev->info = &ad7606_info;
	if (gpio_is_valid(st->pdata->gpio_os0) &&
	    gpio_is_valid(st->pdata->gpio_os1) &&
	    gpio_is_valid(st->pdata->gpio_os2)) {
		if (gpio_is_valid(st->pdata->gpio_range))
			indio_dev->info = &ad7606_info_os_and_range;
		else
			indio_dev->info = &ad7606_info_os;
	} else {
		if (gpio_is_valid(st->pdata->gpio_range))
			indio_dev->info = &ad7606_info_range;
		else
			indio_dev->info = &ad7606_info_no_os_or_range;
	}
	indio_dev->modes = INDIO_DIRECT_MODE;
	indio_dev->modes = INDIO_DIRECT_MODE;
	indio_dev->name = st->chip_info->name;
	indio_dev->name = st->chip_info->name;
	indio_dev->channels = st->chip_info->channels;
	indio_dev->channels = st->chip_info->channels;