Commit 8f6d6016 authored by Adrian Fiergolski's avatar Adrian Fiergolski Committed by Peter Rosin

i2c: mux: pca954x: add support for NXP PCA984x family

This patch extends the current i2c-mux-pca954x driver and adds support for
a newer PCA984x family of the I2C switches and multiplexers from NXP.
Signed-off-by: default avatarAdrian Fiergolski <adrian.fiergolski@cern.ch>
Reviewed-by: default avatarRob Herring <robh@kernel.org>
Signed-off-by: default avatarPeter Rosin <peda@axentia.se>
parent ae64f9bd
* NXP PCA954x I2C bus switch * NXP PCA954x I2C bus switch
The driver supports NXP PCA954x and PCA984x I2C mux/switch devices.
Required Properties: Required Properties:
- compatible: Must contain one of the following. - compatible: Must contain one of the following.
"nxp,pca9540", "nxp,pca9542", "nxp,pca9543", "nxp,pca9544", "nxp,pca9540",
"nxp,pca9545", "nxp,pca9546", "nxp,pca9547", "nxp,pca9548" "nxp,pca9542",
"nxp,pca9543",
"nxp,pca9544",
"nxp,pca9545",
"nxp,pca9546", "nxp,pca9846",
"nxp,pca9547", "nxp,pca9847",
"nxp,pca9548", "nxp,pca9848",
"nxp,pca9849"
- reg: The I2C address of the device. - reg: The I2C address of the device.
......
...@@ -64,11 +64,11 @@ config I2C_MUX_PCA9541 ...@@ -64,11 +64,11 @@ config I2C_MUX_PCA9541
will be called i2c-mux-pca9541. will be called i2c-mux-pca9541.
config I2C_MUX_PCA954x config I2C_MUX_PCA954x
tristate "Philips PCA954x I2C Mux/switches" tristate "NXP PCA954x and PCA984x I2C Mux/switches"
depends on GPIOLIB || COMPILE_TEST depends on GPIOLIB || COMPILE_TEST
help help
If you say yes here you get support for the Philips PCA954x If you say yes here you get support for the NXP PCA954x
I2C mux/switch devices. and PCA984x I2C mux/switch devices.
This driver can also be built as a module. If so, the module This driver can also be built as a module. If so, the module
will be called i2c-mux-pca954x. will be called i2c-mux-pca954x.
......
...@@ -4,11 +4,11 @@ ...@@ -4,11 +4,11 @@
* Copyright (c) 2008-2009 Rodolfo Giometti <giometti@linux.it> * Copyright (c) 2008-2009 Rodolfo Giometti <giometti@linux.it>
* Copyright (c) 2008-2009 Eurotech S.p.A. <info@eurotech.it> * Copyright (c) 2008-2009 Eurotech S.p.A. <info@eurotech.it>
* *
* This module supports the PCA954x series of I2C multiplexer/switch chips * This module supports the PCA954x and PCA954x series of I2C multiplexer/switch
* made by Philips Semiconductors. * chips made by NXP Semiconductors.
* This includes the: * This includes the:
* PCA9540, PCA9542, PCA9543, PCA9544, PCA9545, PCA9546, PCA9547 * PCA9540, PCA9542, PCA9543, PCA9544, PCA9545, PCA9546, PCA9547,
* and PCA9548. * PCA9548, PCA9846, PCA9847, PCA9848 and PCA9849.
* *
* These chips are all controlled via the I2C bus itself, and all have a * These chips are all controlled via the I2C bus itself, and all have a
* single 8-bit register. The upstream "parent" bus fans out to two, * single 8-bit register. The upstream "parent" bus fans out to two,
...@@ -63,6 +63,10 @@ enum pca_type { ...@@ -63,6 +63,10 @@ enum pca_type {
pca_9546, pca_9546,
pca_9547, pca_9547,
pca_9548, pca_9548,
pca_9846,
pca_9847,
pca_9848,
pca_9849,
}; };
struct chip_desc { struct chip_desc {
...@@ -129,6 +133,24 @@ static const struct chip_desc chips[] = { ...@@ -129,6 +133,24 @@ static const struct chip_desc chips[] = {
.nchans = 8, .nchans = 8,
.muxtype = pca954x_isswi, .muxtype = pca954x_isswi,
}, },
[pca_9846] = {
.nchans = 4,
.muxtype = pca954x_isswi,
},
[pca_9847] = {
.nchans = 8,
.enable = 0x8,
.muxtype = pca954x_ismux,
},
[pca_9848] = {
.nchans = 8,
.muxtype = pca954x_isswi,
},
[pca_9849] = {
.nchans = 4,
.enable = 0x4,
.muxtype = pca954x_ismux,
},
}; };
static const struct i2c_device_id pca954x_id[] = { static const struct i2c_device_id pca954x_id[] = {
...@@ -140,6 +162,10 @@ static const struct i2c_device_id pca954x_id[] = { ...@@ -140,6 +162,10 @@ static const struct i2c_device_id pca954x_id[] = {
{ "pca9546", pca_9546 }, { "pca9546", pca_9546 },
{ "pca9547", pca_9547 }, { "pca9547", pca_9547 },
{ "pca9548", pca_9548 }, { "pca9548", pca_9548 },
{ "pca9846", pca_9846 },
{ "pca9847", pca_9847 },
{ "pca9848", pca_9848 },
{ "pca9849", pca_9849 },
{ } { }
}; };
MODULE_DEVICE_TABLE(i2c, pca954x_id); MODULE_DEVICE_TABLE(i2c, pca954x_id);
...@@ -154,6 +180,10 @@ static const struct of_device_id pca954x_of_match[] = { ...@@ -154,6 +180,10 @@ static const struct of_device_id pca954x_of_match[] = {
{ .compatible = "nxp,pca9546", .data = &chips[pca_9546] }, { .compatible = "nxp,pca9546", .data = &chips[pca_9546] },
{ .compatible = "nxp,pca9547", .data = &chips[pca_9547] }, { .compatible = "nxp,pca9547", .data = &chips[pca_9547] },
{ .compatible = "nxp,pca9548", .data = &chips[pca_9548] }, { .compatible = "nxp,pca9548", .data = &chips[pca_9548] },
{ .compatible = "nxp,pca9846", .data = &chips[pca_9846] },
{ .compatible = "nxp,pca9847", .data = &chips[pca_9847] },
{ .compatible = "nxp,pca9848", .data = &chips[pca_9848] },
{ .compatible = "nxp,pca9849", .data = &chips[pca_9849] },
{} {}
}; };
MODULE_DEVICE_TABLE(of, pca954x_of_match); MODULE_DEVICE_TABLE(of, pca954x_of_match);
......
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