i2c: convert SMBus alert setup function to return an ERRPTR
authorWolfram Sang <wsa+renesas@sang-engineering.com>
Fri, 28 Feb 2020 17:12:20 +0000 (18:12 +0100)
committerWolfram Sang <wsa@the-dreams.de>
Tue, 10 Mar 2020 11:19:52 +0000 (12:19 +0100)
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>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
Documentation/i2c/smbus-protocol.rst
drivers/i2c/busses/i2c-parport.c
drivers/i2c/busses/i2c-thunderx-pcidrv.c
drivers/i2c/busses/i2c-xlp9xx.c
drivers/i2c/i2c-core-smbus.c
drivers/i2c/i2c-smbus.c
include/linux/i2c-smbus.h

index c122ed2..c2e2963 100644 (file)
@@ -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.
 
index 81eb441..a535889 100644 (file)
@@ -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 */
index 19f8eec..7d3b9d6 100644 (file)
@@ -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;
 }
 
index 8a87397..823945b 100644 (file)
@@ -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;
 }
index 3ac426a..fd2b961 100644 (file)
@@ -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
index 7e2f5d0..809bcf8 100644 (file)
@@ -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)
 {
index 585ad6f..802aac0 100644 (file)
@@ -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)