Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

iio:ad5064: Add support for ltc2633 and similar devices

The Linear Technology LTC2631, LTC2633 and LTC2635 are very similar
to the AD5064 device, in particular the LTC2627.

This patch adds support for those devices. Only the LTC2633 has been
tested, which is the 2-channel variant. The LTC2631 is the 1-channel,
and the LTC2635 the 4-channel version. The actual DAC resolution depends
on the exact chip type and can be 12, 10 or 8 bits, using the upper bits
so this has no effect on the register map. The internal reference is set
to 2.5V on "L" versions, and it's 4.096V for "H" versions.

Datasheets:
LTC2631: http://www.linear.com/docs/26553
LTC2633: http://www.linear.com/docs/39529
LTC2635: http://www.linear.com/docs/28754

Signed-off-by: Mike Looijmans <mike.looijmans@topic.nl>
Reviewed-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>

authored by

Mike Looijmans and committed by
Jonathan Cameron
b2d2d2bf e7215fe4

+71 -3
+2 -1
drivers/iio/dac/Kconfig
··· 13 13 AD5045, AD5064, AD5064-1, AD5065, AD5625, AD5625R, AD5627, AD5627R, 14 14 AD5628, AD5629R, AD5645R, AD5647R, AD5648, AD5665, AD5665R, AD5666, 15 15 AD5667, AD5667R, AD5668, AD5669R, LTC2606, LTC2607, LTC2609, LTC2616, 16 - LTC2617, LTC2619, LTC2626, LTC2627, LTC2629 Digital to Analog Converter. 16 + LTC2617, LTC2619, LTC2626, LTC2627, LTC2629, LTC2631, LTC2633, LTC2635 17 + Digital to Analog Converter. 17 18 18 19 To compile this driver as a module, choose M here: the 19 20 module will be called ad5064.
+69 -2
drivers/iio/dac/ad5064.c
··· 2 2 * AD5024, AD5025, AD5044, AD5045, AD5064, AD5064-1, AD5065, AD5625, AD5625R, 3 3 * AD5627, AD5627R, AD5628, AD5629R, AD5645R, AD5647R, AD5648, AD5665, AD5665R, 4 4 * AD5666, AD5667, AD5667R, AD5668, AD5669R, LTC2606, LTC2607, LTC2609, LTC2616, 5 - * LTC2617, LTC2619, LTC2626, LTC2627, LTC2629 Digital to analog converters 6 - * driver 5 + * LTC2617, LTC2619, LTC2626, LTC2627, LTC2629, LTC2631, LTC2633, LTC2635 6 + * Digital to analog converters driver 7 7 * 8 8 * Copyright 2011 Analog Devices Inc. 9 9 * ··· 168 168 ID_LTC2626, 169 169 ID_LTC2627, 170 170 ID_LTC2629, 171 + ID_LTC2631_L12, 172 + ID_LTC2631_H12, 173 + ID_LTC2631_L10, 174 + ID_LTC2631_H10, 175 + ID_LTC2631_L8, 176 + ID_LTC2631_H8, 177 + ID_LTC2633_L12, 178 + ID_LTC2633_H12, 179 + ID_LTC2633_L10, 180 + ID_LTC2633_H10, 181 + ID_LTC2633_L8, 182 + ID_LTC2633_H8, 183 + ID_LTC2635_L12, 184 + ID_LTC2635_H12, 185 + ID_LTC2635_L10, 186 + ID_LTC2635_H10, 187 + ID_LTC2635_L8, 188 + ID_LTC2635_H8, 171 189 }; 172 190 173 191 static int ad5064_write(struct ad5064_state *st, unsigned int cmd, ··· 443 425 static DECLARE_AD5064_CHANNELS(ltc2607_channels, 16, 0, ltc2617_ext_info); 444 426 static DECLARE_AD5064_CHANNELS(ltc2617_channels, 14, 2, ltc2617_ext_info); 445 427 static DECLARE_AD5064_CHANNELS(ltc2627_channels, 12, 4, ltc2617_ext_info); 428 + #define ltc2631_12_channels ltc2627_channels 429 + static DECLARE_AD5064_CHANNELS(ltc2631_10_channels, 10, 6, ltc2617_ext_info); 430 + static DECLARE_AD5064_CHANNELS(ltc2631_8_channels, 8, 8, ltc2617_ext_info); 431 + 432 + #define LTC2631_INFO(vref, pchannels, nchannels) \ 433 + { \ 434 + .shared_vref = true, \ 435 + .internal_vref = vref, \ 436 + .channels = pchannels, \ 437 + .num_channels = nchannels, \ 438 + .regmap_type = AD5064_REGMAP_LTC, \ 439 + } 440 + 446 441 447 442 static const struct ad5064_chip_info ad5064_chip_info_tbl[] = { 448 443 [ID_AD5024] = { ··· 755 724 .num_channels = 4, 756 725 .regmap_type = AD5064_REGMAP_LTC, 757 726 }, 727 + [ID_LTC2631_L12] = LTC2631_INFO(2500000, ltc2631_12_channels, 1), 728 + [ID_LTC2631_H12] = LTC2631_INFO(4096000, ltc2631_12_channels, 1), 729 + [ID_LTC2631_L10] = LTC2631_INFO(2500000, ltc2631_10_channels, 1), 730 + [ID_LTC2631_H10] = LTC2631_INFO(4096000, ltc2631_10_channels, 1), 731 + [ID_LTC2631_L8] = LTC2631_INFO(2500000, ltc2631_8_channels, 1), 732 + [ID_LTC2631_H8] = LTC2631_INFO(4096000, ltc2631_8_channels, 1), 733 + [ID_LTC2633_L12] = LTC2631_INFO(2500000, ltc2631_12_channels, 2), 734 + [ID_LTC2633_H12] = LTC2631_INFO(4096000, ltc2631_12_channels, 2), 735 + [ID_LTC2633_L10] = LTC2631_INFO(2500000, ltc2631_10_channels, 2), 736 + [ID_LTC2633_H10] = LTC2631_INFO(4096000, ltc2631_10_channels, 2), 737 + [ID_LTC2633_L8] = LTC2631_INFO(2500000, ltc2631_8_channels, 2), 738 + [ID_LTC2633_H8] = LTC2631_INFO(4096000, ltc2631_8_channels, 2), 739 + [ID_LTC2635_L12] = LTC2631_INFO(2500000, ltc2631_12_channels, 4), 740 + [ID_LTC2635_H12] = LTC2631_INFO(4096000, ltc2631_12_channels, 4), 741 + [ID_LTC2635_L10] = LTC2631_INFO(2500000, ltc2631_10_channels, 4), 742 + [ID_LTC2635_H10] = LTC2631_INFO(4096000, ltc2631_10_channels, 4), 743 + [ID_LTC2635_L8] = LTC2631_INFO(2500000, ltc2631_8_channels, 4), 744 + [ID_LTC2635_H8] = LTC2631_INFO(4096000, ltc2631_8_channels, 4), 758 745 }; 759 746 760 747 static inline unsigned int ad5064_num_vref(struct ad5064_state *st) ··· 1031 982 {"ltc2626", ID_LTC2626}, 1032 983 {"ltc2627", ID_LTC2627}, 1033 984 {"ltc2629", ID_LTC2629}, 985 + {"ltc2631-l12", ID_LTC2631_L12}, 986 + {"ltc2631-h12", ID_LTC2631_H12}, 987 + {"ltc2631-l10", ID_LTC2631_L10}, 988 + {"ltc2631-h10", ID_LTC2631_H10}, 989 + {"ltc2631-l8", ID_LTC2631_L8}, 990 + {"ltc2631-h8", ID_LTC2631_H8}, 991 + {"ltc2633-l12", ID_LTC2633_L12}, 992 + {"ltc2633-h12", ID_LTC2633_H12}, 993 + {"ltc2633-l10", ID_LTC2633_L10}, 994 + {"ltc2633-h10", ID_LTC2633_H10}, 995 + {"ltc2633-l8", ID_LTC2633_L8}, 996 + {"ltc2633-h8", ID_LTC2633_H8}, 997 + {"ltc2635-l12", ID_LTC2635_L12}, 998 + {"ltc2635-h12", ID_LTC2635_H12}, 999 + {"ltc2635-l10", ID_LTC2635_L10}, 1000 + {"ltc2635-h10", ID_LTC2635_H10}, 1001 + {"ltc2635-l8", ID_LTC2635_L8}, 1002 + {"ltc2635-h8", ID_LTC2635_H8}, 1034 1003 {} 1035 1004 }; 1036 1005 MODULE_DEVICE_TABLE(i2c, ad5064_i2c_ids);