* [PATCH] i2c: support gpio-binding for SMBAlerts
@ 2024-09-09 11:02 Wolfram Sang
2024-09-10 18:30 ` Andi Shyti
2024-10-08 8:25 ` Wolfram Sang
0 siblings, 2 replies; 3+ messages in thread
From: Wolfram Sang @ 2024-09-09 11:02 UTC (permalink / raw)
To: linux-renesas-soc; +Cc: Wolfram Sang, linux-i2c
Most I2C controllers do not have a dedicated pin for SMBus Alerts. Allow
them to define a GPIO as a side-channel.
Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
---
The binding addition for dt-schema is here:
https://lore.kernel.org/r/20240909105835.28531-1-wsa+renesas@sang-engineering.com
Tested with a Renesas Lager board (R-Car H2).
drivers/i2c/i2c-core-smbus.c | 9 ++++++---
drivers/i2c/i2c-smbus.c | 22 ++++++++++++++++------
2 files changed, 22 insertions(+), 9 deletions(-)
diff --git a/drivers/i2c/i2c-core-smbus.c b/drivers/i2c/i2c-core-smbus.c
index 967bd712c638..fb3d4674be0c 100644
--- a/drivers/i2c/i2c-core-smbus.c
+++ b/drivers/i2c/i2c-core-smbus.c
@@ -712,12 +712,15 @@ int i2c_setup_smbus_alert(struct i2c_adapter *adapter)
if (!parent || i2c_verify_adapter(parent))
return 0;
+ /* Report serious errors */
irq = device_property_match_string(parent, "interrupt-names", "smbus_alert");
- if (irq == -EINVAL || irq == -ENODATA)
- return 0;
- else if (irq < 0)
+ if (irq < 0 && irq != -EINVAL && irq != -ENODATA)
return irq;
+ /* Skip setup when no irq was found */
+ if (irq < 0 && !device_property_present(parent, "smbalert-gpios"))
+ return 0;
+
return PTR_ERR_OR_ZERO(i2c_new_smbus_alert_device(adapter, NULL));
}
#endif
diff --git a/drivers/i2c/i2c-smbus.c b/drivers/i2c/i2c-smbus.c
index bf23e3446123..10198e5efb50 100644
--- a/drivers/i2c/i2c-smbus.c
+++ b/drivers/i2c/i2c-smbus.c
@@ -9,6 +9,7 @@
#define DEBUG
#include <linux/device.h>
#include <linux/dmi.h>
+#include <linux/gpio/consumer.h>
#include <linux/i2c.h>
#include <linux/i2c-smbus.h>
#include <linux/interrupt.h>
@@ -168,6 +169,8 @@ static int smbalert_probe(struct i2c_client *ara)
struct i2c_smbus_alert_setup *setup = dev_get_platdata(&ara->dev);
struct i2c_smbus_alert *alert;
struct i2c_adapter *adapter = ara->adapter;
+ unsigned long irqflags = IRQF_SHARED | IRQF_ONESHOT;
+ struct gpio_desc *gpiod;
int res, irq;
alert = devm_kzalloc(&ara->dev, sizeof(struct i2c_smbus_alert),
@@ -180,18 +183,25 @@ static int smbalert_probe(struct i2c_client *ara)
} else {
irq = fwnode_irq_get_byname(dev_fwnode(adapter->dev.parent),
"smbus_alert");
- if (irq <= 0)
- return irq;
+ if (irq <= 0) {
+ gpiod = devm_gpiod_get(adapter->dev.parent, "smbalert", GPIOD_IN);
+ if (IS_ERR(gpiod))
+ return PTR_ERR(gpiod);
+
+ irq = gpiod_to_irq(gpiod);
+ if (irq <= 0)
+ return irq;
+
+ irqflags |= IRQF_TRIGGER_FALLING;
+ }
}
INIT_WORK(&alert->alert, smbalert_work);
alert->ara = ara;
if (irq > 0) {
- res = devm_request_threaded_irq(&ara->dev, irq,
- NULL, smbus_alert,
- IRQF_SHARED | IRQF_ONESHOT,
- "smbus_alert", alert);
+ res = devm_request_threaded_irq(&ara->dev, irq, NULL, smbus_alert,
+ irqflags, "smbus_alert", alert);
if (res)
return res;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] i2c: support gpio-binding for SMBAlerts
2024-09-09 11:02 [PATCH] i2c: support gpio-binding for SMBAlerts Wolfram Sang
@ 2024-09-10 18:30 ` Andi Shyti
2024-10-08 8:25 ` Wolfram Sang
1 sibling, 0 replies; 3+ messages in thread
From: Andi Shyti @ 2024-09-10 18:30 UTC (permalink / raw)
To: Wolfram Sang; +Cc: linux-renesas-soc, linux-i2c
Hi Wolfram,
On Mon, Sep 09, 2024 at 01:02:56PM GMT, Wolfram Sang wrote:
> Most I2C controllers do not have a dedicated pin for SMBus Alerts. Allow
> them to define a GPIO as a side-channel.
>
> Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
looks good.
Reviewed-by: Andi Shyti <andi.shyti@kernel.org>
Thanks,
Andi
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] i2c: support gpio-binding for SMBAlerts
2024-09-09 11:02 [PATCH] i2c: support gpio-binding for SMBAlerts Wolfram Sang
2024-09-10 18:30 ` Andi Shyti
@ 2024-10-08 8:25 ` Wolfram Sang
1 sibling, 0 replies; 3+ messages in thread
From: Wolfram Sang @ 2024-10-08 8:25 UTC (permalink / raw)
To: linux-renesas-soc; +Cc: linux-i2c
[-- Attachment #1: Type: text/plain, Size: 321 bytes --]
On Mon, Sep 09, 2024 at 01:02:56PM +0200, Wolfram Sang wrote:
> Most I2C controllers do not have a dedicated pin for SMBus Alerts. Allow
> them to define a GPIO as a side-channel.
>
> Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
DT-Schema dependency is upstream now. So, applied to for-next.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-10-08 8:25 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-09-09 11:02 [PATCH] i2c: support gpio-binding for SMBAlerts Wolfram Sang
2024-09-10 18:30 ` Andi Shyti
2024-10-08 8:25 ` Wolfram Sang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox