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 --- |