Lines Matching +full:device +full:- +full:id +full:- +full:base

1 // SPDX-License-Identifier: GPL-2.0-only
3 * IIO driver for the Measurement Computing CIO-DAC
6 * This driver supports the following Measurement Computing devices: CIO-DAC16,
7 * CIO-DAC08, and PC104-DAC06.
10 #include <linux/device.h>
32 static unsigned int base[max_num_isa_dev(CIO_DAC_EXTENT)]; variable
34 module_param_hw_array(base, uint, ioport, &num_cio_dac, 0);
35 MODULE_PARM_DESC(base, "Measurement Computing CIO-DAC base addresses");
40 static bool cio_dac_precious_reg(struct device *dev, unsigned int reg) in cio_dac_precious_reg()
44 * the device, then no update occurs until a DAC register is read. in cio_dac_precious_reg()
59 * struct cio_dac_iio - IIO device private data structure
60 * @map: Regmap for the device
70 const unsigned int offset = chan->channel * CIO_DAC_CHANNEL_STRIDE; in cio_dac_read_raw()
75 return -EINVAL; in cio_dac_read_raw()
77 err = regmap_read(priv->map, CIO_DAC_BASE + offset, &dac_val); in cio_dac_read_raw()
90 const unsigned int offset = chan->channel * CIO_DAC_CHANNEL_STRIDE; in cio_dac_write_raw()
93 return -EINVAL; in cio_dac_write_raw()
95 /* DAC can only accept up to a 12-bit value */ in cio_dac_write_raw()
97 return -EINVAL; in cio_dac_write_raw()
99 return regmap_write(priv->map, CIO_DAC_BASE + offset, val); in cio_dac_write_raw()
114 static int cio_dac_probe(struct device *dev, unsigned int id) in cio_dac_probe() argument
122 return -ENOMEM; in cio_dac_probe()
124 if (!devm_request_region(dev, base[id], CIO_DAC_EXTENT, in cio_dac_probe()
126 dev_err(dev, "Unable to request port addresses (0x%X-0x%X)\n", in cio_dac_probe()
127 base[id], base[id] + CIO_DAC_EXTENT); in cio_dac_probe()
128 return -EBUSY; in cio_dac_probe()
131 regs = devm_ioport_map(dev, base[id], CIO_DAC_EXTENT); in cio_dac_probe()
133 return -ENOMEM; in cio_dac_probe()
136 priv->map = devm_regmap_init_mmio(dev, regs, &cio_dac_regmap_config); in cio_dac_probe()
137 if (IS_ERR(priv->map)) in cio_dac_probe()
138 return dev_err_probe(dev, PTR_ERR(priv->map), in cio_dac_probe()
141 indio_dev->info = &cio_dac_info; in cio_dac_probe()
142 indio_dev->modes = INDIO_DIRECT_MODE; in cio_dac_probe()
143 indio_dev->channels = cio_dac_channels; in cio_dac_probe()
144 indio_dev->num_channels = CIO_DAC_NUM_CHAN; in cio_dac_probe()
145 indio_dev->name = dev_name(dev); in cio_dac_probe()
153 .name = "cio-dac"
160 MODULE_DESCRIPTION("Measurement Computing CIO-DAC IIO driver");