i2c: slave: add error messages to slave core
authorWolfram Sang <wsa+renesas@sang-engineering.com>
Thu, 14 May 2015 12:40:05 +0000 (14:40 +0200)
committerWolfram Sang <wsa@the-dreams.de>
Sun, 31 May 2015 23:22:50 +0000 (08:22 +0900)
Inform users what went wrong from the core, so drivers don't have to do
it.

Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Acked-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
drivers/i2c/i2c-core.c

index 987c124432c501f7a5cabb83bdc638c0f337fcb7..2a627eb0365b519a02e2e42c98f989c4eefe0a77 100644 (file)
@@ -2914,18 +2914,24 @@ int i2c_slave_register(struct i2c_client *client, i2c_slave_cb_t slave_cb)
 {
        int ret;
 
-       if (!client || !slave_cb)
+       if (!client || !slave_cb) {
+               WARN(1, "insufficent data\n");
                return -EINVAL;
+       }
 
        if (!(client->flags & I2C_CLIENT_TEN)) {
                /* Enforce stricter address checking */
                ret = i2c_check_addr_validity(client->addr);
-               if (ret)
+               if (ret) {
+                       dev_err(&client->dev, "%s: invalid address\n", __func__);
                        return ret;
+               }
        }
 
-       if (!client->adapter->algo->reg_slave)
+       if (!client->adapter->algo->reg_slave) {
+               dev_err(&client->dev, "%s: not supported by adapter\n", __func__);
                return -EOPNOTSUPP;
+       }
 
        client->slave_cb = slave_cb;
 
@@ -2933,8 +2939,10 @@ int i2c_slave_register(struct i2c_client *client, i2c_slave_cb_t slave_cb)
        ret = client->adapter->algo->reg_slave(client);
        i2c_unlock_adapter(client->adapter);
 
-       if (ret)
+       if (ret) {
                client->slave_cb = NULL;
+               dev_err(&client->dev, "%s: adapter returned error %d\n", __func__, ret);
+       }
 
        return ret;
 }
@@ -2944,8 +2952,10 @@ int i2c_slave_unregister(struct i2c_client *client)
 {
        int ret;
 
-       if (!client->adapter->algo->unreg_slave)
+       if (!client->adapter->algo->unreg_slave) {
+               dev_err(&client->dev, "%s: not supported by adapter\n", __func__);
                return -EOPNOTSUPP;
+       }
 
        i2c_lock_adapter(client->adapter);
        ret = client->adapter->algo->unreg_slave(client);
@@ -2953,6 +2963,8 @@ int i2c_slave_unregister(struct i2c_client *client)
 
        if (ret == 0)
                client->slave_cb = NULL;
+       else
+               dev_err(&client->dev, "%s: adapter returned error %d\n", __func__, ret);
 
        return ret;
 }