iio: dac: ltc2632: add support for LTC2636 family
The only difference between LTC2632 and LTC2636 is that the former has two DAC channels while the latter has eight. Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
f243d0f0bd
commit
9f15a4a0ad
@ -132,11 +132,12 @@ config LTC1660
|
||||
module will be called ltc1660.
|
||||
|
||||
config LTC2632
|
||||
tristate "Linear Technology LTC2632-12/10/8 DAC spi driver"
|
||||
tristate "Linear Technology LTC2632-12/10/8 and LTC2636-12/10/8 DAC spi driver"
|
||||
depends on SPI
|
||||
help
|
||||
Say yes here to build support for Linear Technology
|
||||
LTC2632-12, LTC2632-10, LTC2632-8 converters (DAC).
|
||||
LTC2632-12, LTC2632-10, LTC2632-8, LTC2636-12, LTC2636-10 and
|
||||
LTC2636-8 converters (DAC).
|
||||
|
||||
To compile this driver as a module, choose M here: the
|
||||
module will be called ltc2632.
|
||||
|
@ -12,8 +12,6 @@
|
||||
#include <linux/iio/iio.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
|
||||
#define LTC2632_DAC_CHANNELS 2
|
||||
|
||||
#define LTC2632_ADDR_DAC0 0x0
|
||||
#define LTC2632_ADDR_DAC1 0x1
|
||||
|
||||
@ -33,6 +31,7 @@
|
||||
*/
|
||||
struct ltc2632_chip_info {
|
||||
const struct iio_chan_spec *channels;
|
||||
const size_t num_channels;
|
||||
const int vref_mv;
|
||||
};
|
||||
|
||||
@ -57,6 +56,12 @@ enum ltc2632_supported_device_ids {
|
||||
ID_LTC2632H12,
|
||||
ID_LTC2632H10,
|
||||
ID_LTC2632H8,
|
||||
ID_LTC2636L12,
|
||||
ID_LTC2636L10,
|
||||
ID_LTC2636L8,
|
||||
ID_LTC2636H12,
|
||||
ID_LTC2636H10,
|
||||
ID_LTC2636H8,
|
||||
};
|
||||
|
||||
static int ltc2632_spi_write(struct spi_device *spi,
|
||||
@ -190,6 +195,12 @@ static const struct iio_chan_spec_ext_info ltc2632_ext_info[] = {
|
||||
const struct iio_chan_spec _name ## _channels[] = { \
|
||||
LTC2632_CHANNEL(0, _bits), \
|
||||
LTC2632_CHANNEL(1, _bits), \
|
||||
LTC2632_CHANNEL(2, _bits), \
|
||||
LTC2632_CHANNEL(3, _bits), \
|
||||
LTC2632_CHANNEL(4, _bits), \
|
||||
LTC2632_CHANNEL(5, _bits), \
|
||||
LTC2632_CHANNEL(6, _bits), \
|
||||
LTC2632_CHANNEL(7, _bits), \
|
||||
}
|
||||
|
||||
static DECLARE_LTC2632_CHANNELS(ltc2632x12, 12);
|
||||
@ -199,26 +210,62 @@ static DECLARE_LTC2632_CHANNELS(ltc2632x8, 8);
|
||||
static const struct ltc2632_chip_info ltc2632_chip_info_tbl[] = {
|
||||
[ID_LTC2632L12] = {
|
||||
.channels = ltc2632x12_channels,
|
||||
.num_channels = 2,
|
||||
.vref_mv = 2500,
|
||||
},
|
||||
[ID_LTC2632L10] = {
|
||||
.channels = ltc2632x10_channels,
|
||||
.num_channels = 2,
|
||||
.vref_mv = 2500,
|
||||
},
|
||||
[ID_LTC2632L8] = {
|
||||
.channels = ltc2632x8_channels,
|
||||
.num_channels = 2,
|
||||
.vref_mv = 2500,
|
||||
},
|
||||
[ID_LTC2632H12] = {
|
||||
.channels = ltc2632x12_channels,
|
||||
.num_channels = 2,
|
||||
.vref_mv = 4096,
|
||||
},
|
||||
[ID_LTC2632H10] = {
|
||||
.channels = ltc2632x10_channels,
|
||||
.num_channels = 2,
|
||||
.vref_mv = 4096,
|
||||
},
|
||||
[ID_LTC2632H8] = {
|
||||
.channels = ltc2632x8_channels,
|
||||
.num_channels = 2,
|
||||
.vref_mv = 4096,
|
||||
},
|
||||
[ID_LTC2636L12] = {
|
||||
.channels = ltc2632x12_channels,
|
||||
.num_channels = 8,
|
||||
.vref_mv = 2500,
|
||||
},
|
||||
[ID_LTC2636L10] = {
|
||||
.channels = ltc2632x10_channels,
|
||||
.num_channels = 8,
|
||||
.vref_mv = 2500,
|
||||
},
|
||||
[ID_LTC2636L8] = {
|
||||
.channels = ltc2632x8_channels,
|
||||
.num_channels = 8,
|
||||
.vref_mv = 2500,
|
||||
},
|
||||
[ID_LTC2636H12] = {
|
||||
.channels = ltc2632x12_channels,
|
||||
.num_channels = 8,
|
||||
.vref_mv = 4096,
|
||||
},
|
||||
[ID_LTC2636H10] = {
|
||||
.channels = ltc2632x10_channels,
|
||||
.num_channels = 8,
|
||||
.vref_mv = 4096,
|
||||
},
|
||||
[ID_LTC2636H8] = {
|
||||
.channels = ltc2632x8_channels,
|
||||
.num_channels = 8,
|
||||
.vref_mv = 4096,
|
||||
},
|
||||
};
|
||||
@ -287,7 +334,7 @@ static int ltc2632_probe(struct spi_device *spi)
|
||||
indio_dev->info = <c2632_info;
|
||||
indio_dev->modes = INDIO_DIRECT_MODE;
|
||||
indio_dev->channels = chip_info->channels;
|
||||
indio_dev->num_channels = LTC2632_DAC_CHANNELS;
|
||||
indio_dev->num_channels = chip_info->num_channels;
|
||||
|
||||
return iio_device_register(indio_dev);
|
||||
}
|
||||
@ -312,6 +359,12 @@ static const struct spi_device_id ltc2632_id[] = {
|
||||
{ "ltc2632-h12", (kernel_ulong_t)<c2632_chip_info_tbl[ID_LTC2632H12] },
|
||||
{ "ltc2632-h10", (kernel_ulong_t)<c2632_chip_info_tbl[ID_LTC2632H10] },
|
||||
{ "ltc2632-h8", (kernel_ulong_t)<c2632_chip_info_tbl[ID_LTC2632H8] },
|
||||
{ "ltc2636-l12", (kernel_ulong_t)<c2632_chip_info_tbl[ID_LTC2636L12] },
|
||||
{ "ltc2636-l10", (kernel_ulong_t)<c2632_chip_info_tbl[ID_LTC2636L10] },
|
||||
{ "ltc2636-l8", (kernel_ulong_t)<c2632_chip_info_tbl[ID_LTC2636L8] },
|
||||
{ "ltc2636-h12", (kernel_ulong_t)<c2632_chip_info_tbl[ID_LTC2636H12] },
|
||||
{ "ltc2636-h10", (kernel_ulong_t)<c2632_chip_info_tbl[ID_LTC2636H10] },
|
||||
{ "ltc2636-h8", (kernel_ulong_t)<c2632_chip_info_tbl[ID_LTC2636H8] },
|
||||
{}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(spi, ltc2632_id);
|
||||
@ -335,6 +388,24 @@ static const struct of_device_id ltc2632_of_match[] = {
|
||||
}, {
|
||||
.compatible = "lltc,ltc2632-h8",
|
||||
.data = <c2632_chip_info_tbl[ID_LTC2632H8]
|
||||
}, {
|
||||
.compatible = "lltc,ltc2636-l12",
|
||||
.data = <c2632_chip_info_tbl[ID_LTC2636L12]
|
||||
}, {
|
||||
.compatible = "lltc,ltc2636-l10",
|
||||
.data = <c2632_chip_info_tbl[ID_LTC2636L10]
|
||||
}, {
|
||||
.compatible = "lltc,ltc2636-l8",
|
||||
.data = <c2632_chip_info_tbl[ID_LTC2636L8]
|
||||
}, {
|
||||
.compatible = "lltc,ltc2636-h12",
|
||||
.data = <c2632_chip_info_tbl[ID_LTC2636H12]
|
||||
}, {
|
||||
.compatible = "lltc,ltc2636-h10",
|
||||
.data = <c2632_chip_info_tbl[ID_LTC2636H10]
|
||||
}, {
|
||||
.compatible = "lltc,ltc2636-h8",
|
||||
.data = <c2632_chip_info_tbl[ID_LTC2636H8]
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user