ti-dac5571.c (e2e5ebecca69a5a692cbd0728cb7f4abd25f48ac) ti-dac5571.c (74f582ec127e3b10aec71e8d15f1c14b0f0481ec)
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * ti-dac5571.c - Texas Instruments 8/10/12-bit 1/4-channel DAC driver
4 *
5 * Copyright (C) 2018 Prevas A/S
6 *
7 * https://www.ti.com/lit/ds/symlink/dac5571.pdf
8 * https://www.ti.com/lit/ds/symlink/dac6571.pdf

--- 5 unchanged lines hidden (view full) ---

14 * https://www.ti.com/lit/ds/symlink/dac6573.pdf
15 * https://www.ti.com/lit/ds/symlink/dac7573.pdf
16 */
17
18#include <linux/iio/iio.h>
19#include <linux/i2c.h>
20#include <linux/module.h>
21#include <linux/mod_devicetable.h>
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * ti-dac5571.c - Texas Instruments 8/10/12-bit 1/4-channel DAC driver
4 *
5 * Copyright (C) 2018 Prevas A/S
6 *
7 * https://www.ti.com/lit/ds/symlink/dac5571.pdf
8 * https://www.ti.com/lit/ds/symlink/dac6571.pdf

--- 5 unchanged lines hidden (view full) ---

