* [PATCH v2 0/2] i2c: updates to SMBus alert setup
@ 2020-02-28 17:12 Wolfram Sang
2020-02-28 17:12 ` [PATCH v2 1/2] i2c: convert SMBus alert setup function to return an ERRPTR Wolfram Sang
2020-02-28 17:12 ` [PATCH v2 2/2] i2c: smbus: remove outdated references to irq level triggers Wolfram Sang
0 siblings, 2 replies; 7+ messages in thread
From: Wolfram Sang @ 2020-02-28 17:12 UTC (permalink / raw)
To: linux-i2c; +Cc: Benjamin Tissoires, Phil Reid, Robert Richter, Wolfram Sang
The main motivation for this series is to convert
i2c_setup_smbus_alert() to a function which returns an ERRPTR instead of
NULL. Because there are only a few driver using this function they are
all converted in one go (patch 1). The function is also renamed to make
sure out-of-tree users will note they have to update (or better
upstream). Patch 2 cleans up some outdated documentation which was
discovered while working on the earlier patches.
Changes since V1:
- used PTR_ERR_OR_ZERO in one place (thanks buildbot)
- better name of the new function (thanks Jean, Robert, and Luca for the
discussion)
- one patch dropped from the old series, no need anymore to keep the
function names in sync
Patches are on top of v5.6-rc3 and can be found here:
git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git renesas/i2c/new_client_device
Only build tested. Testing and reviews from people actually using SMBus
alert would be much appreciated!
Thanks,
Wolfram
Wolfram Sang (2):
i2c: convert SMBus alert setup function to return an ERRPTR
i2c: smbus: remove outdated references to irq level triggers
Documentation/i2c/smbus-protocol.rst | 2 +-
drivers/i2c/busses/i2c-parport.c | 12 +++++++----
drivers/i2c/busses/i2c-thunderx-pcidrv.c | 11 +++++++---
drivers/i2c/busses/i2c-xlp9xx.c | 10 ++++++---
drivers/i2c/i2c-core-smbus.c | 26 ++++++++----------------
drivers/i2c/i2c-smbus.c | 2 +-
include/linux/i2c-smbus.h | 9 ++------
7 files changed, 35 insertions(+), 37 deletions(-)
--
2.20.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2 1/2] i2c: convert SMBus alert setup function to return an ERRPTR
2020-02-28 17:12 [PATCH v2 0/2] i2c: updates to SMBus alert setup Wolfram Sang
@ 2020-02-28 17:12 ` Wolfram Sang
2020-03-04 16:48 ` Luca Ceresoli
2020-03-10 11:20 ` Wolfram Sang
2020-02-28 17:12 ` [PATCH v2 2/2] i2c: smbus: remove outdated references to irq level triggers Wolfram Sang
1 sibling, 2 replies; 7+ messages in thread
From: Wolfram Sang @ 2020-02-28 17:12 UTC (permalink / raw)
To: linux-i2c; +Cc: Benjamin Tissoires, Phil Reid, Robert Richter, Wolfram Sang
Only few drivers use this call, so drivers and I2C core are converted at
once with this patch. By simply using i2c_new_client_device() instead of
i2c_new_device(), we easily can return an ERRPTR for this function as
well. To make out of tree users aware that something changed, the
function is renamed to i2c_new_smbus_alert_device().
Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
---
Documentation/i2c/smbus-protocol.rst | 2 +-
drivers/i2c/busses/i2c-parport.c | 12 ++++++++----
drivers/i2c/busses/i2c-thunderx-pcidrv.c | 11 ++++++++---
drivers/i2c/busses/i2c-xlp9xx.c | 10 +++++++---
drivers/i2c/i2c-core-smbus.c | 21 ++++++++-------------
drivers/i2c/i2c-smbus.c | 2 +-
include/linux/i2c-smbus.h | 4 ++--
7 files changed, 35 insertions(+), 27 deletions(-)
diff --git a/Documentation/i2c/smbus-protocol.rst b/Documentation/i2c/smbus-protocol.rst
index c122ed239f7f..c2e29633071e 100644
--- a/Documentation/i2c/smbus-protocol.rst
+++ b/Documentation/i2c/smbus-protocol.rst
@@ -274,7 +274,7 @@ to know which slave triggered the interrupt.
This is implemented the following way in the Linux kernel:
* I2C bus drivers which support SMBus alert should call
- i2c_setup_smbus_alert() to setup SMBus alert support.
+ i2c_new_smbus_alert_device() to install SMBus alert support.
* I2C drivers for devices which can trigger SMBus alerts should implement
the optional alert() callback.
diff --git a/drivers/i2c/busses/i2c-parport.c b/drivers/i2c/busses/i2c-parport.c
index 81eb441b2387..a535889acca6 100644
--- a/drivers/i2c/busses/i2c-parport.c
+++ b/drivers/i2c/busses/i2c-parport.c
@@ -333,13 +333,17 @@ static void i2c_parport_attach(struct parport *port)
/* Setup SMBus alert if supported */
if (adapter_parm[type].smbus_alert) {
- adapter->ara = i2c_setup_smbus_alert(&adapter->adapter,
- &adapter->alert_data);
- if (adapter->ara)
+ struct i2c_client *ara;
+
+ ara = i2c_new_smbus_alert_device(&adapter->adapter,
+ &adapter->alert_data);
+ if (!IS_ERR(ara)) {
+ adapter->ara = ara;
parport_enable_irq(port);
- else
+ } else {
dev_warn(&adapter->pdev->dev,
"Failed to register ARA client\n");
+ }
}
/* Add the new adapter to the list */
diff --git a/drivers/i2c/busses/i2c-thunderx-pcidrv.c b/drivers/i2c/busses/i2c-thunderx-pcidrv.c
index 19f8eec38717..7d3b9d66ad36 100644
--- a/drivers/i2c/busses/i2c-thunderx-pcidrv.c
+++ b/drivers/i2c/busses/i2c-thunderx-pcidrv.c
@@ -118,6 +118,8 @@ static void thunder_i2c_clock_disable(struct device *dev, struct clk *clk)
static int thunder_i2c_smbus_setup_of(struct octeon_i2c *i2c,
struct device_node *node)
{
+ struct i2c_client *ara;
+
if (!node)
return -EINVAL;
@@ -125,9 +127,12 @@ static int thunder_i2c_smbus_setup_of(struct octeon_i2c *i2c,
if (!i2c->alert_data.irq)
return -EINVAL;
- i2c->ara = i2c_setup_smbus_alert(&i2c->adap, &i2c->alert_data);
- if (!i2c->ara)
- return -ENODEV;
+ ara = i2c_new_smbus_alert_device(&i2c->adap, &i2c->alert_data);
+ if (IS_ERR(ara))
+ return PTR_ERR(ara);
+
+ i2c->ara = ara;
+
return 0;
}
diff --git a/drivers/i2c/busses/i2c-xlp9xx.c b/drivers/i2c/busses/i2c-xlp9xx.c
index 8a873975cf12..823945bc3249 100644
--- a/drivers/i2c/busses/i2c-xlp9xx.c
+++ b/drivers/i2c/busses/i2c-xlp9xx.c
@@ -491,12 +491,16 @@ static int xlp9xx_i2c_get_frequency(struct platform_device *pdev,
static int xlp9xx_i2c_smbus_setup(struct xlp9xx_i2c_dev *priv,
struct platform_device *pdev)
{
+ struct i2c_client *ara;
+
if (!priv->alert_data.irq)
return -EINVAL;
- priv->ara = i2c_setup_smbus_alert(&priv->adapter, &priv->alert_data);
- if (!priv->ara)
- return -ENODEV;
+ ara = i2c_new_smbus_alert_device(&priv->adapter, &priv->alert_data);
+ if (IS_ERR(ara))
+ return PTR_ERR(ara);
+
+ priv->ara = ara;
return 0;
}
diff --git a/drivers/i2c/i2c-core-smbus.c b/drivers/i2c/i2c-core-smbus.c
index 3ac426a8ab5a..fd2b961f113e 100644
--- a/drivers/i2c/i2c-core-smbus.c
+++ b/drivers/i2c/i2c-core-smbus.c
@@ -666,7 +666,7 @@ s32 i2c_smbus_read_i2c_block_data_or_emulated(const struct i2c_client *client,
EXPORT_SYMBOL(i2c_smbus_read_i2c_block_data_or_emulated);
/**
- * i2c_setup_smbus_alert - Setup SMBus alert support
+ * i2c_new_smbus_alert_device - get ara client for SMBus alert support
* @adapter: the target adapter
* @setup: setup data for the SMBus alert handler
* Context: can sleep
@@ -682,25 +682,24 @@ EXPORT_SYMBOL(i2c_smbus_read_i2c_block_data_or_emulated);
* should have said it's level triggered.
*
* This returns the ara client, which should be saved for later use with
- * i2c_handle_smbus_alert() and ultimately i2c_unregister_device(); or NULL
- * to indicate an error.
+ * i2c_handle_smbus_alert() and ultimately i2c_unregister_device(); or an
+ * ERRPTR to indicate an error.
*/
-struct i2c_client *i2c_setup_smbus_alert(struct i2c_adapter *adapter,
- struct i2c_smbus_alert_setup *setup)
+struct i2c_client *i2c_new_smbus_alert_device(struct i2c_adapter *adapter,
+ struct i2c_smbus_alert_setup *setup)
{
struct i2c_board_info ara_board_info = {
I2C_BOARD_INFO("smbus_alert", 0x0c),
.platform_data = setup,
};
- return i2c_new_device(adapter, &ara_board_info);
+ return i2c_new_client_device(adapter, &ara_board_info);
}
-EXPORT_SYMBOL_GPL(i2c_setup_smbus_alert);
+EXPORT_SYMBOL_GPL(i2c_new_smbus_alert_device);
#if IS_ENABLED(CONFIG_I2C_SMBUS) && IS_ENABLED(CONFIG_OF)
int of_i2c_setup_smbus_alert(struct i2c_adapter *adapter)
{
- struct i2c_client *client;
int irq;
irq = of_property_match_string(adapter->dev.of_node, "interrupt-names",
@@ -710,11 +709,7 @@ int of_i2c_setup_smbus_alert(struct i2c_adapter *adapter)
else if (irq < 0)
return irq;
- client = i2c_setup_smbus_alert(adapter, NULL);
- if (!client)
- return -ENODEV;
-
- return 0;
+ return PTR_ERR_OR_ZERO(i2c_new_smbus_alert_device(adapter, NULL));
}
EXPORT_SYMBOL_GPL(of_i2c_setup_smbus_alert);
#endif
diff --git a/drivers/i2c/i2c-smbus.c b/drivers/i2c/i2c-smbus.c
index 7e2f5d0eacdb..809bcf8387d0 100644
--- a/drivers/i2c/i2c-smbus.c
+++ b/drivers/i2c/i2c-smbus.c
@@ -184,7 +184,7 @@ static struct i2c_driver smbalert_driver = {
* corresponding I2C device driver's alert function.
*
* It is assumed that ara is a valid i2c client previously returned by
- * i2c_setup_smbus_alert().
+ * i2c_new_smbus_alert_device().
*/
int i2c_handle_smbus_alert(struct i2c_client *ara)
{
diff --git a/include/linux/i2c-smbus.h b/include/linux/i2c-smbus.h
index 585ad6fc3847..802aac0d2010 100644
--- a/include/linux/i2c-smbus.h
+++ b/include/linux/i2c-smbus.h
@@ -31,8 +31,8 @@ struct i2c_smbus_alert_setup {
int irq;
};
-struct i2c_client *i2c_setup_smbus_alert(struct i2c_adapter *adapter,
- struct i2c_smbus_alert_setup *setup);
+struct i2c_client *i2c_new_smbus_alert_device(struct i2c_adapter *adapter,
+ struct i2c_smbus_alert_setup *setup);
int i2c_handle_smbus_alert(struct i2c_client *ara);
#if IS_ENABLED(CONFIG_I2C_SMBUS) && IS_ENABLED(CONFIG_OF)
--
2.20.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 2/2] i2c: smbus: remove outdated references to irq level triggers
2020-02-28 17:12 [PATCH v2 0/2] i2c: updates to SMBus alert setup Wolfram Sang
2020-02-28 17:12 ` [PATCH v2 1/2] i2c: convert SMBus alert setup function to return an ERRPTR Wolfram Sang
@ 2020-02-28 17:12 ` Wolfram Sang
2020-03-04 16:48 ` Luca Ceresoli
2020-03-10 11:21 ` Wolfram Sang
1 sibling, 2 replies; 7+ messages in thread
From: Wolfram Sang @ 2020-02-28 17:12 UTC (permalink / raw)
To: linux-i2c; +Cc: Benjamin Tissoires, Phil Reid, Robert Richter, Wolfram Sang
IRQ levels are now handled within the IRQ core. Remove the forgotten
references from the documentation.
Fixes: 9b9f2b8bc2ac ("i2c: i2c-smbus: Use threaded irq for smbalert")
Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
---
drivers/i2c/i2c-core-smbus.c | 5 -----
include/linux/i2c-smbus.h | 5 -----
2 files changed, 10 deletions(-)
diff --git a/drivers/i2c/i2c-core-smbus.c b/drivers/i2c/i2c-core-smbus.c
index fd2b961f113e..b34d2ff06931 100644
--- a/drivers/i2c/i2c-core-smbus.c
+++ b/drivers/i2c/i2c-core-smbus.c
@@ -676,11 +676,6 @@ EXPORT_SYMBOL(i2c_smbus_read_i2c_block_data_or_emulated);
* Handling can be done either through our IRQ handler, or by the
* adapter (from its handler, periodic polling, or whatever).
*
- * NOTE that if we manage the IRQ, we *MUST* know if it's level or
- * edge triggered in order to hand it to the workqueue correctly.
- * If triggering the alert seems to wedge the system, you probably
- * should have said it's level triggered.
- *
* This returns the ara client, which should be saved for later use with
* i2c_handle_smbus_alert() and ultimately i2c_unregister_device(); or an
* ERRPTR to indicate an error.
diff --git a/include/linux/i2c-smbus.h b/include/linux/i2c-smbus.h
index 802aac0d2010..8c5459034f92 100644
--- a/include/linux/i2c-smbus.h
+++ b/include/linux/i2c-smbus.h
@@ -15,17 +15,12 @@
/**
* i2c_smbus_alert_setup - platform data for the smbus_alert i2c client
- * @alert_edge_triggered: whether the alert interrupt is edge (1) or level (0)
- * triggered
* @irq: IRQ number, if the smbus_alert driver should take care of interrupt
* handling
*
* If irq is not specified, the smbus_alert driver doesn't take care of
* interrupt handling. In that case it is up to the I2C bus driver to either
* handle the interrupts or to poll for alerts.
- *
- * If irq is specified then it it crucial that alert_edge_triggered is
- * properly set.
*/
struct i2c_smbus_alert_setup {
int irq;
--
2.20.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v2 1/2] i2c: convert SMBus alert setup function to return an ERRPTR
2020-02-28 17:12 ` [PATCH v2 1/2] i2c: convert SMBus alert setup function to return an ERRPTR Wolfram Sang
@ 2020-03-04 16:48 ` Luca Ceresoli
2020-03-10 11:20 ` Wolfram Sang
1 sibling, 0 replies; 7+ messages in thread
From: Luca Ceresoli @ 2020-03-04 16:48 UTC (permalink / raw)
To: Wolfram Sang, linux-i2c; +Cc: Benjamin Tissoires, Phil Reid, Robert Richter
Hi,
On 28/02/20 18:12, Wolfram Sang wrote:
> Only few drivers use this call, so drivers and I2C core are converted at
> once with this patch. By simply using i2c_new_client_device() instead of
> i2c_new_device(), we easily can return an ERRPTR for this function as
> well. To make out of tree users aware that something changed, the
> function is renamed to i2c_new_smbus_alert_device().
>
> Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Reviewed-by: Luca Ceresoli <luca@lucaceresoli.net>
--
Luca
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 2/2] i2c: smbus: remove outdated references to irq level triggers
2020-02-28 17:12 ` [PATCH v2 2/2] i2c: smbus: remove outdated references to irq level triggers Wolfram Sang
@ 2020-03-04 16:48 ` Luca Ceresoli
2020-03-10 11:21 ` Wolfram Sang
1 sibling, 0 replies; 7+ messages in thread
From: Luca Ceresoli @ 2020-03-04 16:48 UTC (permalink / raw)
To: Wolfram Sang, linux-i2c; +Cc: Benjamin Tissoires, Phil Reid, Robert Richter
Hi,
On 28/02/20 18:12, Wolfram Sang wrote:
> IRQ levels are now handled within the IRQ core. Remove the forgotten
> references from the documentation.
>
> Fixes: 9b9f2b8bc2ac ("i2c: i2c-smbus: Use threaded irq for smbalert")
> Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Reviewed-by: Luca Ceresoli <luca@lucaceresoli.net>
--
Luca
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 1/2] i2c: convert SMBus alert setup function to return an ERRPTR
2020-02-28 17:12 ` [PATCH v2 1/2] i2c: convert SMBus alert setup function to return an ERRPTR Wolfram Sang
2020-03-04 16:48 ` Luca Ceresoli
@ 2020-03-10 11:20 ` Wolfram Sang
1 sibling, 0 replies; 7+ messages in thread
From: Wolfram Sang @ 2020-03-10 11:20 UTC (permalink / raw)
To: Wolfram Sang; +Cc: linux-i2c, Benjamin Tissoires, Phil Reid, Robert Richter
[-- Attachment #1: Type: text/plain, Size: 548 bytes --]
On Fri, Feb 28, 2020 at 06:12:20PM +0100, Wolfram Sang wrote:
> Only few drivers use this call, so drivers and I2C core are converted at
> once with this patch. By simply using i2c_new_client_device() instead of
> i2c_new_device(), we easily can return an ERRPTR for this function as
> well. To make out of tree users aware that something changed, the
> function is renamed to i2c_new_smbus_alert_device().
>
> Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Applied to for-next, thanks!
Thanks Luca for the review!
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 2/2] i2c: smbus: remove outdated references to irq level triggers
2020-02-28 17:12 ` [PATCH v2 2/2] i2c: smbus: remove outdated references to irq level triggers Wolfram Sang
2020-03-04 16:48 ` Luca Ceresoli
@ 2020-03-10 11:21 ` Wolfram Sang
1 sibling, 0 replies; 7+ messages in thread
From: Wolfram Sang @ 2020-03-10 11:21 UTC (permalink / raw)
To: Wolfram Sang; +Cc: linux-i2c, Benjamin Tissoires, Phil Reid, Robert Richter
[-- Attachment #1: Type: text/plain, Size: 350 bytes --]
On Fri, Feb 28, 2020 at 06:12:21PM +0100, Wolfram Sang wrote:
> IRQ levels are now handled within the IRQ core. Remove the forgotten
> references from the documentation.
>
> Fixes: 9b9f2b8bc2ac ("i2c: i2c-smbus: Use threaded irq for smbalert")
> Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Applied to for-next, thanks!
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2020-03-10 11:21 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-28 17:12 [PATCH v2 0/2] i2c: updates to SMBus alert setup Wolfram Sang
2020-02-28 17:12 ` [PATCH v2 1/2] i2c: convert SMBus alert setup function to return an ERRPTR Wolfram Sang
2020-03-04 16:48 ` Luca Ceresoli
2020-03-10 11:20 ` Wolfram Sang
2020-02-28 17:12 ` [PATCH v2 2/2] i2c: smbus: remove outdated references to irq level triggers Wolfram Sang
2020-03-04 16:48 ` Luca Ceresoli
2020-03-10 11:21 ` Wolfram Sang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).