|
@@ -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);
|