From: Adrian Fiergolski <adrian.fiergolski@cern.ch>
To: linux-i2c@vger.kernel.org
Cc: peda@axentia.se, Adrian Fiergolski <adrian.fiergolski@cern.ch>
Subject: [PATCH v4] i2c: Add support for NXP PCA984x family.
Date: Wed, 13 Dec 2017 17:12:23 +0100 [thread overview]
Message-ID: <20171213161223.23832-1-adrian.fiergolski@cern.ch> (raw)
In-Reply-To: <5cbfd97a-146b-8851-c63a-f2f60da33f5b@axentia.se>
This patch exetends 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: Adrian Fiergolski <adrian.fiergolski@cern.ch>
---
As suggested by Peter, for a moment the device_id checks have been removed
and need to wait for a support in the I2C core.
.../devicetree/bindings/i2c/i2c-mux-pca954x.txt | 5 ++-
drivers/i2c/muxes/Kconfig | 6 ++--
drivers/i2c/muxes/i2c-mux-pca954x.c | 41 +++++++++++++++++++---
3 files changed, 43 insertions(+), 9 deletions(-)
diff --git a/Documentation/devicetree/bindings/i2c/i2c-mux-pca954x.txt b/Documentation/devicetree/bindings/i2c/i2c-mux-pca954x.txt
index aa097045a10e..b428bc0d81b1 100644
--- a/Documentation/devicetree/bindings/i2c/i2c-mux-pca954x.txt
+++ b/Documentation/devicetree/bindings/i2c/i2c-mux-pca954x.txt
@@ -1,10 +1,13 @@
* NXP PCA954x I2C bus switch
+The driver supports NXP PCA954x and PCA984x I2C mux/switch devices.
+
Required Properties:
- compatible: Must contain one of the following.
"nxp,pca9540", "nxp,pca9542", "nxp,pca9543", "nxp,pca9544",
- "nxp,pca9545", "nxp,pca9546", "nxp,pca9547", "nxp,pca9548"
+ "nxp,pca9545", "nxp,pca9546", "nxp,pca9547", "nxp,pca9548",
+ "nxp,pca9846", "nxp,pca9847", "nxp,pca9848", "nxp,pca9849"
- reg: The I2C address of the device.
diff --git a/drivers/i2c/muxes/Kconfig b/drivers/i2c/muxes/Kconfig
index 0f5c8fc36625..23cc41866a91 100644
--- a/drivers/i2c/muxes/Kconfig
+++ b/drivers/i2c/muxes/Kconfig
@@ -64,11 +64,11 @@ config I2C_MUX_PCA9541
will be called i2c-mux-pca9541.
config I2C_MUX_PCA954x
- tristate "Philips PCA954x I2C Mux/switches"
+ tristate "NXP PCA954x I2C Mux/switches"
depends on GPIOLIB || COMPILE_TEST
help
- If you say yes here you get support for the Philips PCA954x
- I2C mux/switch devices.
+ If you say yes here you get support for the NXP PCA954x
+ and PCA984x I2C mux/switch devices.
This driver can also be built as a module. If so, the module
will be called i2c-mux-pca954x.
diff --git a/drivers/i2c/muxes/i2c-mux-pca954x.c b/drivers/i2c/muxes/i2c-mux-pca954x.c
index 2ca068d8b92d..b4a41d013538 100644
--- a/drivers/i2c/muxes/i2c-mux-pca954x.c
+++ b/drivers/i2c/muxes/i2c-mux-pca954x.c
@@ -1,14 +1,15 @@
/*
* I2C multiplexer
*
+ * Copyright (c) 2017 Adrian Fiergolski <Adrian.Fiergolski@cern.ch>
* Copyright (c) 2008-2009 Rodolfo Giometti <giometti@linux.it>
* Copyright (c) 2008-2009 Eurotech S.p.A. <info@eurotech.it>
*
- * This module supports the PCA954x series of I2C multiplexer/switch chips
- * made by Philips Semiconductors.
+ * This module supports the PCA954x and PCA954x series of I2C multiplexer/switch
+ * chips made by NXP Semiconductors.
* This includes the:
- * PCA9540, PCA9542, PCA9543, PCA9544, PCA9545, PCA9546, PCA9547
- * and PCA9548.
+ * PCA9540, PCA9542, PCA9543, PCA9544, PCA9545, PCA9546, PCA9547,
+ * PCA9548, PCA9846, PCA9847, PCA9848 and PCA9849
*
* 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,
@@ -63,6 +64,10 @@ enum pca_type {
pca_9546,
pca_9547,
pca_9548,
+ pca_9846,
+ pca_9847,
+ pca_9848,
+ pca_9849,
};
struct chip_desc {
@@ -129,6 +134,22 @@ static const struct chip_desc chips[] = {
.nchans = 8,
.muxtype = pca954x_isswi,
},
+ [pca_9846] = {
+ .nchans = 4,
+ .muxtype = pca954x_isswi,
+ },
+ [pca_9847] = {
+ .nchans = 8,
+ .muxtype = pca954x_ismux,
+ },
+ [pca_9848] = {
+ .nchans = 8,
+ .muxtype = pca954x_isswi,
+ },
+ [pca_9849] = {
+ .nchans = 4,
+ .muxtype = pca954x_ismux,
+ },
};
static const struct i2c_device_id pca954x_id[] = {
@@ -140,6 +161,10 @@ static const struct i2c_device_id pca954x_id[] = {
{ "pca9546", pca_9546 },
{ "pca9547", pca_9547 },
{ "pca9548", pca_9548 },
+ { "pca9846", pca_9846 },
+ { "pca9847", pca_9847 },
+ { "pca9848", pca_9848 },
+ { "pca9849", pca_9849 },
{ }
};
MODULE_DEVICE_TABLE(i2c, pca954x_id);
@@ -154,6 +179,10 @@ static const struct of_device_id pca954x_of_match[] = {
{ .compatible = "nxp,pca9546", .data = &chips[pca_9546] },
{ .compatible = "nxp,pca9547", .data = &chips[pca_9547] },
{ .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);
@@ -339,7 +368,8 @@ static int pca954x_probe(struct i2c_client *client,
if (IS_ERR(gpio))
return PTR_ERR(gpio);
- /* Write the mux register at addr to verify
+ /*
+ * Write the mux register at addr to verify
* that the mux is in fact present. This also
* initializes the mux to disconnected state.
*/
@@ -443,6 +473,7 @@ static struct i2c_driver pca954x_driver = {
module_i2c_driver(pca954x_driver);
+MODULE_AUTHOR("Adrian Fiergolski <Adrian.Fiergolski@cern.ch>");
MODULE_AUTHOR("Rodolfo Giometti <giometti@linux.it>");
MODULE_DESCRIPTION("PCA954x I2C mux/switch driver");
MODULE_LICENSE("GPL v2");
--
2.14.1
next prev parent reply other threads:[~2017-12-13 16:12 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-11 11:10 [PATCH] i2c: Add support for NXP PCA984x family Adrian Fiergolski
2017-12-11 11:25 ` Rodolfo Giometti
2017-12-11 12:51 ` Peter Rosin
2017-12-11 13:15 ` Adrian Fiergolski
2017-12-11 13:26 ` Peter Rosin
2017-12-11 13:29 ` Rodolfo Giometti
2017-12-11 14:27 ` [PATCH v2] " Adrian Fiergolski
2017-12-11 14:59 ` Peter Rosin
2017-12-11 15:07 ` Rodolfo Giometti
2017-12-11 16:58 ` [PATCH v3] " Adrian Fiergolski
2017-12-11 19:14 ` Peter Rosin
2017-12-12 12:06 ` Adrian Fiergolski
2017-12-12 15:25 ` Peter Rosin
2017-12-12 17:14 ` Adrian Fiergolski
2017-12-12 19:03 ` Peter Rosin
2017-12-12 22:05 ` Wolfram Sang
2017-12-13 17:17 ` Adrian Fiergolski
2017-12-14 0:30 ` Wolfram Sang
2017-12-13 8:47 ` Adrian Fiergolski
2017-12-13 9:39 ` Peter Rosin
2017-12-13 10:02 ` Adrian Fiergolski
2017-12-13 16:12 ` Adrian Fiergolski [this message]
2017-12-13 16:56 ` [PATCH v4] " Wolfram Sang
2017-12-15 9:46 ` Rodolfo Giometti
2017-12-13 18:26 ` Peter Rosin
2017-12-14 9:54 ` Peter Rosin
[not found] ` <990e4a1f-a9ac-c899-0075-ae3211ff9475-koto5C5qi+TLoDKTGw+V6w@public.gmane.org>
2017-12-14 11:20 ` [PATCH v5] " Adrian Fiergolski
[not found] ` <20171214112003.13701-1-adrian.fiergolski-vJEk5272eHo@public.gmane.org>
2017-12-14 21:22 ` Peter Rosin
2017-12-18 17:45 ` [PATCH v6] " Adrian Fiergolski
2017-12-20 18:27 ` Rob Herring
2017-12-25 21:26 ` [PATCH v7] " Adrian Fiergolski
[not found] ` <20171225212646.8062-1-adrian.fiergolski-vJEk5272eHo@public.gmane.org>
2017-12-26 17:58 ` Rob Herring
2017-12-28 23:31 ` Peter Rosin
2017-12-15 10:40 ` [PATCH v5] " Peter Rosin
2017-12-12 19:03 ` [PATCH v3] " Peter Rosin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20171213161223.23832-1-adrian.fiergolski@cern.ch \
--to=adrian.fiergolski@cern.ch \
--cc=linux-i2c@vger.kernel.org \
--cc=peda@axentia.se \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.