Commit 294ea6f3 authored by Florian Vaussard's avatar Florian Vaussard Committed by Jonathan Cameron

iio: potentiometer: mcp4531: Add support for MCP454x, MCP456x, MCP464x and MCP466x

This patch adds support for MCP454x, MCP456x, MCP464x and MCP466x parts.
The main difference with currently supported parts (MCP453x and alike) is
the addition of a non-volatile memory in order to recall the wiper setting
at power-on. This feature is currently not supported and only the
volatile memory is used to set the wiper.
Signed-off-by: default avatarFlorian Vaussard <florian.vaussard@heig-vd.ch>
Acked-by: default avatarPeter Rosin <peda@axentia.se>
Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
parent 468c5620
...@@ -49,8 +49,10 @@ config MCP4531 ...@@ -49,8 +49,10 @@ config MCP4531
depends on I2C depends on I2C
help help
Say yes here to build support for the Microchip Say yes here to build support for the Microchip
MCP4531, MCP4532, MCP4551, MCP4552, MCP4531, MCP4532, MCP4541, MCP4542,
MCP4631, MCP4632, MCP4651, MCP4652 MCP4551, MCP4552, MCP4561, MCP4562,
MCP4631, MCP4632, MCP4641, MCP4642,
MCP4651, MCP4652, MCP4661, MCP4662
digital potentiomenter chips. digital potentiomenter chips.
To compile this driver as a module, choose M here: the To compile this driver as a module, choose M here: the
......
...@@ -8,12 +8,20 @@ ...@@ -8,12 +8,20 @@
* DEVID #Wipers #Positions Resistor Opts (kOhm) i2c address * DEVID #Wipers #Positions Resistor Opts (kOhm) i2c address
* mcp4531 1 129 5, 10, 50, 100 010111x * mcp4531 1 129 5, 10, 50, 100 010111x
* mcp4532 1 129 5, 10, 50, 100 01011xx * mcp4532 1 129 5, 10, 50, 100 01011xx
* mcp4541 1 129 5, 10, 50, 100 010111x
* mcp4542 1 129 5, 10, 50, 100 01011xx
* mcp4551 1 257 5, 10, 50, 100 010111x * mcp4551 1 257 5, 10, 50, 100 010111x
* mcp4552 1 257 5, 10, 50, 100 01011xx * mcp4552 1 257 5, 10, 50, 100 01011xx
* mcp4561 1 257 5, 10, 50, 100 010111x
* mcp4562 1 257 5, 10, 50, 100 01011xx
* mcp4631 2 129 5, 10, 50, 100 0101xxx * mcp4631 2 129 5, 10, 50, 100 0101xxx
* mcp4632 2 129 5, 10, 50, 100 01011xx * mcp4632 2 129 5, 10, 50, 100 01011xx
* mcp4641 2 129 5, 10, 50, 100 0101xxx
* mcp4642 2 129 5, 10, 50, 100 01011xx
* mcp4651 2 257 5, 10, 50, 100 0101xxx * mcp4651 2 257 5, 10, 50, 100 0101xxx
* mcp4652 2 257 5, 10, 50, 100 01011xx * mcp4652 2 257 5, 10, 50, 100 01011xx
* mcp4661 2 257 5, 10, 50, 100 0101xxx
* mcp4662 2 257 5, 10, 50, 100 01011xx
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published by * under the terms of the GNU General Public License version 2 as published by
...@@ -37,18 +45,34 @@ enum mcp4531_type { ...@@ -37,18 +45,34 @@ enum mcp4531_type {
MCP453x_103, MCP453x_103,
MCP453x_503, MCP453x_503,
MCP453x_104, MCP453x_104,
MCP454x_502,
MCP454x_103,
MCP454x_503,
MCP454x_104,
MCP455x_502, MCP455x_502,
MCP455x_103, MCP455x_103,
MCP455x_503, MCP455x_503,
MCP455x_104, MCP455x_104,
MCP456x_502,
MCP456x_103,
MCP456x_503,
MCP456x_104,
MCP463x_502, MCP463x_502,
MCP463x_103, MCP463x_103,
MCP463x_503, MCP463x_503,
MCP463x_104, MCP463x_104,
MCP464x_502,
MCP464x_103,
MCP464x_503,
MCP464x_104,
MCP465x_502, MCP465x_502,
MCP465x_103, MCP465x_103,
MCP465x_503, MCP465x_503,
MCP465x_104, MCP465x_104,
MCP466x_502,
MCP466x_103,
MCP466x_503,
MCP466x_104,
}; };
static const struct mcp4531_cfg mcp4531_cfg[] = { static const struct mcp4531_cfg mcp4531_cfg[] = {
...@@ -56,18 +80,34 @@ static const struct mcp4531_cfg mcp4531_cfg[] = { ...@@ -56,18 +80,34 @@ static const struct mcp4531_cfg mcp4531_cfg[] = {
[MCP453x_103] = { .wipers = 1, .max_pos = 128, .kohms = 10, }, [MCP453x_103] = { .wipers = 1, .max_pos = 128, .kohms = 10, },
[MCP453x_503] = { .wipers = 1, .max_pos = 128, .kohms = 50, }, [MCP453x_503] = { .wipers = 1, .max_pos = 128, .kohms = 50, },
[MCP453x_104] = { .wipers = 1, .max_pos = 128, .kohms = 100, }, [MCP453x_104] = { .wipers = 1, .max_pos = 128, .kohms = 100, },
[MCP454x_502] = { .wipers = 1, .max_pos = 128, .kohms = 5, },
[MCP454x_103] = { .wipers = 1, .max_pos = 128, .kohms = 10, },
[MCP454x_503] = { .wipers = 1, .max_pos = 128, .kohms = 50, },
[MCP454x_104] = { .wipers = 1, .max_pos = 128, .kohms = 100, },
[MCP455x_502] = { .wipers = 1, .max_pos = 256, .kohms = 5, }, [MCP455x_502] = { .wipers = 1, .max_pos = 256, .kohms = 5, },
[MCP455x_103] = { .wipers = 1, .max_pos = 256, .kohms = 10, }, [MCP455x_103] = { .wipers = 1, .max_pos = 256, .kohms = 10, },
[MCP455x_503] = { .wipers = 1, .max_pos = 256, .kohms = 50, }, [MCP455x_503] = { .wipers = 1, .max_pos = 256, .kohms = 50, },
[MCP455x_104] = { .wipers = 1, .max_pos = 256, .kohms = 100, }, [MCP455x_104] = { .wipers = 1, .max_pos = 256, .kohms = 100, },
[MCP456x_502] = { .wipers = 1, .max_pos = 256, .kohms = 5, },
[MCP456x_103] = { .wipers = 1, .max_pos = 256, .kohms = 10, },
[MCP456x_503] = { .wipers = 1, .max_pos = 256, .kohms = 50, },
[MCP456x_104] = { .wipers = 1, .max_pos = 256, .kohms = 100, },
[MCP463x_502] = { .wipers = 2, .max_pos = 128, .kohms = 5, }, [MCP463x_502] = { .wipers = 2, .max_pos = 128, .kohms = 5, },
[MCP463x_103] = { .wipers = 2, .max_pos = 128, .kohms = 10, }, [MCP463x_103] = { .wipers = 2, .max_pos = 128, .kohms = 10, },
[MCP463x_503] = { .wipers = 2, .max_pos = 128, .kohms = 50, }, [MCP463x_503] = { .wipers = 2, .max_pos = 128, .kohms = 50, },
[MCP463x_104] = { .wipers = 2, .max_pos = 128, .kohms = 100, }, [MCP463x_104] = { .wipers = 2, .max_pos = 128, .kohms = 100, },
[MCP464x_502] = { .wipers = 2, .max_pos = 128, .kohms = 5, },
[MCP464x_103] = { .wipers = 2, .max_pos = 128, .kohms = 10, },
[MCP464x_503] = { .wipers = 2, .max_pos = 128, .kohms = 50, },
[MCP464x_104] = { .wipers = 2, .max_pos = 128, .kohms = 100, },
[MCP465x_502] = { .wipers = 2, .max_pos = 256, .kohms = 5, }, [MCP465x_502] = { .wipers = 2, .max_pos = 256, .kohms = 5, },
[MCP465x_103] = { .wipers = 2, .max_pos = 256, .kohms = 10, }, [MCP465x_103] = { .wipers = 2, .max_pos = 256, .kohms = 10, },
[MCP465x_503] = { .wipers = 2, .max_pos = 256, .kohms = 50, }, [MCP465x_503] = { .wipers = 2, .max_pos = 256, .kohms = 50, },
[MCP465x_104] = { .wipers = 2, .max_pos = 256, .kohms = 100, }, [MCP465x_104] = { .wipers = 2, .max_pos = 256, .kohms = 100, },
[MCP466x_502] = { .wipers = 2, .max_pos = 256, .kohms = 5, },
[MCP466x_103] = { .wipers = 2, .max_pos = 256, .kohms = 10, },
[MCP466x_503] = { .wipers = 2, .max_pos = 256, .kohms = 50, },
[MCP466x_104] = { .wipers = 2, .max_pos = 256, .kohms = 100, },
}; };
#define MCP4531_WRITE (0 << 2) #define MCP4531_WRITE (0 << 2)
...@@ -187,6 +227,14 @@ static const struct i2c_device_id mcp4531_id[] = { ...@@ -187,6 +227,14 @@ static const struct i2c_device_id mcp4531_id[] = {
{ "mcp4532-103", MCP453x_103 }, { "mcp4532-103", MCP453x_103 },
{ "mcp4532-503", MCP453x_503 }, { "mcp4532-503", MCP453x_503 },
{ "mcp4532-104", MCP453x_104 }, { "mcp4532-104", MCP453x_104 },
{ "mcp4541-502", MCP454x_502 },
{ "mcp4541-103", MCP454x_103 },
{ "mcp4541-503", MCP454x_503 },
{ "mcp4541-104", MCP454x_104 },
{ "mcp4542-502", MCP454x_502 },
{ "mcp4542-103", MCP454x_103 },
{ "mcp4542-503", MCP454x_503 },
{ "mcp4542-104", MCP454x_104 },
{ "mcp4551-502", MCP455x_502 }, { "mcp4551-502", MCP455x_502 },
{ "mcp4551-103", MCP455x_103 }, { "mcp4551-103", MCP455x_103 },
{ "mcp4551-503", MCP455x_503 }, { "mcp4551-503", MCP455x_503 },
...@@ -195,6 +243,14 @@ static const struct i2c_device_id mcp4531_id[] = { ...@@ -195,6 +243,14 @@ static const struct i2c_device_id mcp4531_id[] = {
{ "mcp4552-103", MCP455x_103 }, { "mcp4552-103", MCP455x_103 },
{ "mcp4552-503", MCP455x_503 }, { "mcp4552-503", MCP455x_503 },
{ "mcp4552-104", MCP455x_104 }, { "mcp4552-104", MCP455x_104 },
{ "mcp4561-502", MCP456x_502 },
{ "mcp4561-103", MCP456x_103 },
{ "mcp4561-503", MCP456x_503 },
{ "mcp4561-104", MCP456x_104 },
{ "mcp4562-502", MCP456x_502 },
{ "mcp4562-103", MCP456x_103 },
{ "mcp4562-503", MCP456x_503 },
{ "mcp4562-104", MCP456x_104 },
{ "mcp4631-502", MCP463x_502 }, { "mcp4631-502", MCP463x_502 },
{ "mcp4631-103", MCP463x_103 }, { "mcp4631-103", MCP463x_103 },
{ "mcp4631-503", MCP463x_503 }, { "mcp4631-503", MCP463x_503 },
...@@ -203,6 +259,14 @@ static const struct i2c_device_id mcp4531_id[] = { ...@@ -203,6 +259,14 @@ static const struct i2c_device_id mcp4531_id[] = {
{ "mcp4632-103", MCP463x_103 }, { "mcp4632-103", MCP463x_103 },
{ "mcp4632-503", MCP463x_503 }, { "mcp4632-503", MCP463x_503 },
{ "mcp4632-104", MCP463x_104 }, { "mcp4632-104", MCP463x_104 },
{ "mcp4641-502", MCP464x_502 },
{ "mcp4641-103", MCP464x_103 },
{ "mcp4641-503", MCP464x_503 },
{ "mcp4641-104", MCP464x_104 },
{ "mcp4642-502", MCP464x_502 },
{ "mcp4642-103", MCP464x_103 },
{ "mcp4642-503", MCP464x_503 },
{ "mcp4642-104", MCP464x_104 },
{ "mcp4651-502", MCP465x_502 }, { "mcp4651-502", MCP465x_502 },
{ "mcp4651-103", MCP465x_103 }, { "mcp4651-103", MCP465x_103 },
{ "mcp4651-503", MCP465x_503 }, { "mcp4651-503", MCP465x_503 },
...@@ -211,6 +275,14 @@ static const struct i2c_device_id mcp4531_id[] = { ...@@ -211,6 +275,14 @@ static const struct i2c_device_id mcp4531_id[] = {
{ "mcp4652-103", MCP465x_103 }, { "mcp4652-103", MCP465x_103 },
{ "mcp4652-503", MCP465x_503 }, { "mcp4652-503", MCP465x_503 },
{ "mcp4652-104", MCP465x_104 }, { "mcp4652-104", MCP465x_104 },
{ "mcp4661-502", MCP466x_502 },
{ "mcp4661-103", MCP466x_103 },
{ "mcp4661-503", MCP466x_503 },
{ "mcp4661-104", MCP466x_104 },
{ "mcp4662-502", MCP466x_502 },
{ "mcp4662-103", MCP466x_103 },
{ "mcp4662-503", MCP466x_503 },
{ "mcp4662-104", MCP466x_104 },
{} {}
}; };
MODULE_DEVICE_TABLE(i2c, mcp4531_id); MODULE_DEVICE_TABLE(i2c, mcp4531_id);
......
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