14 * https://www.ti.com/lit/ds/symlink/dac6573.pdf
15 * https://www.ti.com/lit/ds/symlink/dac7573.pdf
16 */
17
18#include <linux/iio/iio.h>
19#include <linux/i2c.h>
20#include <linux/module.h>
21#include <linux/mod_devicetable.h>
22#include <linux/property.h>
23#include <linux/regulator/consumer.h>
24
25enum chip_id {
26 single_8bit, single_10bit, single_12bit,
27 quad_8bit, quad_10bit, quad_12bit
28};
29
30struct dac5571_spec {

--- 143 unchanged lines hidden (view full) ---

174 uintptr_t private,
175 const struct iio_chan_spec *chan,
176 const char *buf, size_t len)
177{
178 struct dac5571_data *data = iio_priv(indio_dev);
179 bool powerdown;
180 int ret;
181
22#include <linux/regulator/consumer.h>
23
24enum chip_id {
25 single_8bit, single_10bit, single_12bit,
26 quad_8bit, quad_10bit, quad_12bit
27};
28
29struct dac5571_spec {

--- 143 unchanged lines hidden (view full) ---

173 uintptr_t private,
174 const struct iio_chan_spec *chan,
175 const char *buf, size_t len)
176{
177 struct dac5571_data *data = iio_priv(indio_dev);
178 bool powerdown;
179 int ret;
180
182 ret = strtobool(buf, &powerdown);
181 ret = kstrtobool(buf, &powerdown);
183 if (ret)
184 return ret;
185
186 if (data->powerdown[chan->channel] == powerdown)
187 return len;
188
189 mutex_lock(&data->lock);
190 if (powerdown)

--- 116 unchanged lines hidden (view full) ---

307
308static int dac5571_probe(struct i2c_client *client,
309 const struct i2c_device_id *id)
310{
311 struct device *dev = &client->dev;
312 const struct dac5571_spec *spec;
313 struct dac5571_data *data;
314 struct iio_dev *indio_dev;
182 if (ret)
183 return ret;
184
185 if (data->powerdown[chan->channel] == powerdown)
186 return len;
187
188 mutex_lock(&data->lock);
189 if (powerdown)

--- 116 unchanged lines hidden (view full) ---

306
307static int dac5571_probe(struct i2c_client *client,
308 const struct i2c_device_id *id)
309{
310 struct device *dev = &client->dev;
311 const struct dac5571_spec *spec;
312 struct dac5571_data *data;
313 struct iio_dev *indio_dev;
315 enum chip_id chip_id;
316 int ret, i;
317
318 indio_dev = devm_iio_device_alloc(dev, sizeof(*data));
319 if (!indio_dev)
320 return -ENOMEM;
321
322 data = iio_priv(indio_dev);
323 i2c_set_clientdata(client, indio_dev);
324 data->client = client;
325
326 indio_dev->info = &dac5571_info;
327 indio_dev->name = id->name;
328 indio_dev->modes = INDIO_DIRECT_MODE;
329 indio_dev->channels = dac5571_channels;
330
314 int ret, i;
315
316 indio_dev = devm_iio_device_alloc(dev, sizeof(*data));
317 if (!indio_dev)
318 return -ENOMEM;
319
320 data = iio_priv(indio_dev);
321 i2c_set_clientdata(client, indio_dev);
322 data->client = client;
323
324 indio_dev->info = &dac5571_info;
325 indio_dev->name = id->name;
326 indio_dev->modes = INDIO_DIRECT_MODE;
327 indio_dev->channels = dac5571_channels;
328
331 if (dev_fwnode(dev))
332 chip_id = (uintptr_t)device_get_match_data(dev);
333 else
334 chip_id = id->driver_data;
335
336 spec = &dac5571_spec[chip_id];
337
329 spec = &dac5571_spec[id->driver_data];
338 indio_dev->num_channels = spec->num_channels;
339 data->spec = spec;
340
341 data->vref = devm_regulator_get(dev, "vref");
342 if (IS_ERR(data->vref))
343 return PTR_ERR(data->vref);
344
345 ret = regulator_enable(data->vref);

--- 42 unchanged lines hidden (view full) ---

388
389 iio_device_unregister(indio_dev);
390 regulator_disable(data->vref);
391
392 return 0;
393}
394
395static const struct of_device_id dac5571_of_id[] = {
330 indio_dev->num_channels = spec->num_channels;
331 data->spec = spec;
332
333 data->vref = devm_regulator_get(dev, "vref");
334 if (IS_ERR(data->vref))
335 return PTR_ERR(data->vref);
336
337 ret = regulator_enable(data->vref);

--- 42 unchanged lines hidden (view full) ---

380
381 iio_device_unregister(indio_dev);
382 regulator_disable(data->vref);
383
384 return 0;
385}
386
387static const struct of_device_id dac5571_of_id[] = {
396 {.compatible = "ti,dac5571", .data = (void *)single_8bit},
397 {.compatible = "ti,dac6571", .data = (void *)single_10bit},
398 {.compatible = "ti,dac7571", .data = (void *)single_12bit},
399 {.compatible = "ti,dac5574", .data = (void *)quad_8bit},
400 {.compatible = "ti,dac6574", .data = (void *)quad_10bit},
401 {.compatible = "ti,dac7574", .data = (void *)quad_12bit},
402 {.compatible = "ti,dac5573", .data = (void *)quad_8bit},
403 {.compatible = "ti,dac6573", .data = (void *)quad_10bit},
404 {.compatible = "ti,dac7573", .data = (void *)quad_12bit},
388 {.compatible = "ti,dac5571"},
389 {.compatible = "ti,dac6571"},
390 {.compatible = "ti,dac7571"},
391 {.compatible = "ti,dac5574"},
392 {.compatible = "ti,dac6574"},
393 {.compatible = "ti,dac7574"},
394 {.compatible = "ti,dac5573"},
395 {.compatible = "ti,dac6573"},
396 {.compatible = "ti,dac7573"},
405 {}
406};
407MODULE_DEVICE_TABLE(of, dac5571_of_id);
408
409static const struct i2c_device_id dac5571_id[] = {
410 {"dac5571", single_8bit},
411 {"dac6571", single_10bit},
412 {"dac7571", single_12bit},

--- 24 unchanged lines hidden ---
397 {}
398};
399MODULE_DEVICE_TABLE(of, dac5571_of_id);
400
401static const struct i2c_device_id dac5571_id[] = {
402 {"dac5571", single_8bit},
403 {"dac6571", single_10bit},
404 {"dac7571", single_12bit},

--- 24 unchanged lines hidden ---