aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/staging/iio/dac/ad5624r_spi.c67
1 files changed, 35 insertions, 32 deletions
diff --git a/drivers/staging/iio/dac/ad5624r_spi.c b/drivers/staging/iio/dac/ad5624r_spi.c
index b7c1661f687..2b1c6dde4fd 100644
--- a/drivers/staging/iio/dac/ad5624r_spi.c
+++ b/drivers/staging/iio/dac/ad5624r_spi.c
@@ -57,9 +57,8 @@ static int ad5624r_spi_write(struct spi_device *spi,
57} 57}
58 58
59static ssize_t ad5624r_write_dac(struct device *dev, 59static ssize_t ad5624r_write_dac(struct device *dev,
60 struct device_attribute *attr, 60 struct device_attribute *attr,
61 const char *buf, 61 const char *buf, size_t len)
62 size_t len)
63{ 62{
64 long readin; 63 long readin;
65 int ret; 64 int ret;
@@ -72,13 +71,12 @@ static ssize_t ad5624r_write_dac(struct device *dev,
72 return ret; 71 return ret;
73 72
74 ret = ad5624r_spi_write(st->us, AD5624R_CMD_WRITE_INPUT_N_UPDATE_N, 73 ret = ad5624r_spi_write(st->us, AD5624R_CMD_WRITE_INPUT_N_UPDATE_N,
75 this_attr->address, readin, st->data_len); 74 this_attr->address, readin, st->data_len);
76 return ret ? ret : len; 75 return ret ? ret : len;
77} 76}
78 77
79static ssize_t ad5624r_read_ldac_mode(struct device *dev, 78static ssize_t ad5624r_read_ldac_mode(struct device *dev,
80 struct device_attribute *attr, 79 struct device_attribute *attr, char *buf)
81 char *buf)
82{ 80{
83 struct iio_dev *indio_dev = dev_get_drvdata(dev); 81 struct iio_dev *indio_dev = dev_get_drvdata(dev);
84 struct ad5624r_state *st = indio_dev->dev_data; 82 struct ad5624r_state *st = indio_dev->dev_data;
@@ -87,9 +85,8 @@ static ssize_t ad5624r_read_ldac_mode(struct device *dev,
87} 85}
88 86
89static ssize_t ad5624r_write_ldac_mode(struct device *dev, 87static ssize_t ad5624r_write_ldac_mode(struct device *dev,
90 struct device_attribute *attr, 88 struct device_attribute *attr,
91 const char *buf, 89 const char *buf, size_t len)
92 size_t len)
93{ 90{
94 long readin; 91 long readin;
95 int ret; 92 int ret;
@@ -100,15 +97,16 @@ static ssize_t ad5624r_write_ldac_mode(struct device *dev,
100 if (ret) 97 if (ret)
101 return ret; 98 return ret;
102 99
103 ret = ad5624r_spi_write(st->us, AD5624R_CMD_LDAC_SETUP, 0, readin & 0xF, 16); 100 ret = ad5624r_spi_write(st->us, AD5624R_CMD_LDAC_SETUP, 0,
101 readin & 0xF, 16);
104 st->ldac_mode = readin & 0xF; 102 st->ldac_mode = readin & 0xF;
105 103
106 return ret ? ret : len; 104 return ret ? ret : len;
107} 105}
108 106
109static ssize_t ad5624r_read_dac_power_mode(struct device *dev, 107static ssize_t ad5624r_read_dac_power_mode(struct device *dev,
110 struct device_attribute *attr, 108 struct device_attribute *attr,
111 char *buf) 109 char *buf)
112{ 110{
113 struct iio_dev *indio_dev = dev_get_drvdata(dev); 111 struct iio_dev *indio_dev = dev_get_drvdata(dev);
114 struct ad5624r_state *st = indio_dev->dev_data; 112 struct ad5624r_state *st = indio_dev->dev_data;
@@ -118,9 +116,8 @@ static ssize_t ad5624r_read_dac_power_mode(struct device *dev,
118} 116}
119 117
120static ssize_t ad5624r_write_dac_power_mode(struct device *dev, 118static ssize_t ad5624r_write_dac_power_mode(struct device *dev,
121 struct device_attribute *attr, 119 struct device_attribute *attr,
122 const char *buf, 120 const char *buf, size_t len)
123 size_t len)
124{ 121{
125 long readin; 122 long readin;
126 int ret; 123 int ret;
@@ -133,7 +130,8 @@ static ssize_t ad5624r_write_dac_power_mode(struct device *dev,
133 return ret; 130 return ret;
134 131
135 ret = ad5624r_spi_write(st->us, AD5624R_CMD_POWERDOWN_DAC, 0, 132 ret = ad5624r_spi_write(st->us, AD5624R_CMD_POWERDOWN_DAC, 0,
136 ((readin & 0x3) << 4) | (1 << this_attr->address), 16); 133 ((readin & 0x3) << 4) |
134 (1 << this_attr->address), 16);
137 135
138 st->dac_power_mode[this_attr->address] = readin & 0x3; 136 st->dac_power_mode[this_attr->address] = readin & 0x3;
139 137
@@ -141,8 +139,8 @@ static ssize_t ad5624r_write_dac_power_mode(struct device *dev,
141} 139}
142 140
143static ssize_t ad5624r_read_internal_ref_mode(struct device *dev, 141static ssize_t ad5624r_read_internal_ref_mode(struct device *dev,
144 struct device_attribute *attr, 142 struct device_attribute *attr,
145 char *buf) 143 char *buf)
146{ 144{
147 struct iio_dev *indio_dev = dev_get_drvdata(dev); 145 struct iio_dev *indio_dev = dev_get_drvdata(dev);
148 struct ad5624r_state *st = indio_dev->dev_data; 146 struct ad5624r_state *st = indio_dev->dev_data;
@@ -151,9 +149,8 @@ static ssize_t ad5624r_read_internal_ref_mode(struct device *dev,
151} 149}
152 150
153static ssize_t ad5624r_write_internal_ref_mode(struct device *dev, 151static ssize_t ad5624r_write_internal_ref_mode(struct device *dev,
154 struct device_attribute *attr, 152 struct device_attribute *attr,
155 const char *buf, 153 const char *buf, size_t len)
156 size_t len)
157{ 154{
158 long readin; 155 long readin;
159 int ret; 156 int ret;
@@ -164,7 +161,8 @@ static ssize_t ad5624r_write_internal_ref_mode(struct device *dev,
164 if (ret) 161 if (ret)
165 return ret; 162 return ret;
166 163
167 ret = ad5624r_spi_write(st->us, AD5624R_CMD_INTERNAL_REFER_SETUP, 0, !!readin, 16); 164 ret = ad5624r_spi_write(st->us, AD5624R_CMD_INTERNAL_REFER_SETUP, 0,
165 !!readin, 16);
168 166
169 st->internal_ref = !!readin; 167 st->internal_ref = !!readin;
170 168
@@ -177,17 +175,22 @@ static IIO_DEV_ATTR_OUT_RAW(2, ad5624r_write_dac, AD5624R_ADDR_DAC2);
177static IIO_DEV_ATTR_OUT_RAW(3, ad5624r_write_dac, AD5624R_ADDR_DAC3); 175static IIO_DEV_ATTR_OUT_RAW(3, ad5624r_write_dac, AD5624R_ADDR_DAC3);
178 176
179static IIO_DEVICE_ATTR(ldac_mode, S_IRUGO | S_IWUSR, ad5624r_read_ldac_mode, 177static IIO_DEVICE_ATTR(ldac_mode, S_IRUGO | S_IWUSR, ad5624r_read_ldac_mode,
180 ad5624r_write_ldac_mode, 0); 178 ad5624r_write_ldac_mode, 0);
181static IIO_DEVICE_ATTR(internal_ref, S_IRUGO | S_IWUSR, ad5624r_read_internal_ref_mode, 179static IIO_DEVICE_ATTR(internal_ref, S_IRUGO | S_IWUSR,
182 ad5624r_write_internal_ref_mode, 0); 180 ad5624r_read_internal_ref_mode,
181 ad5624r_write_internal_ref_mode, 0);
183 182
184#define IIO_DEV_ATTR_DAC_POWER_MODE(_num, _show, _store, _addr) \ 183#define IIO_DEV_ATTR_DAC_POWER_MODE(_num, _show, _store, _addr) \
185 IIO_DEVICE_ATTR(dac_power_mode_##_num, S_IRUGO | S_IWUSR, _show, _store, _addr) 184 IIO_DEVICE_ATTR(dac_power_mode_##_num, S_IRUGO | S_IWUSR, _show, _store, _addr)
186 185
187static IIO_DEV_ATTR_DAC_POWER_MODE(0, ad5624r_read_dac_power_mode, ad5624r_write_dac_power_mode, 0); 186static IIO_DEV_ATTR_DAC_POWER_MODE(0, ad5624r_read_dac_power_mode,
188static IIO_DEV_ATTR_DAC_POWER_MODE(1, ad5624r_read_dac_power_mode, ad5624r_write_dac_power_mode, 1); 187 ad5624r_write_dac_power_mode, 0);
189static IIO_DEV_ATTR_DAC_POWER_MODE(2, ad5624r_read_dac_power_mode, ad5624r_write_dac_power_mode, 2); 188static IIO_DEV_ATTR_DAC_POWER_MODE(1, ad5624r_read_dac_power_mode,
190static IIO_DEV_ATTR_DAC_POWER_MODE(3, ad5624r_read_dac_power_mode, ad5624r_write_dac_power_mode, 3); 189 ad5624r_write_dac_power_mode, 1);
190static IIO_DEV_ATTR_DAC_POWER_MODE(2, ad5624r_read_dac_power_mode,
191 ad5624r_write_dac_power_mode, 2);
192static IIO_DEV_ATTR_DAC_POWER_MODE(3, ad5624r_read_dac_power_mode,
193 ad5624r_write_dac_power_mode, 3);
191 194
192static struct attribute *ad5624r_attributes[] = { 195static struct attribute *ad5624r_attributes[] = {
193 &iio_dev_attr_out0_raw.dev_attr.attr, 196 &iio_dev_attr_out0_raw.dev_attr.attr,
@@ -272,9 +275,9 @@ static const struct spi_device_id ad5624r_id[] = {
272 275
273static struct spi_driver ad5624r_driver = { 276static struct spi_driver ad5624r_driver = {
274 .driver = { 277 .driver = {
275 .name = "ad5624r", 278 .name = "ad5624r",
276 .owner = THIS_MODULE, 279 .owner = THIS_MODULE,
277 }, 280 },
278 .probe = ad5624r_probe, 281 .probe = ad5624r_probe,
279 .remove = __devexit_p(ad5624r_remove), 282 .remove = __devexit_p(ad5624r_remove),
280 .id_table = ad5624r_id, 283 .id_table = ad5624r_id,