i2c: make address check indpendent from client struct
[firefly-linux-kernel-4.4.55.git] / drivers / i2c / i2c-core.c
index fced494040a8bd7e94def4d2222d74abc785b682..4ffe06451081e86ede0cc1a9688d692db13305e9 100644 (file)
@@ -798,15 +798,15 @@ static unsigned short i2c_encode_flags_to_addr(struct i2c_client *client)
 
 /* This is a permissive address validity check, I2C address map constraints
  * are purposely not enforced, except for the general call address. */
-static int i2c_check_addr_validity(const struct i2c_client *client)
+static int i2c_check_addr_validity(unsigned addr, unsigned short flags)
 {
-       if (client->flags & I2C_CLIENT_TEN) {
+       if (flags & I2C_CLIENT_TEN) {
                /* 10-bit address, all values are valid */
-               if (client->addr > 0x3ff)
+               if (addr > 0x3ff)
                        return -EINVAL;
        } else {
                /* 7-bit address, reject the general call address */
-               if (client->addr == 0x00 || client->addr > 0x7f)
+               if (addr == 0x00 || addr > 0x7f)
                        return -EINVAL;
        }
        return 0;
@@ -984,8 +984,7 @@ i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info)
 
        strlcpy(client->name, info->type, sizeof(client->name));
 
-       /* Check for address validity */
-       status = i2c_check_addr_validity(client);
+       status = i2c_check_addr_validity(client->addr, client->flags);
        if (status) {
                dev_err(&adap->dev, "Invalid %d-bit I2C address 0x%02hx\n",
                        client->flags & I2C_CLIENT_TEN ? 10 : 7, client->addr);