aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/iio/industrialio-core.c
diff options
context:
space:
mode:
authorJonathan Cameron <jic23@cam.ac.uk>2011-05-18 14:42:37 +0100
committerGreg Kroah-Hartman <gregkh@suse.de>2011-05-19 16:15:05 -0700
commit6fe8135fccd66aedcc55ded70824342587fd2499 (patch)
tree3afc7acfd0edc052ba93241761e935af9a3b6ebc /drivers/staging/iio/industrialio-core.c
parenta3f02370c9fa6d85fbee2c11649ebc9c84bae919 (diff)
downloadkernel_samsung_smdk4412-6fe8135fccd66aedcc55ded70824342587fd2499.zip
kernel_samsung_smdk4412-6fe8135fccd66aedcc55ded70824342587fd2499.tar.gz
kernel_samsung_smdk4412-6fe8135fccd66aedcc55ded70824342587fd2499.tar.bz2
staging:iio: implement an iio_info structure to take some of the constant elements out of iio_dev.
This was suggested by Arnd Bergmann, Other elements may well move in here in future, but it definitely makes sense for these. Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/iio/industrialio-core.c')
-rw-r--r--drivers/staging/iio/industrialio-core.c73
1 files changed, 38 insertions, 35 deletions
diff --git a/drivers/staging/iio/industrialio-core.c b/drivers/staging/iio/industrialio-core.c
index 9218fee..94d3bfa 100644
--- a/drivers/staging/iio/industrialio-core.c
+++ b/drivers/staging/iio/industrialio-core.c
@@ -383,8 +383,8 @@ static ssize_t iio_read_channel_info(struct device *dev,
struct iio_dev *indio_dev = dev_get_drvdata(dev);
struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
int val, val2;
- int ret = indio_dev->read_raw(indio_dev, this_attr->c,
- &val, &val2, this_attr->address);
+ int ret = indio_dev->info->read_raw(indio_dev, this_attr->c,
+ &val, &val2, this_attr->address);
if (ret < 0)
return ret;
@@ -411,7 +411,7 @@ static ssize_t iio_write_channel_info(struct device *dev,
bool integer_part = true, negative = false;
/* Assumes decimal - precision based on number of digits */
- if (!indio_dev->write_raw)
+ if (!indio_dev->info->write_raw)
return -EINVAL;
if (buf[0] == '-') {
negative = true;
@@ -446,8 +446,8 @@ static ssize_t iio_write_channel_info(struct device *dev,
micro = -micro;
}
- ret = indio_dev->write_raw(indio_dev, this_attr->c,
- integer, micro, this_attr->address);
+ ret = indio_dev->info->write_raw(indio_dev, this_attr->c,
+ integer, micro, this_attr->address);
if (ret)
return ret;
@@ -707,8 +707,9 @@ static int iio_device_register_sysfs(struct iio_dev *dev_info)
int i, ret = 0;
struct iio_dev_attr *p, *n;
- if (dev_info->attrs) {
- ret = sysfs_create_group(&dev_info->dev.kobj, dev_info->attrs);
+ if (dev_info->info->attrs) {
+ ret = sysfs_create_group(&dev_info->dev.kobj,
+ dev_info->info->attrs);
if (ret) {
dev_err(dev_info->dev.parent,
"Failed to register sysfs hooks\n");
@@ -744,8 +745,8 @@ error_clear_attrs:
list_del(&p->l);
iio_device_remove_and_free_read_attr(dev_info, p);
}
- if (dev_info->attrs)
- sysfs_remove_group(&dev_info->dev.kobj, dev_info->attrs);
+ if (dev_info->info->attrs)
+ sysfs_remove_group(&dev_info->dev.kobj, dev_info->info->attrs);
error_ret:
return ret;
@@ -764,8 +765,8 @@ static void iio_device_unregister_sysfs(struct iio_dev *dev_info)
iio_device_remove_and_free_read_attr(dev_info, p);
}
- if (dev_info->attrs)
- sysfs_remove_group(&dev_info->dev.kobj, dev_info->attrs);
+ if (dev_info->info->attrs)
+ sysfs_remove_group(&dev_info->dev.kobj, dev_info->info->attrs);
}
/* Return a negative errno on failure */
@@ -824,8 +825,9 @@ static ssize_t iio_ev_state_store(struct device *dev,
if (ret < 0)
return ret;
- ret = indio_dev->write_event_config(indio_dev, this_attr->address,
- val);
+ ret = indio_dev->info->write_event_config(indio_dev,
+ this_attr->address,
+ val);
return (ret < 0) ? ret : len;
}
@@ -835,7 +837,8 @@ static ssize_t iio_ev_state_show(struct device *dev,
{
struct iio_dev *indio_dev = dev_get_drvdata(dev);
struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
- int val = indio_dev->read_event_config(indio_dev, this_attr->address);
+ int val = indio_dev->info->read_event_config(indio_dev,
+ this_attr->address);
if (val < 0)
return val;
@@ -851,8 +854,8 @@ static ssize_t iio_ev_value_show(struct device *dev,
struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
int val, ret;
- ret = indio_dev->read_event_value(indio_dev,
- this_attr->address, &val);
+ ret = indio_dev->info->read_event_value(indio_dev,
+ this_attr->address, &val);
if (ret < 0)
return ret;
@@ -873,8 +876,8 @@ static ssize_t iio_ev_value_store(struct device *dev,
if (ret)
return ret;
- ret = indio_dev->write_event_value(indio_dev, this_attr->address,
- val);
+ ret = indio_dev->info->write_event_value(indio_dev, this_attr->address,
+ val);
if (ret < 0)
return ret;
@@ -930,8 +933,7 @@ static int iio_device_add_event_sysfs(struct iio_dev *dev_info,
extending the bitmask - but
how far*/
0,
- &dev_info->event_interfaces[0]
- .dev,
+ &dev_info->event_interfaces[0].dev,
&dev_info->event_interfaces[0].
dev_attr_list);
kfree(postfix);
@@ -1015,23 +1017,23 @@ static int iio_device_register_eventset(struct iio_dev *dev_info)
{
int ret = 0, i, j;
- if (dev_info->num_interrupt_lines == 0)
+ if (dev_info->info->num_interrupt_lines == 0)
return 0;
dev_info->event_interfaces =
kzalloc(sizeof(struct iio_event_interface)
- *dev_info->num_interrupt_lines,
+ *dev_info->info->num_interrupt_lines,
GFP_KERNEL);
if (dev_info->event_interfaces == NULL) {
ret = -ENOMEM;
goto error_ret;
}
- for (i = 0; i < dev_info->num_interrupt_lines; i++) {
+ for (i = 0; i < dev_info->info->num_interrupt_lines; i++) {
ret = iio_setup_ev_int(&dev_info->event_interfaces[i],
dev_name(&dev_info->dev),
i,
- dev_info->driver_module,
+ dev_info->info->driver_module,
&dev_info->dev);
if (ret) {
dev_err(&dev_info->dev,
@@ -1042,11 +1044,12 @@ static int iio_device_register_eventset(struct iio_dev *dev_info)
dev_set_drvdata(&dev_info->event_interfaces[i].dev,
(void *)dev_info);
- if (dev_info->event_attrs != NULL)
+ if (dev_info->info->event_attrs != NULL)
ret = sysfs_create_group(&dev_info
->event_interfaces[i]
.dev.kobj,
- &dev_info->event_attrs[i]);
+ &dev_info->info
+ ->event_attrs[i]);
if (ret) {
dev_err(&dev_info->dev,
@@ -1055,7 +1058,7 @@ static int iio_device_register_eventset(struct iio_dev *dev_info)
}
}
- for (i = 0; i < dev_info->num_interrupt_lines; i++) {
+ for (i = 0; i < dev_info->info->num_interrupt_lines; i++) {
ret = __iio_add_event_config_attrs(dev_info, i);
if (ret)
goto error_unregister_config_attrs;
@@ -1066,13 +1069,13 @@ static int iio_device_register_eventset(struct iio_dev *dev_info)
error_unregister_config_attrs:
for (j = 0; j < i; j++)
__iio_remove_event_config_attrs(dev_info, i);
- i = dev_info->num_interrupt_lines - 1;
+ i = dev_info->info->num_interrupt_lines - 1;
error_remove_sysfs_interfaces:
for (j = 0; j < i; j++)
- if (dev_info->event_attrs != NULL)
+ if (dev_info->info->event_attrs != NULL)
sysfs_remove_group(&dev_info
->event_interfaces[j].dev.kobj,
- &dev_info->event_attrs[j]);
+ &dev_info->info->event_attrs[j]);
error_free_setup_ev_ints:
for (j = 0; j < i; j++)
iio_free_ev_int(&dev_info->event_interfaces[j]);
@@ -1086,17 +1089,17 @@ static void iio_device_unregister_eventset(struct iio_dev *dev_info)
{
int i;
- if (dev_info->num_interrupt_lines == 0)
+ if (dev_info->info->num_interrupt_lines == 0)
return;
- for (i = 0; i < dev_info->num_interrupt_lines; i++) {
+ for (i = 0; i < dev_info->info->num_interrupt_lines; i++) {
__iio_remove_event_config_attrs(dev_info, i);
- if (dev_info->event_attrs != NULL)
+ if (dev_info->info->event_attrs != NULL)
sysfs_remove_group(&dev_info
->event_interfaces[i].dev.kobj,
- &dev_info->event_attrs[i]);
+ &dev_info->info->event_attrs[i]);
}
- for (i = 0; i < dev_info->num_interrupt_lines; i++)
+ for (i = 0; i < dev_info->info->num_interrupt_lines; i++)
iio_free_ev_int(&dev_info->event_interfaces[i]);
kfree(dev_info->event_interfaces);
}