i2c: designware-pci: Switch to use i2c_new_ccgx_ucsi()
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Wed, 5 Jan 2022 14:19:35 +0000 (16:19 +0200)
committerWolfram Sang <wsa@kernel.org>
Tue, 15 Feb 2022 09:05:07 +0000 (10:05 +0100)
Instead of open coded variant switch to use i2c_new_ccgx_ucsi().

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Signed-off-by: Wolfram Sang <wsa@kernel.org>
drivers/i2c/busses/Kconfig
drivers/i2c/busses/i2c-designware-pcidrv.c

index df3ecbe..0e6070b 100644 (file)
@@ -590,6 +590,7 @@ config I2C_DESIGNWARE_PCI
        tristate "Synopsys DesignWare PCI"
        depends on PCI
        select I2C_DESIGNWARE_CORE
+       select I2C_CCGX_UCSI
        help
          If you say yes to this option, support will be included for the
          Synopsys DesignWare I2C adapter. Only master mode is supported.
index ef4250f..2782ddd 100644 (file)
@@ -24,6 +24,7 @@
 #include <linux/slab.h>
 
 #include "i2c-designware-core.h"
+#include "i2c-ccgx-ucsi.h"
 
 #define DRIVER_NAME "i2c-designware-pci"
 #define AMD_CLK_RATE_HZ        100000
@@ -125,26 +126,6 @@ static int mfld_setup(struct pci_dev *pdev, struct dw_pci_controller *c)
        return -ENODEV;
 }
 
- /*
-  * TODO find a better way how to deduplicate instantiation
-  * of USB PD slave device from nVidia GPU driver.
-  */
-static int navi_amd_register_client(struct dw_i2c_dev *dev)
-{
-       struct i2c_board_info   info;
-
-       memset(&info, 0, sizeof(struct i2c_board_info));
-       strscpy(info.type, "ccgx-ucsi", I2C_NAME_SIZE);
-       info.addr = 0x08;
-       info.irq = dev->irq;
-
-       dev->slave = i2c_new_client_device(&dev->adapter, &info);
-       if (IS_ERR(dev->slave))
-               return PTR_ERR(dev->slave);
-
-       return 0;
-}
-
 static int navi_amd_setup(struct pci_dev *pdev, struct dw_pci_controller *c)
 {
        struct dw_i2c_dev *dev = dev_get_drvdata(&pdev->dev);
@@ -325,11 +306,10 @@ static int i2c_dw_pci_probe(struct pci_dev *pdev,
        }
 
        if ((dev->flags & MODEL_MASK) == MODEL_AMD_NAVI_GPU) {
-               r = navi_amd_register_client(dev);
-               if (r) {
-                       dev_err(dev->dev, "register client failed with %d\n", r);
-                       return r;
-               }
+               dev->slave = i2c_new_ccgx_ucsi(&dev->adapter, dev->irq, NULL);
+               if (IS_ERR(dev->slave))
+                       return dev_err_probe(dev->dev, PTR_ERR(dev->slave),
+                                            "register UCSI failed\n");
        }
 
        pm_runtime_set_autosuspend_delay(&pdev->dev, 1000);