i2c: rcar: Consolidate timings calls in rcar_i2c_clock_calculate()
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Tue, 24 Mar 2020 12:32:13 +0000 (14:32 +0200)
committerWolfram Sang <wsa@the-dreams.de>
Tue, 24 Mar 2020 20:59:33 +0000 (21:59 +0100)
Move i2c_parse_fw_timings() to rcar_i2c_clock_calculate() to consolidate
timings calls in one place.

While here, replace hard coded values with standard bus frequency definitions.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Tested-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
drivers/i2c/busses/i2c-rcar.c

index c8b57de..2501364 100644 (file)
@@ -235,17 +235,20 @@ static int rcar_i2c_bus_barrier(struct rcar_i2c_priv *priv)
        return i2c_recover_bus(&priv->adap);
 }
 
-static int rcar_i2c_clock_calculate(struct rcar_i2c_priv *priv, struct i2c_timings *t)
+static int rcar_i2c_clock_calculate(struct rcar_i2c_priv *priv)
 {
        u32 scgd, cdf, round, ick, sum, scl, cdf_width;
        unsigned long rate;
        struct device *dev = rcar_i2c_priv_to_dev(priv);
+       struct i2c_timings i2c_t = {
+               .bus_freq_hz            = I2C_MAX_STANDARD_MODE_FREQ,
+               .scl_fall_ns            = 35,
+               .scl_rise_ns            = 200,
+               .scl_int_delay_ns       = 50,
+       }, *t = &i2c_t;
 
        /* Fall back to previously used values if not supplied */
-       t->bus_freq_hz = t->bus_freq_hz ?: 100000;
-       t->scl_fall_ns = t->scl_fall_ns ?: 35;
-       t->scl_rise_ns = t->scl_rise_ns ?: 200;
-       t->scl_int_delay_ns = t->scl_int_delay_ns ?: 50;
+       i2c_parse_fw_timings(dev, &i2c_t, false);
 
        switch (priv->devtype) {
        case I2C_RCAR_GEN1:
@@ -920,7 +923,6 @@ static int rcar_i2c_probe(struct platform_device *pdev)
        struct rcar_i2c_priv *priv;
        struct i2c_adapter *adap;
        struct device *dev = &pdev->dev;
-       struct i2c_timings i2c_t = { 0 };
        int ret;
 
        /* Otherwise logic will break because some bytes must always use PIO */
@@ -957,8 +959,6 @@ static int rcar_i2c_probe(struct platform_device *pdev)
        i2c_set_adapdata(adap, priv);
        strlcpy(adap->name, pdev->name, sizeof(adap->name));
 
-       i2c_parse_fw_timings(dev, &i2c_t, false);
-
        /* Init DMA */
        sg_init_table(&priv->sg, 1);
        priv->dma_direction = DMA_NONE;
@@ -967,7 +967,7 @@ static int rcar_i2c_probe(struct platform_device *pdev)
        /* Activate device for clock calculation */
        pm_runtime_enable(dev);
        pm_runtime_get_sync(dev);
-       ret = rcar_i2c_clock_calculate(priv, &i2c_t);
+       ret = rcar_i2c_clock_calculate(priv);
        if (ret < 0)
                goto out_pm_put;