All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 0/3] gpio: pca9570: add slg7xl45106 support
@ 2022-09-27 12:19 Shubhrajyoti Datta
  2022-09-27 12:19 ` [PATCH v4 1/3] dt-bindings: gpio: pca9570: Add compatible for slg7xl45106 Shubhrajyoti Datta
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Shubhrajyoti Datta @ 2022-09-27 12:19 UTC (permalink / raw)
  To: linux-gpio
  Cc: git, devicetree, krzysztof.kozlowski+dt, robh+dt, brgl, linus.walleij

Add SLG7XL45106 GPO expander
 
v2:
Use the platform data check instead of compatible
arrange alphabetically
rebase to the latest kernel

v3:
Reorder the p_data struct
Add ack

v4:
Resend as the v3 sent was doubled and mangled 

Shubhrajyoti Datta (3):
  dt-bindings: gpio: pca9570: Add compatible for slg7xl45106
  gpio: pca9570: add a platform data structure
  gpio: pca9570: add slg7xl45106 support

 .../bindings/gpio/gpio-pca9570.yaml           |  1 +
 drivers/gpio/gpio-pca9570.c                   | 49 ++++++++++++++++---
 2 files changed, 44 insertions(+), 6 deletions(-)

-- 
2.17.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH v4 1/3] dt-bindings: gpio: pca9570: Add compatible for slg7xl45106
  2022-09-27 12:19 [PATCH v4 0/3] gpio: pca9570: add slg7xl45106 support Shubhrajyoti Datta
@ 2022-09-27 12:19 ` Shubhrajyoti Datta
  2022-09-27 12:19 ` [PATCH v4 2/3] gpio: pca9570: add a platform data structure Shubhrajyoti Datta
  2022-09-27 12:19 ` [PATCH v3 3/3] gpio: pca9570: add slg7xl45106 support Shubhrajyoti Datta
  2 siblings, 0 replies; 4+ messages in thread
From: Shubhrajyoti Datta @ 2022-09-27 12:19 UTC (permalink / raw)
  To: linux-gpio
  Cc: git, devicetree, krzysztof.kozlowski+dt, robh+dt, brgl, linus.walleij

This patch adds compatible string for the SLG7XL45106,
I2C GPO expander.

Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Signed-off-by: Shubhrajyoti Datta <shubhrajyoti.datta@amd.com>
---
v2:
add alphabetically
v3:
Add ack

 Documentation/devicetree/bindings/gpio/gpio-pca9570.yaml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/gpio/gpio-pca9570.yaml b/Documentation/devicetree/bindings/gpio/gpio-pca9570.yaml
index 1acaa0a3d35a..48bf414aa50e 100644
--- a/Documentation/devicetree/bindings/gpio/gpio-pca9570.yaml
+++ b/Documentation/devicetree/bindings/gpio/gpio-pca9570.yaml
@@ -12,6 +12,7 @@ maintainers:
 properties:
   compatible:
     enum:
