i2c: designware: Switch PCI driver to use i2c_dw_configure_master()
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Sat, 25 Apr 2020 13:44:46 +0000 (16:44 +0300)
committerWolfram Sang <wsa@kernel.org>
Wed, 13 May 2020 10:36:22 +0000 (12:36 +0200)
Since we have available helper to configure master mode, let's use it
in the PCI driver instead of spread open-coded variant.

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

index 7a0b65b5b5b59e56978356cca7ec63e4195c6910..d5e5abc03683fa330e7bebdabcfb9b44e891c653 100644 (file)
@@ -46,20 +46,14 @@ struct dw_scl_sda_cfg {
 
 struct dw_pci_controller {
        u32 bus_num;
-       u32 bus_cfg;
        u32 tx_fifo_depth;
        u32 rx_fifo_depth;
        u32 clk_khz;
-       u32 functionality;
        u32 flags;
        struct dw_scl_sda_cfg *scl_sda_cfg;
        int (*setup)(struct pci_dev *pdev, struct dw_pci_controller *c);
 };
 
-#define INTEL_MID_STD_CFG  (DW_IC_CON_MASTER |                 \
-                               DW_IC_CON_SLAVE_DISABLE |       \
-                               DW_IC_CON_RESTART_EN)
-
 /* Merrifield HCNT/LCNT/SDA hold time */
 static struct dw_scl_sda_cfg mrfld_config = {
        .ss_hcnt = 0x2f8,
@@ -88,10 +82,11 @@ static struct dw_scl_sda_cfg hsw_config = {
 
 static int mfld_setup(struct pci_dev *pdev, struct dw_pci_controller *c)
 {
+       struct dw_i2c_dev *dev = dev_get_drvdata(&pdev->dev);
+
        switch (pdev->device) {
        case 0x0817:
-               c->bus_cfg &= ~DW_IC_CON_SPEED_MASK;
-               c->bus_cfg |= DW_IC_CON_SPEED_STD;
+               dev->timings.bus_freq_hz = I2C_MAX_STANDARD_MODE_FREQ;
                /* fall through */
        case 0x0818:
        case 0x0819:
@@ -128,53 +123,41 @@ static int mrfld_setup(struct pci_dev *pdev, struct dw_pci_controller *c)
 static struct dw_pci_controller dw_pci_controllers[] = {
        [medfield] = {
                .bus_num = -1,
-               .bus_cfg   = INTEL_MID_STD_CFG | DW_IC_CON_SPEED_FAST,
                .tx_fifo_depth = 32,
                .rx_fifo_depth = 32,
-               .functionality = I2C_FUNC_10BIT_ADDR,
                .clk_khz      = 25000,
                .setup = mfld_setup,
        },
        [merrifield] = {
                .bus_num = -1,
-               .bus_cfg = INTEL_MID_STD_CFG | DW_IC_CON_SPEED_FAST,
                .tx_fifo_depth = 64,
                .rx_fifo_depth = 64,
-               .functionality = I2C_FUNC_10BIT_ADDR,
                .scl_sda_cfg = &mrfld_config,
                .setup = mrfld_setup,
        },
        [baytrail] = {
                .bus_num = -1,
-               .bus_cfg = INTEL_MID_STD_CFG | DW_IC_CON_SPEED_FAST,
                .tx_fifo_depth = 32,
                .rx_fifo_depth = 32,
-               .functionality = I2C_FUNC_10BIT_ADDR,
                .scl_sda_cfg = &byt_config,
        },
        [haswell] = {
                .bus_num = -1,
-               .bus_cfg = INTEL_MID_STD_CFG | DW_IC_CON_SPEED_FAST,
                .tx_fifo_depth = 32,
                .rx_fifo_depth = 32,
-               .functionality = I2C_FUNC_10BIT_ADDR,
                .scl_sda_cfg = &hsw_config,
        },
        [cherrytrail] = {
                .bus_num = -1,
-               .bus_cfg = INTEL_MID_STD_CFG | DW_IC_CON_SPEED_FAST,
                .tx_fifo_depth = 32,
                .rx_fifo_depth = 32,
-               .functionality = I2C_FUNC_10BIT_ADDR,
                .flags = MODEL_CHERRYTRAIL,
                .scl_sda_cfg = &byt_config,
        },
        [elkhartlake] = {
                .bus_num = -1,
-               .bus_cfg = INTEL_MID_STD_CFG | DW_IC_CON_SPEED_FAST,
                .tx_fifo_depth = 32,
                .rx_fifo_depth = 32,
-               .functionality = I2C_FUNC_10BIT_ADDR,
                .clk_khz = 100000,
        },
 };
@@ -250,14 +233,16 @@ static int i2c_dw_pci_probe(struct pci_dev *pdev,
        if (r < 0)
                return r;
 
-       dev->clk = NULL;
        dev->controller = controller;
        dev->get_clk_rate_khz = i2c_dw_get_clk_rate_khz;
+       dev->timings.bus_freq_hz = I2C_MAX_FAST_MODE_FREQ;
        dev->base = pcim_iomap_table(pdev)[0];
        dev->dev = &pdev->dev;
        dev->irq = pci_irq_vector(pdev, 0);
        dev->flags |= controller->flags;
 
+       pci_set_drvdata(pdev, dev);
+
        if (controller->setup) {
                r = controller->setup(pdev, controller);
                if (r) {
@@ -266,10 +251,8 @@ static int i2c_dw_pci_probe(struct pci_dev *pdev,
                }
        }
 
-       dev->functionality = controller->functionality |
-                               DW_IC_DEFAULT_FUNCTIONALITY;
+       i2c_dw_configure_master(dev);
 
-       dev->master_cfg = controller->bus_cfg;
        if (controller->scl_sda_cfg) {
                cfg = controller->scl_sda_cfg;
                dev->ss_hcnt = cfg->ss_hcnt;
@@ -279,8 +262,6 @@ static int i2c_dw_pci_probe(struct pci_dev *pdev,
                dev->sda_hold_time = cfg->sda_hold;
        }
 
-       pci_set_drvdata(pdev, dev);
-
        dev->tx_fifo_depth = controller->tx_fifo_depth;
        dev->rx_fifo_depth = controller->rx_fifo_depth;