diff options
author | Wolfram Sang <wsa+renesas@sang-engineering.com> | 2015-05-14 08:40:05 -0400 |
---|---|---|
committer | Wolfram Sang <wsa@the-dreams.de> | 2015-05-31 19:22:50 -0400 |
commit | 0c7cab96ec413a69af86965d94fb650f01c5887a (patch) | |
tree | e281329d38ceb0988e9c7b701aa2bb07b0ce8b95 /drivers/i2c/i2c-core.c | |
parent | 976cf2056ccf1be1759f8c122d194c117c879e11 (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.c | 22 |
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 | } |