+      - dlg,slg7xl45106
       - nxp,pca9570
       - nxp,pca9571
 
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v4 2/3] gpio: pca9570: add a platform data structure
  2022-09-27 12:19 [PATCH v4 0/3] gpio: pca9570: add slg7xl45106 support Shubhrajyoti Datta
  2022-09-27 12:19 ` [PATCH v4 1/3] dt-bindings: gpio: pca9570: Add compatible for slg7xl45106 Shubhrajyoti Datta
@ 2022-09-27 12:19 ` Shubhrajyoti Datta
  2022-09-27 12:19 ` [PATCH v3 3/3] gpio: pca9570: add slg7xl45106 support Shubhrajyoti Datta
  2 siblings, 0 replies; 4+ messages in thread
From: Shubhrajyoti Datta @ 2022-09-27 12:19 UTC (permalink / raw)
  To: linux-gpio
  Cc: git, devicetree, krzysztof.kozlowski+dt, robh+dt, brgl, linus.walleij

Add struct pca9570_platform_data for adding the platform data
structure. Also modify the existing structs for pca9570 and pca9571

Signed-off-by: Shubhrajyoti Datta <shubhrajyoti.datta@amd.com>
---
v3:
split the new patch
Suggested by Andy Shevchenko


 drivers/gpio/gpio-pca9570.c | 26 ++++++++++++++++++++++----
 1 file changed, 22 insertions(+), 4 deletions(-)

diff --git a/drivers/gpio/gpio-pca9570.c b/drivers/gpio/gpio-pca9570.c
index ab2a652964ec..d49e088e6b43 100644
--- a/drivers/gpio/gpio-pca9570.c
+++ b/drivers/gpio/gpio-pca9570.c
@@ -15,6 +15,16 @@
 #include <linux/mutex.h>
 #include <linux/property.h>
 
+/**
+ * struct pca9570_platform_data - GPIO platformdata
+ * @ngpio: no of gpios
+ * @command: Command to be sent
+ */
+struct pca9570_platform_data {
+	u16 ngpio;
+	u32 command;
+};
+
 /**
  * struct pca9570 - GPIO driver data
  * @chip: GPIO controller chip
@@ -119,16 +129,24 @@ static int pca9570_probe(struct i2c_client *client)
 	return devm_gpiochip_add_data(&client->dev, &gpio->chip, gpio);
 }
 
+static const struct pca9570_platform_data pca9570_gpio = {
+	.ngpio = 4,
+};
+
+static const struct pca9570_platform_data pca9571_gpio = {
+	.ngpio = 8,
+};
+
 static const struct i2c_device_id pca9570_id_table[] = {
-	{ "pca9570", 4 },
-	{ "pca9571", 8 },
+	{ "pca9570", (kernel_ulong_t)&pca9570_gpio},
+	{ "pca9571", (kernel_ulong_t)&pca9571_gpio },
 	{ /* sentinel */ }
 };
 MODULE_DEVICE_TABLE(i2c, pca9570_id_table);
 
 static const struct of_device_id pca9570_of_match_table[] = {
-	{ .compatible = "nxp,pca9570", .data = (void *)4 },
-	{ .compatible = "nxp,pca9571", .data = (void *)8 },
+	{ .compatible = "nxp,pca9570", .data = &pca9570_gpio },
+	{ .compatible = "nxp,pca9571", .data = &pca9571_gpio },
 	{ /* sentinel */ }
 };
 MODULE_DEVICE_TABLE(of, pca9570_of_match_table);
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v3 3/3] gpio: pca9570: add slg7xl45106 support
  2022-09-27 12:19 [PATCH v4 0/3] gpio: pca9570: add slg7xl45106 support Shubhrajyoti Datta
  2022-09-27 12:19 ` [PATCH v4 1/3] dt-bindings: gpio: pca9570: Add compatible for slg7xl45106 Shubhrajyoti Datta
  2022-09-27 12:19 ` [PATCH v4 2/3] gpio: pca9570: add a platform data structure Shubhrajyoti Datta
@ 2022-09-27 12:19 ` Shubhrajyoti Datta
  2 siblings, 0 replies; 4+ messages in thread
From: Shubhrajyoti Datta @ 2022-09-27 12:19 UTC (permalink / raw)
  To: linux-gpio
  Cc: git, devicetree, krzysztof.kozlowski+dt, robh+dt, brgl, linus.walleij

Dialog semiconductors SLG7XL45106 is an 8-bit I2C GPO expander.
The output port is controlled by a data byte with register
address. Add a compatible string for the same. Also update
the driver to write and read from it.

Signed-off-by: Shubhrajyoti Datta <shubhrajyoti.datta@amd.com>
---
v3:
split the patch
As suggested by Andy Shevchenko

 drivers/gpio/gpio-pca9570.c | 23 +++++++++++++++++++++--
 1 file changed, 21 insertions(+), 2 deletions(-)

