Lines Matching +full:dac +full:- +full:mode +full:- +full:mask

1 // SPDX-License-Identifier: GPL-2.0
2 /* ti-dac7311.c - Texas Instruments 8/10/12-bit 1-channel DAC driver
37 * struct ti_dac_chip - TI DAC chip
61 return ti_dac->powerdown_mode + 1; in ti_dac_get_power()
68 u8 shift = 14 - ti_dac->resolution; in ti_dac_cmd()
70 ti_dac->buf[0] = (val << shift) & 0xFF; in ti_dac_cmd()
71 ti_dac->buf[1] = (power << 6) | (val >> (8 - shift)); in ti_dac_cmd()
72 return spi_write(ti_dac->spi, ti_dac->buf, 2); in ti_dac_cmd()
86 return ti_dac->powerdown_mode; in ti_dac_get_powerdown_mode()
91 unsigned int mode) in ti_dac_set_powerdown_mode() argument
95 ti_dac->powerdown_mode = mode; in ti_dac_set_powerdown_mode()
113 return sysfs_emit(buf, "%d\n", ti_dac->powerdown); in ti_dac_read_powerdown()
132 mutex_lock(&ti_dac->lock); in ti_dac_write_powerdown()
135 ti_dac->powerdown = powerdown; in ti_dac_write_powerdown()
136 mutex_unlock(&ti_dac->lock); in ti_dac_write_powerdown()
168 int *val, int *val2, long mask) in ti_dac_read_raw() argument
173 switch (mask) { in ti_dac_read_raw()
175 *val = ti_dac->val; in ti_dac_read_raw()
179 ret = regulator_get_voltage(ti_dac->vref); in ti_dac_read_raw()
184 *val2 = ti_dac->resolution; in ti_dac_read_raw()
188 return -EINVAL; in ti_dac_read_raw()
193 int val, int val2, long mask) in ti_dac_write_raw() argument
196 u8 power = ti_dac_get_power(ti_dac, ti_dac->powerdown); in ti_dac_write_raw()
199 switch (mask) { in ti_dac_write_raw()
201 if (ti_dac->val == val) in ti_dac_write_raw()
204 if (val >= (1 << ti_dac->resolution) || val < 0) in ti_dac_write_raw()
205 return -EINVAL; in ti_dac_write_raw()
207 if (ti_dac->powerdown) in ti_dac_write_raw()
208 return -EBUSY; in ti_dac_write_raw()
210 mutex_lock(&ti_dac->lock); in ti_dac_write_raw()
213 ti_dac->val = val; in ti_dac_write_raw()
214 mutex_unlock(&ti_dac->lock); in ti_dac_write_raw()
218 ret = -EINVAL; in ti_dac_write_raw()
225 struct iio_chan_spec const *chan, long mask) in ti_dac_write_raw_get_fmt() argument
238 struct device *dev = &spi->dev; in ti_dac_probe()
247 return -ENOMEM; in ti_dac_probe()
250 spi->mode = SPI_MODE_1; in ti_dac_probe()
251 spi->bits_per_word = 16; in ti_dac_probe()
254 indio_dev->info = &ti_dac_info; in ti_dac_probe()
255 indio_dev->name = spi_get_device_id(spi)->name; in ti_dac_probe()
256 indio_dev->modes = INDIO_DIRECT_MODE; in ti_dac_probe()
257 indio_dev->channels = ti_dac_channels; in ti_dac_probe()
261 ti_dac->powerdown = false; in ti_dac_probe()
262 ti_dac->spi = spi; in ti_dac_probe()
264 spec = &ti_dac_spec[spi_get_device_id(spi)->driver_data]; in ti_dac_probe()
265 indio_dev->num_channels = 1; in ti_dac_probe()
266 ti_dac->resolution = spec->resolution; in ti_dac_probe()
268 ti_dac->vref = devm_regulator_get(dev, "vref"); in ti_dac_probe()
269 if (IS_ERR(ti_dac->vref)) in ti_dac_probe()
270 return dev_err_probe(dev, PTR_ERR(ti_dac->vref), in ti_dac_probe()
273 ret = regulator_enable(ti_dac->vref); in ti_dac_probe()
279 mutex_init(&ti_dac->lock); in ti_dac_probe()
290 mutex_destroy(&ti_dac->lock); in ti_dac_probe()
291 regulator_disable(ti_dac->vref); in ti_dac_probe()
301 mutex_destroy(&ti_dac->lock); in ti_dac_remove()
302 regulator_disable(ti_dac->vref); in ti_dac_remove()
323 .name = "ti-dac7311",
332 MODULE_AUTHOR("Charles-Antoine Couret <charles-antoine.couret@essensium.com>");
333 MODULE_DESCRIPTION("Texas Instruments 8/10/12-bit 1-channel DAC driver");