aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/i2c/i2c-core.c
diff options
context:
space:
mode:
authorWolfram Sang <wsa+renesas@sang-engineering.com>2015-05-14 08:40:05 -0400
committerWolfram Sang <wsa@the-dreams.de>2015-05-31 19:22:50 -0400
commit0c7cab96ec413a69af86965d94fb650f01c5887a (patch)
treee281329d38ceb0988e9c7b701aa2bb07b0ce8b95 /drivers/i2c/i2c-core.c
parent976cf2056ccf1be1759f8c122d194c117c879e11 (diff)
i2c: slave: add error messages to slave core
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>
Diffstat (limited to 'drivers/i2c/i2c-core.c')
-rw-r--r--drivers/i2c/i2c-core.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
index 987c124432c5..2a627eb0365b 100644
--- a/drivers/i2c/i2c-core.c
+++ b/drivers/i2c/i2c-core.c
@@ -2914,18 +2914,24 @@ int i2c_slave_register(struct i2c_client *client, i2c_slave_cb_t slave_cb)
2914{ 2914{
2915 int ret; 2915 int ret;
2916 2916
2917 if (!client || !slave_cb) 2917 if (!client || !slave_cb) {
2918 WARN(1, "insufficent data\n");
2918 return -EINVAL; 2919 return -EINVAL;
2920 }
2919 2921
2920 if (!(client->flags & I2C_CLIENT_TEN)) { 2922 if (!(client->flags & I2C_CLIENT_TEN)) {
2921 /* Enforce stricter address checking */ 2923 /* Enforce stricter address checking */
2922 ret = i2c_check_addr_validity(client->addr); 2924 ret = i2c_check_addr_validity(client->addr);
2923 if (ret) 2925 if (ret) {
2926 dev_err(&client->dev, "%s: invalid address\n", __func__);
2924 return ret; 2927 return ret;
2928 }
2925 } 2929 }
2926 2930
2927 if (!client->adapter->algo->reg_slave) 2931 if (!client->adapter->algo->reg_slave) {
2932 dev_err(&client->dev, "%s: not supported by adapter\n", __func__);
2928 return -EOPNOTSUPP; 2933 return -EOPNOTSUPP;
2934 }
2929 2935
2930 client->slave_cb = slave_cb; 2936 client->slave_cb = slave_cb;
2931 2937
@@ -2933,8 +2939,10 @@ int i2c_slave_register(struct i2c_client *client, i2c_slave_cb_t slave_cb)
2933 ret = client->adapter->algo->reg_slave(client); 2939 ret = client->adapter->algo->reg_slave(client);
2934 i2c_unlock_adapter(client->adapter); 2940 i2c_unlock_adapter(client->adapter);
2935 2941
2936 if (ret) 2942 if (ret) {
2937 client->slave_cb = NULL; 2943 client->slave_cb = NULL;
2944 dev_err(&client->dev, "%s: adapter returned error %d\n", __func__, ret);
2945 }
2938 2946
2939 return ret; 2947 return ret;
2940} 2948}
@@ -2944,8 +2952,10 @@ int i2c_slave_unregister(struct i2c_client *client)
2944{ 2952{
2945 int ret; 2953 int ret;
2946 2954
2947 if (!client->adapter->algo->unreg_slave) 2955 if (!client->adapter->algo->unreg_slave) {
2956 dev_err(&client->dev, "%s: not supported by adapter\n", __func__);
2948 return -EOPNOTSUPP; 2957 return -EOPNOTSUPP;
2958 }
2949 2959
2950 i2c_lock_adapter(client->adapter); 2960 i2c_lock_adapter(client->adapter);
2951 ret = client->adapter->algo->unreg_slave(client); 2961 ret = client->adapter->algo->unreg_slave(client);
@@ -2953,6 +2963,8 @@ int i2c_slave_unregister(struct i2c_client *client)
2953 2963
2954 if (ret == 0) 2964 if (ret == 0)
2955 client->slave_cb = NULL; 2965 client->slave_cb = NULL;
2966 else
2967 dev_err(&client->dev, "%s: adapter returned error %d\n", __func__, ret);
2956 2968
2957 return ret; 2969 return ret;
2958} 2970}