Message ID | 20200130131549.1170-3-u.kleine-koenig@pengutronix.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/3] dt-bindings: iio: ltc2632: expand for ltc2636 support | expand |
On Thu, 30 Jan 2020 14:15:49 +0100 Uwe Kleine-König <u.kleine-koenig@pengutronix.de> wrote: > 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> Looks good to me. I'd like to give a little time for Maxime and Silvan to have a look if they wish. If I seem to have lost this in a few weeks, give me a poke! Thanks, Jonathan > --- > drivers/iio/dac/Kconfig | 5 ++- > drivers/iio/dac/ltc2632.c | 77 +++++++++++++++++++++++++++++++++++++-- > 2 files changed, 77 insertions(+), 5 deletions(-) > > diff --git a/drivers/iio/dac/Kconfig b/drivers/iio/dac/Kconfig > index cc42219a64f7..33a35ebe4fed 100644 > --- a/drivers/iio/dac/Kconfig > +++ b/drivers/iio/dac/Kconfig > @@ -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. > diff --git a/drivers/iio/dac/ltc2632.c b/drivers/iio/dac/ltc2632.c > index 7ab92e178496..1e7ffa0f6071 100644 > --- a/drivers/iio/dac/ltc2632.c > +++ b/drivers/iio/dac/ltc2632.c > @@ -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] > }, > {} > };
On Sun, 2 Feb 2020 09:54:28 +0000 Jonathan Cameron <jic23@kernel.org> wrote: > On Thu, 30 Jan 2020 14:15:49 +0100 > Uwe Kleine-König <u.kleine-koenig@pengutronix.de> wrote: > > > 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> > Looks good to me. I'd like to give a little time for Maxime and Silvan > to have a look if they wish. > > If I seem to have lost this in a few weeks, give me a poke! Applied thanks, Jonathan > > Thanks, > > Jonathan > > > --- > > drivers/iio/dac/Kconfig | 5 ++- > > drivers/iio/dac/ltc2632.c | 77 +++++++++++++++++++++++++++++++++++++-- > > 2 files changed, 77 insertions(+), 5 deletions(-) > > > > diff --git a/drivers/iio/dac/Kconfig b/drivers/iio/dac/Kconfig > > index cc42219a64f7..33a35ebe4fed 100644 > > --- a/drivers/iio/dac/Kconfig > > +++ b/drivers/iio/dac/Kconfig > > @@ -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. > > diff --git a/drivers/iio/dac/ltc2632.c b/drivers/iio/dac/ltc2632.c > > index 7ab92e178496..1e7ffa0f6071 100644 > > --- a/drivers/iio/dac/ltc2632.c > > +++ b/drivers/iio/dac/ltc2632.c > > @@ -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] > > }, > > {} > > }; >
diff --git a/drivers/iio/dac/Kconfig b/drivers/iio/dac/Kconfig index cc42219a64f7..33a35ebe4fed 100644 --- a/drivers/iio/dac/Kconfig +++ b/drivers/iio/dac/Kconfig @@ -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. diff --git a/drivers/iio/dac/ltc2632.c b/drivers/iio/dac/ltc2632.c index 7ab92e178496..1e7ffa0f6071 100644 --- a/drivers/iio/dac/ltc2632.c +++ b/drivers/iio/dac/ltc2632.c @@ -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] }, {} };
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> --- drivers/iio/dac/Kconfig | 5 ++- drivers/iio/dac/ltc2632.c | 77 +++++++++++++++++++++++++++++++++++++-- 2 files changed, 77 insertions(+), 5 deletions(-)