X-Git-Url: https://git.openpandora.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=drivers%2Fstaging%2Fiio%2Fadc%2Fmax1363_core.c;h=dde097afb430d69be2d93e83bc34e5d908768d92;hb=f063a0c0c995d010960efcc1b2ed14b99674f25c;hp=6435e509dd5637db38452219ad12c4d1b1450d5f;hpb=b618f6f885579a6237e5bf4582fa6167972ddef4;p=pandora-kernel.git diff --git a/drivers/staging/iio/adc/max1363_core.c b/drivers/staging/iio/adc/max1363_core.c index 6435e509dd56..dde097afb430 100644 --- a/drivers/staging/iio/adc/max1363_core.c +++ b/drivers/staging/iio/adc/max1363_core.c @@ -42,11 +42,10 @@ /* Here we claim all are 16 bits. This currently does no harm and saves * us a lot of scan element listings */ -#define MAX1363_SCAN_EL(number) \ - IIO_SCAN_EL_C(in##number, number, IIO_UNSIGNED(16), 0, NULL); +#define MAX1363_SCAN_EL(number) \ + IIO_SCAN_EL_C(in##number, number, 0, NULL); #define MAX1363_SCAN_EL_D(p, n, number) \ - IIO_SCAN_NAMED_EL_C(in##p##m##in##n, in##p-in##n, \ - number, IIO_SIGNED(16), 0, NULL); + IIO_SCAN_NAMED_EL_C(in##p##m##in##n, in##p-in##n, number, 0, NULL); static MAX1363_SCAN_EL(0); static MAX1363_SCAN_EL(1); @@ -148,17 +147,59 @@ const struct max1363_mode return NULL; } -static ssize_t max1363_show_precision(struct device *dev, +static ssize_t max1363_show_precision_u(struct device *dev, struct device_attribute *attr, char *buf) { - struct iio_dev *dev_info = dev_get_drvdata(dev); + struct iio_ring_buffer *ring = dev_get_drvdata(dev); + struct iio_dev *dev_info = ring->indio_dev; + struct max1363_state *st = iio_dev_get_devdata(dev_info); + return sprintf(buf, "u%d/16\n", st->chip_info->bits); +} + +static ssize_t max1363_show_precision_s(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct iio_ring_buffer *ring = dev_get_drvdata(dev); + struct iio_dev *dev_info = ring->indio_dev; struct max1363_state *st = iio_dev_get_devdata(dev_info); - return sprintf(buf, "%d\n", st->chip_info->bits); + return sprintf(buf, "s%d/16\n", st->chip_info->bits); } -static IIO_DEVICE_ATTR(in_precision, S_IRUGO, max1363_show_precision, - NULL, 0); +#define MAX1363_SCAN_TYPE(n) \ + DEVICE_ATTR(in##n##_type, S_IRUGO, \ + max1363_show_precision_u, NULL); +#define MAX1363_SCAN_TYPE_D(p, n) \ + struct device_attribute dev_attr_in##p##m##in##n##_type = \ + __ATTR(in##p-in##n##_type, S_IRUGO, \ + max1363_show_precision_s, NULL); + +static MAX1363_SCAN_TYPE(0); +static MAX1363_SCAN_TYPE(1); +static MAX1363_SCAN_TYPE(2); +static MAX1363_SCAN_TYPE(3); +static MAX1363_SCAN_TYPE(4); +static MAX1363_SCAN_TYPE(5); +static MAX1363_SCAN_TYPE(6); +static MAX1363_SCAN_TYPE(7); +static MAX1363_SCAN_TYPE(8); +static MAX1363_SCAN_TYPE(9); +static MAX1363_SCAN_TYPE(10); +static MAX1363_SCAN_TYPE(11); + +static MAX1363_SCAN_TYPE_D(0, 1); +static MAX1363_SCAN_TYPE_D(2, 3); +static MAX1363_SCAN_TYPE_D(4, 5); +static MAX1363_SCAN_TYPE_D(6, 7); +static MAX1363_SCAN_TYPE_D(8, 9); +static MAX1363_SCAN_TYPE_D(10, 11); +static MAX1363_SCAN_TYPE_D(1, 0); +static MAX1363_SCAN_TYPE_D(3, 2); +static MAX1363_SCAN_TYPE_D(5, 4); +static MAX1363_SCAN_TYPE_D(7, 6); +static MAX1363_SCAN_TYPE_D(9, 8); +static MAX1363_SCAN_TYPE_D(11, 10); static int max1363_write_basic_config(struct i2c_client *client, unsigned char d1, @@ -345,15 +386,22 @@ static struct attribute_group max1363_dev_attr_group = { }; static struct attribute *max1363_scan_el_attrs[] = { - &iio_scan_el_in0.dev_attr.attr, - &iio_scan_el_in1.dev_attr.attr, - &iio_scan_el_in2.dev_attr.attr, - &iio_scan_el_in3.dev_attr.attr, - &iio_scan_el_in0min1.dev_attr.attr, - &iio_scan_el_in2min3.dev_attr.attr, - &iio_scan_el_in1min0.dev_attr.attr, - &iio_scan_el_in3min2.dev_attr.attr, - &iio_dev_attr_in_precision.dev_attr.attr, + &iio_scan_el_in0.dev_attr.attr, &dev_attr_in0_type.attr, + &iio_const_attr_in0_index.dev_attr.attr, + &iio_scan_el_in1.dev_attr.attr, &dev_attr_in1_type.attr, + &iio_const_attr_in1_index.dev_attr.attr, + &iio_scan_el_in2.dev_attr.attr, &dev_attr_in2_type.attr, + &iio_const_attr_in2_index.dev_attr.attr, + &iio_scan_el_in3.dev_attr.attr, &dev_attr_in3_type.attr, + &iio_const_attr_in3_index.dev_attr.attr, + &iio_scan_el_in0min1.dev_attr.attr, &dev_attr_in0min1_type.attr, + &iio_const_attr_in0min1_index.dev_attr.attr, + &iio_scan_el_in2min3.dev_attr.attr, &dev_attr_in2min3_type.attr, + &iio_const_attr_in2min3_index.dev_attr.attr, + &iio_scan_el_in1min0.dev_attr.attr, &dev_attr_in1min0_type.attr, + &iio_const_attr_in1min0_index.dev_attr.attr, + &iio_scan_el_in3min2.dev_attr.attr, &dev_attr_in3min2_type.attr, + &iio_const_attr_in3min2_index.dev_attr.attr, NULL, }; @@ -419,31 +467,54 @@ static struct attribute_group max1238_dev_attr_group = { }; static struct attribute *max1238_scan_el_attrs[] = { - &iio_scan_el_in0.dev_attr.attr, - &iio_scan_el_in1.dev_attr.attr, - &iio_scan_el_in2.dev_attr.attr, - &iio_scan_el_in3.dev_attr.attr, - &iio_scan_el_in4.dev_attr.attr, - &iio_scan_el_in5.dev_attr.attr, - &iio_scan_el_in6.dev_attr.attr, - &iio_scan_el_in7.dev_attr.attr, - &iio_scan_el_in8.dev_attr.attr, - &iio_scan_el_in9.dev_attr.attr, - &iio_scan_el_in10.dev_attr.attr, - &iio_scan_el_in11.dev_attr.attr, - &iio_scan_el_in0min1.dev_attr.attr, - &iio_scan_el_in2min3.dev_attr.attr, - &iio_scan_el_in4min5.dev_attr.attr, - &iio_scan_el_in6min7.dev_attr.attr, - &iio_scan_el_in8min9.dev_attr.attr, - &iio_scan_el_in10min11.dev_attr.attr, - &iio_scan_el_in1min0.dev_attr.attr, - &iio_scan_el_in3min2.dev_attr.attr, - &iio_scan_el_in5min4.dev_attr.attr, - &iio_scan_el_in7min6.dev_attr.attr, - &iio_scan_el_in9min8.dev_attr.attr, - &iio_scan_el_in11min10.dev_attr.attr, - &iio_dev_attr_in_precision.dev_attr.attr, + &iio_scan_el_in0.dev_attr.attr, &dev_attr_in0_type.attr, + &iio_const_attr_in0_index.dev_attr.attr, + &iio_scan_el_in1.dev_attr.attr, &dev_attr_in1_type.attr, + &iio_const_attr_in1_index.dev_attr.attr, + &iio_scan_el_in2.dev_attr.attr, &dev_attr_in2_type.attr, + &iio_const_attr_in2_index.dev_attr.attr, + &iio_scan_el_in3.dev_attr.attr, &dev_attr_in3_type.attr, + &iio_const_attr_in3_index.dev_attr.attr, + &iio_scan_el_in4.dev_attr.attr, &dev_attr_in4_type.attr, + &iio_const_attr_in4_index.dev_attr.attr, + &iio_scan_el_in5.dev_attr.attr, &dev_attr_in5_type.attr, + &iio_const_attr_in5_index.dev_attr.attr, + &iio_scan_el_in6.dev_attr.attr, &dev_attr_in6_type.attr, + &iio_const_attr_in6_index.dev_attr.attr, + &iio_scan_el_in7.dev_attr.attr, &dev_attr_in7_type.attr, + &iio_const_attr_in7_index.dev_attr.attr, + &iio_scan_el_in8.dev_attr.attr, &dev_attr_in8_type.attr, + &iio_const_attr_in8_index.dev_attr.attr, + &iio_scan_el_in9.dev_attr.attr, &dev_attr_in9_type.attr, + &iio_const_attr_in9_index.dev_attr.attr, + &iio_scan_el_in10.dev_attr.attr, &dev_attr_in10_type.attr, + &iio_const_attr_in10_index.dev_attr.attr, + &iio_scan_el_in11.dev_attr.attr, &dev_attr_in11_type.attr, + &iio_const_attr_in11_index.dev_attr.attr, + &iio_scan_el_in0min1.dev_attr.attr, &dev_attr_in0min1_type.attr, + &iio_const_attr_in0min1_index.dev_attr.attr, + &iio_scan_el_in2min3.dev_attr.attr, &dev_attr_in2min3_type.attr, + &iio_const_attr_in2min3_index.dev_attr.attr, + &iio_scan_el_in4min5.dev_attr.attr, &dev_attr_in4min5_type.attr, + &iio_const_attr_in4min5_index.dev_attr.attr, + &iio_scan_el_in6min7.dev_attr.attr, &dev_attr_in6min7_type.attr, + &iio_const_attr_in6min7_index.dev_attr.attr, + &iio_scan_el_in8min9.dev_attr.attr, &dev_attr_in8min9_type.attr, + &iio_const_attr_in8min9_index.dev_attr.attr, + &iio_scan_el_in10min11.dev_attr.attr, &dev_attr_in10min11_type.attr, + &iio_const_attr_in10min11_index.dev_attr.attr, + &iio_scan_el_in1min0.dev_attr.attr, &dev_attr_in1min0_type.attr, + &iio_const_attr_in1min0_index.dev_attr.attr, + &iio_scan_el_in3min2.dev_attr.attr, &dev_attr_in3min2_type.attr, + &iio_const_attr_in3min2_index.dev_attr.attr, + &iio_scan_el_in5min4.dev_attr.attr, &dev_attr_in5min4_type.attr, + &iio_const_attr_in5min4_index.dev_attr.attr, + &iio_scan_el_in7min6.dev_attr.attr, &dev_attr_in7min6_type.attr, + &iio_const_attr_in7min6_index.dev_attr.attr, + &iio_scan_el_in9min8.dev_attr.attr, &dev_attr_in9min8_type.attr, + &iio_const_attr_in9min8_index.dev_attr.attr, + &iio_scan_el_in11min10.dev_attr.attr, &dev_attr_in11min10_type.attr, + &iio_const_attr_in11min10_index.dev_attr.attr, NULL, }; @@ -498,23 +569,39 @@ static struct attribute_group max11608_dev_attr_group = { }; static struct attribute *max11608_scan_el_attrs[] = { - &iio_scan_el_in0.dev_attr.attr, - &iio_scan_el_in1.dev_attr.attr, - &iio_scan_el_in2.dev_attr.attr, - &iio_scan_el_in3.dev_attr.attr, - &iio_scan_el_in4.dev_attr.attr, - &iio_scan_el_in5.dev_attr.attr, - &iio_scan_el_in6.dev_attr.attr, - &iio_scan_el_in7.dev_attr.attr, - &iio_scan_el_in0min1.dev_attr.attr, - &iio_scan_el_in2min3.dev_attr.attr, - &iio_scan_el_in4min5.dev_attr.attr, - &iio_scan_el_in6min7.dev_attr.attr, - &iio_scan_el_in1min0.dev_attr.attr, - &iio_scan_el_in3min2.dev_attr.attr, - &iio_scan_el_in5min4.dev_attr.attr, - &iio_scan_el_in7min6.dev_attr.attr, - &iio_dev_attr_in_precision.dev_attr.attr, + &iio_scan_el_in0.dev_attr.attr, &dev_attr_in0_type.attr, + &iio_const_attr_in0_index.dev_attr.attr, + &iio_scan_el_in1.dev_attr.attr, &dev_attr_in1_type.attr, + &iio_const_attr_in1_index.dev_attr.attr, + &iio_scan_el_in2.dev_attr.attr, &dev_attr_in2_type.attr, + &iio_const_attr_in2_index.dev_attr.attr, + &iio_scan_el_in3.dev_attr.attr, &dev_attr_in3_type.attr, + &iio_const_attr_in3_index.dev_attr.attr, + &iio_scan_el_in4.dev_attr.attr, &dev_attr_in4_type.attr, + &iio_const_attr_in4_index.dev_attr.attr, + &iio_scan_el_in5.dev_attr.attr, &dev_attr_in5_type.attr, + &iio_const_attr_in5_index.dev_attr.attr, + &iio_scan_el_in6.dev_attr.attr, &dev_attr_in6_type.attr, + &iio_const_attr_in6_index.dev_attr.attr, + &iio_scan_el_in7.dev_attr.attr, &dev_attr_in7_type.attr, + &iio_const_attr_in7_index.dev_attr.attr, + &iio_scan_el_in0min1.dev_attr.attr, &dev_attr_in0min1_type.attr, + &iio_const_attr_in0min1_index.dev_attr.attr, + &iio_scan_el_in2min3.dev_attr.attr, &dev_attr_in2min3_type.attr, + &iio_const_attr_in2min3_index.dev_attr.attr, + &iio_scan_el_in4min5.dev_attr.attr, &dev_attr_in4min5_type.attr, + &iio_const_attr_in4min5_index.dev_attr.attr, + &iio_scan_el_in6min7.dev_attr.attr, &dev_attr_in6min7_type.attr, + &iio_const_attr_in6min7_index.dev_attr.attr, + &iio_scan_el_in1min0.dev_attr.attr, &dev_attr_in1min0_type.attr, + &iio_const_attr_in1min0_index.dev_attr.attr, + &iio_scan_el_in3min2.dev_attr.attr, &dev_attr_in3min2_type.attr, + &iio_const_attr_in3min2_index.dev_attr.attr, + &iio_scan_el_in5min4.dev_attr.attr, &dev_attr_in5min4_type.attr, + &iio_const_attr_in5min4_index.dev_attr.attr, + &iio_scan_el_in7min6.dev_attr.attr, &dev_attr_in7min6_type.attr, + &iio_const_attr_in7min6_index.dev_attr.attr, + NULL }; static struct attribute_group max11608_scan_el_group = { @@ -1631,7 +1718,6 @@ static int __devinit max1363_probe(struct i2c_client *client, st->indio_dev->attrs = st->chip_info->dev_attrs; /* Todo: this shouldn't be here. */ - st->indio_dev->scan_el_attrs = st->chip_info->scan_attrs; st->indio_dev->dev_data = (void *)(st); st->indio_dev->driver_module = THIS_MODULE; st->indio_dev->modes = INDIO_DIRECT_MODE;