i2c: sh_mobile: allow setup callback to return errno
authorWolfram Sang <wsa+renesas@sang-engineering.com>
Mon, 18 Dec 2017 21:57:57 +0000 (22:57 +0100)
committerWolfram Sang <wsa@the-dreams.de>
Mon, 15 Jan 2018 16:58:45 +0000 (17:58 +0100)
The setup callback will be more generic and, thus, need to be able to
return error codes. Change the return type to 'int' for that.

Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
drivers/i2c/busses/i2c-sh_mobile.c

index 1ac896e46b390c4b5329007c78c2052aaf719aae..a3a377a10fa7896922c0377fa0104be4d28f445c 100644 (file)
@@ -149,7 +149,7 @@ struct sh_mobile_i2c_data {
 
 struct sh_mobile_dt_config {
        int clks_per_count;
-       void (*setup)(struct sh_mobile_i2c_data *pd);
+       int (*setup)(struct sh_mobile_i2c_data *pd);
 };
 
 #define IIC_FLAG_HAS_ICIC67    (1 << 0)
@@ -749,7 +749,7 @@ static const struct i2c_algorithm sh_mobile_i2c_algorithm = {
  * r8a7740 chip has lasting errata on I2C I/O pad reset.
  * this is work-around for it.
  */
-static void sh_mobile_i2c_r8a7740_workaround(struct sh_mobile_i2c_data *pd)
+static int sh_mobile_i2c_r8a7740_workaround(struct sh_mobile_i2c_data *pd)
 {
        iic_set_clr(pd, ICCR, ICCR_ICE, 0);
        iic_rd(pd, ICCR); /* dummy read */
@@ -770,6 +770,8 @@ static void sh_mobile_i2c_r8a7740_workaround(struct sh_mobile_i2c_data *pd)
        udelay(10);
        iic_wr(pd, ICCR, ICCR_TRS);
        udelay(10);
+
+       return 0;
 }
 
 static const struct sh_mobile_dt_config default_dt_config = {
@@ -881,8 +883,11 @@ static int sh_mobile_i2c_probe(struct platform_device *dev)
        if (config) {
                pd->clks_per_count = config->clks_per_count;
 
-               if (config->setup)
-                       config->setup(pd);
+               if (config->setup) {
+                       ret = config->setup(pd);
+                       if (ret)
+                               return ret;
+               }
        }
 
        ret = sh_mobile_i2c_init(pd);