diff --git a/drivers/gpio/gpio-pca9570.c b/drivers/gpio/gpio-pca9570.c
index d49e088e6b43..6c07a8811a7a 100644
--- a/drivers/gpio/gpio-pca9570.c
+++ b/drivers/gpio/gpio-pca9570.c
@@ -15,6 +15,8 @@
 #include <linux/mutex.h>
 #include <linux/property.h>
 
+#define SLG7XL45106_GPO_REG	0xDB
+
 /**
  * struct pca9570_platform_data - GPIO platformdata
  * @ngpio: no of gpios
@@ -28,11 +30,13 @@ struct pca9570_platform_data {
 /**
  * struct pca9570 - GPIO driver data
  * @chip: GPIO controller chip
+ * @p_data: GPIO controller platform data
  * @lock: Protects write sequences
  * @out: Buffer for device register
  */
 struct pca9570 {
 	struct gpio_chip chip;
+	const struct pca9570_platform_data *p_data;
 	struct mutex lock;
 	u8 out;
 };
@@ -42,7 +46,11 @@ static int pca9570_read(struct pca9570 *gpio, u8 *value)
 	struct i2c_client *client = to_i2c_client(gpio->chip.parent);
 	int ret;
 
-	ret = i2c_smbus_read_byte(client);
+	if (gpio->p_data->command != 0)
+		ret = i2c_smbus_read_byte_data(client, gpio->p_data->command);
+	else
+		ret = i2c_smbus_read_byte(client);
+
 	if (ret < 0)
 		return ret;
 
@@ -54,6 +62,9 @@ static int pca9570_write(struct pca9570 *gpio, u8 value)
 {
 	struct i2c_client *client = to_i2c_client(gpio->chip.parent);
 
+	if (gpio->p_data->command != 0)
+		return i2c_smbus_write_byte_data(client, gpio->p_data->command, value);
+
 	return i2c_smbus_write_byte(client, value);
 }
 
@@ -116,7 +127,8 @@ static int pca9570_probe(struct i2c_client *client)
 	gpio->chip.get = pca9570_get;
 	gpio->chip.set = pca9570_set;
 	gpio->chip.base = -1;
-	gpio->chip.ngpio = (uintptr_t)device_get_match_data(&client->dev);
+	gpio->p_data = device_get_match_data(&client->dev);
+	gpio->chip.ngpio = gpio->p_data->ngpio;
 	gpio->chip.can_sleep = true;
 
 	mutex_init(&gpio->lock);
@@ -137,14 +149,21 @@ static const struct pca9570_platform_data pca9571_gpio = {
 	.ngpio = 8,
 };
 
+static const struct pca9570_platform_data slg7xl45106_gpio = {
+	.ngpio = 8,
+	.command = SLG7XL45106_GPO_REG,
+};
+
 static const struct i2c_device_id pca9570_id_table[] = {
 	{ "pca9570", (kernel_ulong_t)&pca9570_gpio},
 	{ "pca9571", (kernel_ulong_t)&pca9571_gpio },
+	{ "slg7xl45106", (kernel_ulong_t)&slg7xl45106_gpio },
 	{ /* sentinel */ }
 };
 MODULE_DEVICE_TABLE(i2c, pca9570_id_table);
 
 static const struct of_device_id pca9570_of_match_table[] = {
+	{ .compatible = "dlg,slg7xl45106", .data = &slg7xl45106_gpio},
 	{ .compatible = "nxp,pca9570", .data = &pca9570_gpio },
 	{ .compatible = "nxp,pca9571", .data = &pca9571_gpio },
 	{ /* sentinel */ }
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-09-27 12:21 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-27 12:19 [PATCH v4 0/3] gpio: pca9570: add slg7xl45106 support Shubhrajyoti Datta
2022-09-27 12:19 ` [PATCH v4 1/3] dt-bindings: gpio: pca9570: Add compatible for slg7xl45106 Shubhrajyoti Datta
2022-09-27 12:19 ` [PATCH v4 2/3] gpio: pca9570: add a platform data structure Shubhrajyoti Datta
2022-09-27 12:19 ` [PATCH v3 3/3] gpio: pca9570: add slg7xl45106 support Shubhrajyoti Datta

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.