Commit c74cba61 authored by Michael Hennerich's avatar Michael Hennerich Committed by Linus Torvalds

ad525x_dpot: add support for ADN2860 and AD528x pots

New parts supported:
	AD5280, AD5282, ADN2860
Signed-off-by: default avatarMichael Hennerich <michael.hennerich@analog.com>
Signed-off-by: default avatarMike Frysinger <vapier@gentoo.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent e3ae6847
...@@ -23,7 +23,8 @@ config AD525X_DPOT ...@@ -23,7 +23,8 @@ config AD525X_DPOT
AD5204, AD5206, AD5207, AD5231, AD5232, AD5233, AD5235, AD5204, AD5206, AD5207, AD5231, AD5232, AD5233, AD5235,
AD5260, AD5262, AD5263, AD5290, AD5291, AD5292, AD5293, AD5260, AD5262, AD5263, AD5290, AD5291, AD5292, AD5293,
AD7376, AD8400, AD8402, AD8403, ADN2850, AD5241, AD5242, AD7376, AD8400, AD8402, AD8403, ADN2850, AD5241, AD5242,
AD5243, AD5245, AD5246, AD5247, AD5248 AD5243, AD5245, AD5246, AD5247, AD5248, AD5280, AD5282,
ADN2860
digital potentiometer chips. digital potentiometer chips.
See Documentation/misc-devices/ad525x_dpot.txt for the See Documentation/misc-devices/ad525x_dpot.txt for the
......
...@@ -94,6 +94,9 @@ static const struct i2c_device_id ad_dpot_id[] = { ...@@ -94,6 +94,9 @@ static const struct i2c_device_id ad_dpot_id[] = {
{"ad5246", AD5246_ID}, {"ad5246", AD5246_ID},
{"ad5247", AD5247_ID}, {"ad5247", AD5247_ID},
{"ad5248", AD5248_ID}, {"ad5248", AD5248_ID},
{"ad5280", AD5280_ID},
{"ad5282", AD5282_ID},
{"adn2860", ADN2860_ID},
{} {}
}; };
MODULE_DEVICE_TABLE(i2c, ad_dpot_id); MODULE_DEVICE_TABLE(i2c, ad_dpot_id);
......
...@@ -44,6 +44,9 @@ ...@@ -44,6 +44,9 @@
* AD5243 2 256 2.5, 10, 50, 100 * AD5243 2 256 2.5, 10, 50, 100
* AD5248 2 256 2.5, 10, 50, 100 * AD5248 2 256 2.5, 10, 50, 100
* AD5242 2 256 20, 50, 200 * AD5242 2 256 20, 50, 200
* AD5280 1 256 20, 50, 200
* AD5282 2 256 20, 50, 200
* ADN2860 3 512 25, 250
* *
* See Documentation/misc-devices/ad525x_dpot.txt for more info. * See Documentation/misc-devices/ad525x_dpot.txt for more info.
* *
...@@ -154,6 +157,8 @@ static s32 dpot_read_i2c(struct dpot_data *dpot, u8 reg) ...@@ -154,6 +157,8 @@ static s32 dpot_read_i2c(struct dpot_data *dpot, u8 reg)
case DPOT_UID(AD5242_ID): case DPOT_UID(AD5242_ID):
case DPOT_UID(AD5243_ID): case DPOT_UID(AD5243_ID):
case DPOT_UID(AD5248_ID): case DPOT_UID(AD5248_ID):
case DPOT_UID(AD5280_ID):
case DPOT_UID(AD5282_ID):
ctrl = ((reg & DPOT_RDAC_MASK) == DPOT_RDAC0) ? ctrl = ((reg & DPOT_RDAC_MASK) == DPOT_RDAC0) ?
0 : DPOT_AD5291_RDAC_AB; 0 : DPOT_AD5291_RDAC_AB;
return dpot_read_r8d8(dpot, ctrl); return dpot_read_r8d8(dpot, ctrl);
...@@ -250,21 +255,22 @@ static s32 dpot_write_i2c(struct dpot_data *dpot, u8 reg, u16 value) ...@@ -250,21 +255,22 @@ static s32 dpot_write_i2c(struct dpot_data *dpot, u8 reg, u16 value)
case DPOT_UID(AD5242_ID): case DPOT_UID(AD5242_ID):
case DPOT_UID(AD5243_ID): case DPOT_UID(AD5243_ID):
case DPOT_UID(AD5248_ID): case DPOT_UID(AD5248_ID):
ctrl = ((reg & DPOT_RDAC_MASK) == DPOT_RDAC0) ? 0 : DPOT_AD5291_RDAC_AB; case DPOT_UID(AD5280_ID):
case DPOT_UID(AD5282_ID):
ctrl = ((reg & DPOT_RDAC_MASK) == DPOT_RDAC0) ?
0 : DPOT_AD5291_RDAC_AB;
return dpot_write_r8d8(dpot, ctrl, value); return dpot_write_r8d8(dpot, ctrl, value);
break; break;
default: default:
if (reg & DPOT_ADDR_CMD) if (reg & DPOT_ADDR_CMD)
return dpot_write_d8(dpot, reg); return dpot_write_d8(dpot, reg);
if (dpot->max_pos > 256) if (dpot->max_pos > 256)
return dpot_write_r8d16(dpot, (reg & 0xF8) | return dpot_write_r8d16(dpot, (reg & 0xF8) |
((reg & 0x7) << 1), value); ((reg & 0x7) << 1), value);
else else
/* All other registers require instruction + data bytes */ /* All other registers require instruction + data bytes */
return dpot_write_r8d8(dpot, reg, value); return dpot_write_r8d8(dpot, reg, value);
} }
} }
......
...@@ -112,8 +112,10 @@ enum dpot_devid { ...@@ -112,8 +112,10 @@ enum dpot_devid {
AD5246_ID = DPOT_CONF(F_RDACS_RW, BRDAC0, 7, 37), AD5246_ID = DPOT_CONF(F_RDACS_RW, BRDAC0, 7, 37),
AD5247_ID = DPOT_CONF(F_RDACS_RW, BRDAC0, 7, 38), AD5247_ID = DPOT_CONF(F_RDACS_RW, BRDAC0, 7, 38),
AD5248_ID = DPOT_CONF(F_RDACS_RW, BRDAC0 | BRDAC1, 8, 39), AD5248_ID = DPOT_CONF(F_RDACS_RW, BRDAC0 | BRDAC1, 8, 39),
AD5280_ID = DPOT_CONF(F_RDACS_RW, BRDAC0, 8, 40),
AD5282_ID = DPOT_CONF(F_RDACS_RW, BRDAC0 | BRDAC1, 8, 41),
ADN2860_ID = DPOT_CONF(F_RDACS_RW_TOL | F_CMD_INC,
BRDAC0 | BRDAC1 | BRDAC2, 9, 42),
}; };
#define DPOT_RDAC0 0 #define DPOT_RDAC0 0
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment