* [PATCH 0/2] gpio: Add support for SLG7XL45106 I2C GPO expander
@ 2022-06-28 14:33 Shubhrajyoti Datta
2022-06-28 14:33 ` [PATCH 1/2] dt-bindings: gpio: Add gpio-slg7xl45106.yaml Shubhrajyoti Datta
2022-06-28 14:33 ` [PATCH 2/2] gpio: Add support for SLG7XL45106 I2C GPO expander Shubhrajyoti Datta
0 siblings, 2 replies; 10+ messages in thread
From: Shubhrajyoti Datta @ 2022-06-28 14:33 UTC (permalink / raw)
To: linux-gpio; +Cc: michal.simek, git, git
Add GPO expander support
Resending the series as i see this series didn't went out due to
some issue with my mail client. Please ignore if this series is
already received
Raviteja Narayanam (1):
gpio: Add support for SLG7XL45106 I2C GPO expander
Shubhrajyoti Datta (1):
dt-bindings: gpio: Add gpio-slg7xl45106.yaml
.../bindings/gpio/gpio-slg7xl45106.yaml | 47 +++++++
MAINTAINERS | 7 +
drivers/gpio/Kconfig | 9 ++
drivers/gpio/Makefile | 1 +
drivers/gpio/gpio-slg7xl45106.c | 133 ++++++++++++++++++
5 files changed, 197 insertions(+)
create mode 100644 Documentation/devicetree/bindings/gpio/gpio-slg7xl45106.yaml
create mode 100644 drivers/gpio/gpio-slg7xl45106.c
--
2.17.1
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 1/2] dt-bindings: gpio: Add gpio-slg7xl45106.yaml
2022-06-28 14:33 [PATCH 0/2] gpio: Add support for SLG7XL45106 I2C GPO expander Shubhrajyoti Datta
@ 2022-06-28 14:33 ` Shubhrajyoti Datta
2022-06-28 14:33 ` [PATCH 2/2] gpio: Add support for SLG7XL45106 I2C GPO expander Shubhrajyoti Datta
1 sibling, 0 replies; 10+ messages in thread
From: Shubhrajyoti Datta @ 2022-06-28 14:33 UTC (permalink / raw)
To: linux-gpio; +Cc: michal.simek, git, git
Add a binding for Dialog Semiconductors slg7xl45106 I2C GPO expander
Signed-off-by: Shubhrajyoti Datta <shubhrajyoti.datta@xilinx.com>
---
.../bindings/gpio/gpio-slg7xl45106.yaml | 47 +++++++++++++++++++
1 file changed, 47 insertions(+)
create mode 100644 Documentation/devicetree/bindings/gpio/gpio-slg7xl45106.yaml
diff --git a/Documentation/devicetree/bindings/gpio/gpio-slg7xl45106.yaml b/Documentation/devicetree/bindings/gpio/gpio-slg7xl45106.yaml
new file mode 100644
index 000000000000..7551ea5c2ef7
--- /dev/null
+++ b/Documentation/devicetree/bindings/gpio/gpio-slg7xl45106.yaml
@@ -0,0 +1,47 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/gpio/gpio-slg7xl45106.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: slg7xl45106 I2C GPO expander
+
+maintainers:
+ - Shubhrajyoti Datta <shubhrajyoti.datta@amd.com>
+
+properties:
+ compatible:
+ enum:
+ - dlg,slg7xl45106
+
+ reg:
+ maxItems: 1
+
+ gpio-controller: true
+
+ '#gpio-cells':
+ const: 2
+
+required:
+ - compatible
+ - reg
+ - gpio-controller
+ - "#gpio-cells"
+
+additionalProperties: false
+
+examples:
+ - |
+ i2c0 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ gpio@10 {
+ compatible = "dlg,slg7xl45106";
+ reg = <0x10>;
+ gpio-controller;
+ #gpio-cells = <2>;
+ };
+ };
+
+...
--
2.17.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 2/2] gpio: Add support for SLG7XL45106 I2C GPO expander
2022-06-28 14:33 [PATCH 0/2] gpio: Add support for SLG7XL45106 I2C GPO expander Shubhrajyoti Datta
2022-06-28 14:33 ` [PATCH 1/2] dt-bindings: gpio: Add gpio-slg7xl45106.yaml Shubhrajyoti Datta
@ 2022-06-28 14:33 ` Shubhrajyoti Datta
2022-06-28 19:13 ` Andy Shevchenko
1 sibling, 1 reply; 10+ messages in thread
From: Shubhrajyoti Datta @ 2022-06-28 14:33 UTC (permalink / raw)
To: linux-gpio; +Cc: michal.simek, git, git
From: Raviteja Narayanam <raviteja.narayanam@xilinx.com>
Dialog semiconductors SLG7XL45106 is an 8-bit I2C GPO expander.
The output port is controlled by a data byte with register
address.
Signed-off-by: Raviteja Narayanam <raviteja.narayanam@xilinx.com>
Signed-off-by: Shubhrajyoti Datta <shubhrajyoti.datta@xilinx.com>
---
MAINTAINERS | 7 ++
drivers/gpio/Kconfig | 9 +++
drivers/gpio/Makefile | 1 +
drivers/gpio/gpio-slg7xl45106.c | 133 ++++++++++++++++++++++++++++++++
4 files changed, 150 insertions(+)
create mode 100644 drivers/gpio/gpio-slg7xl45106.c
diff --git a/MAINTAINERS b/MAINTAINERS
index 1fc9ead83d2a..3b3f322b5012 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -5875,6 +5875,13 @@ F: include/linux/regulator/da9211.h
F: include/sound/da[79]*.h
F: sound/soc/codecs/da[79]*.[ch]
+DIALOG SLG7XL45106 GPO DRIVER
+M: Shubhrajyoti Datta <shubhrajyoti.datta@amd.com>
+L: linux-gpio@vger.kernel.org
+S: Maintained
+F: Documentation/devicetree/bindings/gpio/gpio-slg7xl45106.yaml
+F: drivers/gpio/gpio-slg7xl45106.c
+
DIAMOND SYSTEMS GPIO-MM GPIO DRIVER
M: William Breathitt Gray <vilhelm.gray@gmail.com>
L: linux-gpio@vger.kernel.org
diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig
index b01961999ced..1e10f96c9c09 100644
--- a/drivers/gpio/Kconfig
+++ b/drivers/gpio/Kconfig
@@ -1101,6 +1101,15 @@ config GPIO_PCF857X
This driver provides an in-kernel interface to those GPIOs using
platform-neutral GPIO calls.
+config GPIO_SLG7XL45106
+ tristate "SLG7XL45106 8-Bit I2C GPO expander"
+ help
+ Say yes here to enable the GPO driver for the Dialog SLG7XL45106 chip.
+ This expander has 8 output pins.
+
+ To compile this driver as a module, choose M here: the module will
+ be called gpio-slg7xl45106.
+
config GPIO_TPIC2810
tristate "TPIC2810 8-Bit I2C GPO expander"
help
diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile
index 14352f6dfe8e..8248e4fcc22f 100644
--- a/drivers/gpio/Makefile
+++ b/drivers/gpio/Makefile
@@ -136,6 +136,7 @@ obj-$(CONFIG_GPIO_SIFIVE) += gpio-sifive.o
obj-$(CONFIG_GPIO_SIM) += gpio-sim.o
obj-$(CONFIG_GPIO_SIOX) += gpio-siox.o
obj-$(CONFIG_GPIO_SL28CPLD) += gpio-sl28cpld.o
+obj-$(CONFIG_GPIO_SLG7XL45106) += gpio-slg7xl45106.o
obj-$(CONFIG_GPIO_SODAVILLE) += gpio-sodaville.o
obj-$(CONFIG_GPIO_SPEAR_SPICS) += gpio-spear-spics.o
obj-$(CONFIG_GPIO_SPRD) += gpio-sprd.o
diff --git a/drivers/gpio/gpio-slg7xl45106.c b/drivers/gpio/gpio-slg7xl45106.c
new file mode 100644
index 000000000000..61935b8538d1
--- /dev/null
+++ b/drivers/gpio/gpio-slg7xl45106.c
@@ -0,0 +1,133 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Driver for slg7xl45106 I2C GPO expander
+ *
+ * Copyright (C) 2021 Xilinx, Inc.
+ * Copyright (C) 2022 AMD, Inc.
+ *
+ * Based on gpio-pca9570.c
+ * Copyright (C) 2020 Sungbo Eo <mans0n@gorani.run>
+ */
+
+#include <linux/gpio/driver.h>
+#include <linux/i2c.h>
+#include <linux/module.h>
+#include <linux/mutex.h>
+
+#define SLG7XL45106_GPO_REG 0xDB
+
+/**
+ * struct slg7xl45106 - GPIO driver data
+ * @chip: GPIO controller chip
+ * @lock: Protects write sequences
+ */
+struct slg7xl45106 {
+ struct gpio_chip chip;
+ struct mutex lock; /* To protect writes */
+};
+
+static int slg7xl45106_read(struct slg7xl45106 *gpio)
+{
+ struct i2c_client *client = to_i2c_client(gpio->chip.parent);
+
+ return i2c_smbus_read_byte_data(client, SLG7XL45106_GPO_REG);
+}
+
+static int slg7xl45106_write(struct slg7xl45106 *gpio, u8 value)
+{
+ struct i2c_client *client = to_i2c_client(gpio->chip.parent);
+
+ return i2c_smbus_write_byte_data(client, SLG7XL45106_GPO_REG, value);
+}
+
+static int slg7xl45106_get_direction(struct gpio_chip *chip,
+ unsigned int offset)
+{
+ /* This device always output */
+ return GPIO_LINE_DIRECTION_OUT;
+}
+
+static int slg7xl45106_get(struct gpio_chip *chip, unsigned int offset)
+{
+ struct slg7xl45106 *gpio = gpiochip_get_data(chip);
+ int ret;
+
+ ret = slg7xl45106_read(gpio);
+ if (ret < 0)
+ return ret;
+
+ return !!(ret & BIT(offset));
+}
+
+static void slg7xl45106_set(struct gpio_chip *chip, unsigned int offset, int value)
+{
+ struct slg7xl45106 *gpio = gpiochip_get_data(chip);
+ u8 buffer;
+
+ mutex_lock(&gpio->lock);
+
+ buffer = slg7xl45106_read(gpio);
+ if (buffer < 0)
+ goto out;
+
+ if (value)
+ buffer |= BIT(offset);
+ else
+ buffer &= ~BIT(offset);
+
+ slg7xl45106_write(gpio, buffer);
+
+out:
+ mutex_unlock(&gpio->lock);
+}
+
+static int slg7xl45106_probe(struct i2c_client *client)
+{
+ struct slg7xl45106 *gpio;
+
+ gpio = devm_kzalloc(&client->dev, sizeof(*gpio), GFP_KERNEL);
+ if (!gpio)
+ return -ENOMEM;
+
+ gpio->chip.label = client->name;
+ gpio->chip.parent = &client->dev;
+ gpio->chip.owner = THIS_MODULE;
+ gpio->chip.get_direction = slg7xl45106_get_direction;
+ gpio->chip.get = slg7xl45106_get;
+ gpio->chip.set = slg7xl45106_set;
+ gpio->chip.base = -1;
+ gpio->chip.ngpio = (uintptr_t)device_get_match_data(&client->dev);
+ gpio->chip.can_sleep = true;
+
+ mutex_init(&gpio->lock);
+
+ i2c_set_clientdata(client, gpio);
+
+ return devm_gpiochip_add_data(&client->dev, &gpio->chip, gpio);
+}
+
+static const struct i2c_device_id slg7xl45106_id_table[] = {
+ { "slg7xl45106", 8 },
+ { }
+};
+MODULE_DEVICE_TABLE(i2c, slg7xl45106_id_table);
+
+static const struct of_device_id slg7xl45106_of_match_table[] = {
+ { .compatible = "dlg,slg7xl45106", .data = (void *)8 },
+ { }
+};
+MODULE_DEVICE_TABLE(of, slg7xl45106_of_match_table);
+
+static struct i2c_driver slg7xl45106_driver = {
+ .driver = {
+ .name = "slg7xl45106",
+ .of_match_table = slg7xl45106_of_match_table,
+ },
+ .probe_new = slg7xl45106_probe,
+ .id_table = slg7xl45106_id_table,
+};
+module_i2c_driver(slg7xl45106_driver);
+
+MODULE_AUTHOR("Raviteja Narayanam <raviteja.narayanam@xilinx.com>");
+MODULE_DESCRIPTION("GPIO expander driver for slg7xl45106");
+MODULE_LICENSE("GPL");
--
2.17.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 2/2] gpio: Add support for SLG7XL45106 I2C GPO expander
2022-06-28 14:33 ` [PATCH 2/2] gpio: Add support for SLG7XL45106 I2C GPO expander Shubhrajyoti Datta
@ 2022-06-28 19:13 ` Andy Shevchenko
2022-06-28 19:21 ` Andy Shevchenko
0 siblings, 1 reply; 10+ messages in thread
From: Andy Shevchenko @ 2022-06-28 19:13 UTC (permalink / raw)
To: Shubhrajyoti Datta; +Cc: open list:GPIO SUBSYSTEM, Michal Simek, git, git
On Tue, Jun 28, 2022 at 4:35 PM Shubhrajyoti Datta
<shubhrajyoti.datta@xilinx.com> wrote:
>
> From: Raviteja Narayanam <raviteja.narayanam@xilinx.com>
>
> Dialog semiconductors SLG7XL45106 is an 8-bit I2C GPO expander.
> The output port is controlled by a data byte with register
> address.
1/ Have you checked if there is a driver that sounds very similar to
this already upstream?
2/ Have you tried to use gpio-regmap? Why can it not be used?
...
> +struct slg7xl45106 {
> + struct gpio_chip chip;
> + struct mutex lock; /* To protect writes */
If you switch to regmap I believe this entire struct will be gone completely.
> +};
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/2] gpio: Add support for SLG7XL45106 I2C GPO expander
2022-06-28 19:13 ` Andy Shevchenko
@ 2022-06-28 19:21 ` Andy Shevchenko
2022-06-29 1:00 ` Sungbo Eo
0 siblings, 1 reply; 10+ messages in thread
From: Andy Shevchenko @ 2022-06-28 19:21 UTC (permalink / raw)
To: Shubhrajyoti Datta, Sungbo Eo
Cc: open list:GPIO SUBSYSTEM, Michal Simek, git, git
On Tue, Jun 28, 2022 at 9:13 PM Andy Shevchenko
<andy.shevchenko@gmail.com> wrote:
>
> On Tue, Jun 28, 2022 at 4:35 PM Shubhrajyoti Datta
> <shubhrajyoti.datta@xilinx.com> wrote:
> >
> > From: Raviteja Narayanam <raviteja.narayanam@xilinx.com>
> >
> > Dialog semiconductors SLG7XL45106 is an 8-bit I2C GPO expander.
> > The output port is controlled by a data byte with register
> > address.
>
> 1/ Have you checked if there is a driver that sounds very similar to
> this already upstream?
Actually, why can't pca9570 be amended to support this?
> 2/ Have you tried to use gpio-regmap? Why can it not be used?
Same Q for PCA9570 driver. (Maybe gpio-regmap wasn't existed that time?)
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/2] gpio: Add support for SLG7XL45106 I2C GPO expander
2022-06-28 19:21 ` Andy Shevchenko
@ 2022-06-29 1:00 ` Sungbo Eo
2022-06-29 7:14 ` Michal Simek
0 siblings, 1 reply; 10+ messages in thread
From: Sungbo Eo @ 2022-06-29 1:00 UTC (permalink / raw)
To: Andy Shevchenko, Shubhrajyoti Datta
Cc: open list:GPIO SUBSYSTEM, Michal Simek, git, git
Hi,
On 2022-06-29 04:21, Andy Shevchenko wrote:
> On Tue, Jun 28, 2022 at 9:13 PM Andy Shevchenko
> <andy.shevchenko@gmail.com> wrote:
>>
>> On Tue, Jun 28, 2022 at 4:35 PM Shubhrajyoti Datta
>> <shubhrajyoti.datta@xilinx.com> wrote:
>>>
>>> From: Raviteja Narayanam <raviteja.narayanam@xilinx.com>
>>>
>>> Dialog semiconductors SLG7XL45106 is an 8-bit I2C GPO expander.
>>> The output port is controlled by a data byte with register
>>> address.
>>
>> 1/ Have you checked if there is a driver that sounds very similar to
>> this already upstream?
>
> Actually, why can't pca9570 be amended to support this?
>
>> 2/ Have you tried to use gpio-regmap? Why can it not be used?
>
> Same Q for PCA9570 driver. (Maybe gpio-regmap wasn't existed that time?)
IIRC regmap could not be used for pca9570 as pca9570 doesn't have a
concept of "address"; it only accepts a data value.[1]
Please let me know if the situation has changed in the meantime.
It seems the slg7xl45106 driver reads/writes a reg at 0xDB so it is not
compatible with pca9570 driver (in the current state), and (I suppose)
it could be converted to use gpio-regmap.
[1]
https://lore.kernel.org/linux-gpio/69f5d1a1970838b8c4bd8d6e8dba6cac@walle.cc/
Thanks,
Sungbo
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/2] gpio: Add support for SLG7XL45106 I2C GPO expander
2022-06-29 1:00 ` Sungbo Eo
@ 2022-06-29 7:14 ` Michal Simek
2022-06-29 10:15 ` Andy Shevchenko
0 siblings, 1 reply; 10+ messages in thread
From: Michal Simek @ 2022-06-29 7:14 UTC (permalink / raw)
To: Sungbo Eo, Andy Shevchenko, Shubhrajyoti Datta
Cc: open list:GPIO SUBSYSTEM, Michal Simek, git, git
Hi,
On 6/29/22 03:00, Sungbo Eo wrote:
> Hi,
>
> On 2022-06-29 04:21, Andy Shevchenko wrote:
>> On Tue, Jun 28, 2022 at 9:13 PM Andy Shevchenko
>> <andy.shevchenko@gmail.com> wrote:
>>>
>>> On Tue, Jun 28, 2022 at 4:35 PM Shubhrajyoti Datta
>>> <shubhrajyoti.datta@xilinx.com> wrote:
>>>>
>>>> From: Raviteja Narayanam <raviteja.narayanam@xilinx.com>
>>>>
>>>> Dialog semiconductors SLG7XL45106 is an 8-bit I2C GPO expander.
>>>> The output port is controlled by a data byte with register
>>>> address.
>>>
>>> 1/ Have you checked if there is a driver that sounds very similar to
>>> this already upstream?
>>
>> Actually, why can't pca9570 be amended to support this?
>>
>>> 2/ Have you tried to use gpio-regmap? Why can it not be used?
>>
>> Same Q for PCA9570 driver. (Maybe gpio-regmap wasn't existed that time?)
>
> IIRC regmap could not be used for pca9570 as pca9570 doesn't have a
> concept of "address"; it only accepts a data value.[1]
> Please let me know if the situation has changed in the meantime.
>
> It seems the slg7xl45106 driver reads/writes a reg at 0xDB so it is not
> compatible with pca9570 driver (in the current state), and (I suppose)
> it could be converted to use gpio-regmap.
>
> [1]
> https://lore.kernel.org/linux-gpio/69f5d1a1970838b8c4bd8d6e8dba6cac@walle.cc/
As was mentioned driver is based on pca9570 and the only important difference is
with i2c_smbus_read_byte/i2c_smbus_read_byte_data and especially
i2c_smbus_write_byte/i2c_smbus_write_byte_data.
Read can be aligned without any issue but write will have if/else because of
i2c_smbus_write_byte_data. Example below.
Something like this. If this change is fine I think there won't be any issue to
just merge it with pca9570.
Thanks,
Michal
diff --git a/drivers/gpio/gpio-slg7xl45106.c b/drivers/gpio/gpio-slg7xl45106.c
index bf25e6fb6782..b90950ae38c1 100644
--- a/drivers/gpio/gpio-slg7xl45106.c
+++ b/drivers/gpio/gpio-slg7xl45106.c
@@ -22,20 +22,24 @@
struct slg7xl45106 {
struct gpio_chip chip;
struct mutex lock; /* To protect writes */
+ u32 command;
};
static int slg7xl45106_read(struct slg7xl45106 *gpio)
{
struct i2c_client *client = to_i2c_client(gpio->chip.parent);
- return i2c_smbus_read_byte_data(client, SLG7XL45106_GPO_REG);
+ return i2c_smbus_read_byte_data(client, gpio->command);
}
static int slg7xl45106_write(struct slg7xl45106 *gpio, u8 value)
{
struct i2c_client *client = to_i2c_client(gpio->chip.parent);
- return i2c_smbus_write_byte_data(client, SLG7XL45106_GPO_REG, value);
+ if (gpio->command)
+ return i2c_smbus_write_byte_data(client, SLG7XL45106_GPO_REG,
value);
+
+ return i2c_smbus_write_byte(client, value);
}
static int slg7xl45106_get_direction(struct gpio_chip *chip,
@@ -93,6 +97,9 @@ static int slg7xl45106_probe(struct i2c_client *client)
gpio->chip.ngpio = (uintptr_t)device_get_match_data(&client->dev);
gpio->chip.can_sleep = true;
+ /* will be filled based on compatible string, 0 for pca9570 */
+ gpio->command = SLG7XL45106_GPO_REG;
+
mutex_init(&gpio->lock);
i2c_set_clientdata(client, gpio);
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 2/2] gpio: Add support for SLG7XL45106 I2C GPO expander
2022-06-29 7:14 ` Michal Simek
@ 2022-06-29 10:15 ` Andy Shevchenko
2022-06-29 10:37 ` Michal Simek
0 siblings, 1 reply; 10+ messages in thread
From: Andy Shevchenko @ 2022-06-29 10:15 UTC (permalink / raw)
To: Michal Simek
Cc: Sungbo Eo, Shubhrajyoti Datta, open list:GPIO SUBSYSTEM,
Michal Simek, git, git
On Wed, Jun 29, 2022 at 9:14 AM Michal Simek <michal.simek@amd.com> wrote:
> On 6/29/22 03:00, Sungbo Eo wrote:
> > On 2022-06-29 04:21, Andy Shevchenko wrote:
> >> On Tue, Jun 28, 2022 at 9:13 PM Andy Shevchenko
> >> <andy.shevchenko@gmail.com> wrote:
...
> >> Actually, why can't pca9570 be amended to support this?
> > It seems the slg7xl45106 driver reads/writes a reg at 0xDB so it is not
> > compatible with pca9570 driver (in the current state), and (I suppose)
> > it could be converted to use gpio-regmap.
> >
> > [1]
> > https://lore.kernel.org/linux-gpio/69f5d1a1970838b8c4bd8d6e8dba6cac@walle.cc/
>
> As was mentioned driver is based on pca9570 and the only important difference is
> with i2c_smbus_read_byte/i2c_smbus_read_byte_data and especially
> i2c_smbus_write_byte/i2c_smbus_write_byte_data.
>
> Read can be aligned without any issue but write will have if/else because of
> i2c_smbus_write_byte_data. Example below.
>
> Something like this. If this change is fine I think there won't be any issue to
> just merge it with pca9570.
Thanks, I also would like to see something as below in the result.
> diff --git a/drivers/gpio/gpio-slg7xl45106.c b/drivers/gpio/gpio-slg7xl45106.c
> index bf25e6fb6782..b90950ae38c1 100644
> --- a/drivers/gpio/gpio-slg7xl45106.c
> +++ b/drivers/gpio/gpio-slg7xl45106.c
> @@ -22,20 +22,24 @@
> struct slg7xl45106 {
> struct gpio_chip chip;
> struct mutex lock; /* To protect writes */
> + u32 command;
> };
>
> static int slg7xl45106_read(struct slg7xl45106 *gpio)
> {
> struct i2c_client *client = to_i2c_client(gpio->chip.parent);
>
> - return i2c_smbus_read_byte_data(client, SLG7XL45106_GPO_REG);
> + return i2c_smbus_read_byte_data(client, gpio->command);
> }
>
> static int slg7xl45106_write(struct slg7xl45106 *gpio, u8 value)
> {
> struct i2c_client *client = to_i2c_client(gpio->chip.parent);
>
> - return i2c_smbus_write_byte_data(client, SLG7XL45106_GPO_REG, value);
> + if (gpio->command)
> + return i2c_smbus_write_byte_data(client, SLG7XL45106_GPO_REG,
> value);
Missed change to gpio->command :-)
> + return i2c_smbus_write_byte(client, value);
> }
>
> static int slg7xl45106_get_direction(struct gpio_chip *chip,
> @@ -93,6 +97,9 @@ static int slg7xl45106_probe(struct i2c_client *client)
> gpio->chip.ngpio = (uintptr_t)device_get_match_data(&client->dev);
> gpio->chip.can_sleep = true;
>
> + /* will be filled based on compatible string, 0 for pca9570 */
> + gpio->command = SLG7XL45106_GPO_REG;
> +
> mutex_init(&gpio->lock);
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/2] gpio: Add support for SLG7XL45106 I2C GPO expander
2022-06-29 10:15 ` Andy Shevchenko
@ 2022-06-29 10:37 ` Michal Simek
2022-06-29 13:19 ` Datta, Shubhrajyoti
0 siblings, 1 reply; 10+ messages in thread
From: Michal Simek @ 2022-06-29 10:37 UTC (permalink / raw)
To: Andy Shevchenko
Cc: Sungbo Eo, Shubhrajyoti Datta, open list:GPIO SUBSYSTEM,
Michal Simek, git, git
On 6/29/22 12:15, Andy Shevchenko wrote:
> On Wed, Jun 29, 2022 at 9:14 AM Michal Simek <michal.simek@amd.com> wrote:
>> On 6/29/22 03:00, Sungbo Eo wrote:
>>> On 2022-06-29 04:21, Andy Shevchenko wrote:
>>>> On Tue, Jun 28, 2022 at 9:13 PM Andy Shevchenko
>>>> <andy.shevchenko@gmail.com> wrote:
>
> ...
>
>>>> Actually, why can't pca9570 be amended to support this?
>
>>> It seems the slg7xl45106 driver reads/writes a reg at 0xDB so it is not
>>> compatible with pca9570 driver (in the current state), and (I suppose)
>>> it could be converted to use gpio-regmap.
>>>
>>> [1]
>>> https://lore.kernel.org/linux-gpio/69f5d1a1970838b8c4bd8d6e8dba6cac@walle.cc/
>>
>> As was mentioned driver is based on pca9570 and the only important difference is
>> with i2c_smbus_read_byte/i2c_smbus_read_byte_data and especially
>> i2c_smbus_write_byte/i2c_smbus_write_byte_data.
>>
>> Read can be aligned without any issue but write will have if/else because of
>> i2c_smbus_write_byte_data. Example below.
>>
>> Something like this. If this change is fine I think there won't be any issue to
>> just merge it with pca9570.
>
> Thanks, I also would like to see something as below in the result.
ok. Good.
>
>> diff --git a/drivers/gpio/gpio-slg7xl45106.c b/drivers/gpio/gpio-slg7xl45106.c
>> index bf25e6fb6782..b90950ae38c1 100644
>> --- a/drivers/gpio/gpio-slg7xl45106.c
>> +++ b/drivers/gpio/gpio-slg7xl45106.c
>> @@ -22,20 +22,24 @@
>> struct slg7xl45106 {
>> struct gpio_chip chip;
>> struct mutex lock; /* To protect writes */
>> + u32 command;
>> };
>>
>> static int slg7xl45106_read(struct slg7xl45106 *gpio)
>> {
>> struct i2c_client *client = to_i2c_client(gpio->chip.parent);
>>
>> - return i2c_smbus_read_byte_data(client, SLG7XL45106_GPO_REG);
>> + return i2c_smbus_read_byte_data(client, gpio->command);
>> }
>>
>> static int slg7xl45106_write(struct slg7xl45106 *gpio, u8 value)
>> {
>> struct i2c_client *client = to_i2c_client(gpio->chip.parent);
>>
>> - return i2c_smbus_write_byte_data(client, SLG7XL45106_GPO_REG, value);
>> + if (gpio->command)
>> + return i2c_smbus_write_byte_data(client, SLG7XL45106_GPO_REG,
>> value);
>
> Missed change to gpio->command :-)
I found it too. :-)
Shubhrajyoti: Can you please merge that slg driver to 9570? That dt-binding will
require small massage too.
Thanks,
Michal
^ permalink raw reply [flat|nested] 10+ messages in thread
* RE: [PATCH 2/2] gpio: Add support for SLG7XL45106 I2C GPO expander
2022-06-29 10:37 ` Michal Simek
@ 2022-06-29 13:19 ` Datta, Shubhrajyoti
0 siblings, 0 replies; 10+ messages in thread
From: Datta, Shubhrajyoti @ 2022-06-29 13:19 UTC (permalink / raw)
To: Simek, Michal, Andy Shevchenko
Cc: Sungbo Eo, Shubhrajyoti Datta, open list:GPIO SUBSYSTEM,
Michal Simek, git (AMD-Xilinx),
git
[AMD Official Use Only - General]
> -----Original Message-----
> From: Simek, Michal <michal.simek@amd.com>
> Sent: Wednesday, June 29, 2022 4:08 PM
> To: Andy Shevchenko <andy.shevchenko@gmail.com>
> Cc: Sungbo Eo <mans0n@gorani.run>; Shubhrajyoti Datta
> <shubhrajyoti.datta@xilinx.com>; open list:GPIO SUBSYSTEM <linux-
> gpio@vger.kernel.org>; Michal Simek <michal.simek@xilinx.com>; git (AMD-
> Xilinx) <git@amd.com>; git <git@xilinx.com>
> Subject: Re: [PATCH 2/2] gpio: Add support for SLG7XL45106 I2C GPO
> expander
>
>
>
> On 6/29/22 12:15, Andy Shevchenko wrote:
> > On Wed, Jun 29, 2022 at 9:14 AM Michal Simek <michal.simek@amd.com>
> wrote:
> >> On 6/29/22 03:00, Sungbo Eo wrote:
> >>> On 2022-06-29 04:21, Andy Shevchenko wrote:
> >>>> On Tue, Jun 28, 2022 at 9:13 PM Andy Shevchenko
> >>>> <andy.shevchenko@gmail.com> wrote:
> >
> > ...
> >
> >>>> Actually, why can't pca9570 be amended to support this?
> >
> >>> It seems the slg7xl45106 driver reads/writes a reg at 0xDB so it is
> >>> not compatible with pca9570 driver (in the current state), and (I
> >>> suppose) it could be converted to use gpio-regmap.
> >>>
> >>> [1]
> >>> https://lore.kernel.org/linux-
> gpio/69f5d1a1970838b8c4bd8d6e8dba6cac@
> >>> walle.cc/
> >>
> >> As was mentioned driver is based on pca9570 and the only important
> >> difference is with i2c_smbus_read_byte/i2c_smbus_read_byte_data and
> >> especially i2c_smbus_write_byte/i2c_smbus_write_byte_data.
> >>
> >> Read can be aligned without any issue but write will have if/else
> >> because of i2c_smbus_write_byte_data. Example below.
> >>
> >> Something like this. If this change is fine I think there won't be
> >> any issue to just merge it with pca9570.
> >
> > Thanks, I also would like to see something as below in the result.
>
> ok. Good.
>
> >
> >> diff --git a/drivers/gpio/gpio-slg7xl45106.c
> >> b/drivers/gpio/gpio-slg7xl45106.c index bf25e6fb6782..b90950ae38c1
> >> 100644
> >> --- a/drivers/gpio/gpio-slg7xl45106.c
> >> +++ b/drivers/gpio/gpio-slg7xl45106.c
> >> @@ -22,20 +22,24 @@
> >> struct slg7xl45106 {
> >> struct gpio_chip chip;
> >> struct mutex lock; /* To protect writes */
> >> + u32 command;
> >> };
> >>
> >> static int slg7xl45106_read(struct slg7xl45106 *gpio)
> >> {
> >> struct i2c_client *client =
> >> to_i2c_client(gpio->chip.parent);
> >>
> >> - return i2c_smbus_read_byte_data(client, SLG7XL45106_GPO_REG);
> >> + return i2c_smbus_read_byte_data(client, gpio->command);
> >> }
> >>
> >> static int slg7xl45106_write(struct slg7xl45106 *gpio, u8 value)
> >> {
> >> struct i2c_client *client =
> >> to_i2c_client(gpio->chip.parent);
> >>
> >> - return i2c_smbus_write_byte_data(client, SLG7XL45106_GPO_REG,
> value);
> >> + if (gpio->command)
> >> + return i2c_smbus_write_byte_data(client,
> >> + SLG7XL45106_GPO_REG,
> >> value);
> >
> > Missed change to gpio->command :-)
>
> I found it too. :-)
>
> Shubhrajyoti: Can you please merge that slg driver to 9570? That dt-binding
> will require small massage too.
Will fix in the next version.
Thanks
>
> Thanks,
> Michal
>
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2022-06-29 13:19 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-28 14:33 [PATCH 0/2] gpio: Add support for SLG7XL45106 I2C GPO expander Shubhrajyoti Datta
2022-06-28 14:33 ` [PATCH 1/2] dt-bindings: gpio: Add gpio-slg7xl45106.yaml Shubhrajyoti Datta
2022-06-28 14:33 ` [PATCH 2/2] gpio: Add support for SLG7XL45106 I2C GPO expander Shubhrajyoti Datta
2022-06-28 19:13 ` Andy Shevchenko
2022-06-28 19:21 ` Andy Shevchenko
2022-06-29 1:00 ` Sungbo Eo
2022-06-29 7:14 ` Michal Simek
2022-06-29 10:15 ` Andy Shevchenko
2022-06-29 10:37 ` Michal Simek
2022-06-29 13:19 ` Datta, Shubhrajyoti
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.