|
@@ -1158,6 +1158,16 @@ i2c_sysfs_new_device(struct device *dev, struct device_attribute *attr,
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if ((info.addr & I2C_ADDR_OFFSET_TEN_BIT) == I2C_ADDR_OFFSET_TEN_BIT) {
|
|
|
|
+ info.addr &= ~I2C_ADDR_OFFSET_TEN_BIT;
|
|
|
|
+ info.flags |= I2C_CLIENT_TEN;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (info.addr & I2C_ADDR_OFFSET_SLAVE) {
|
|
|
|
+ info.addr &= ~I2C_ADDR_OFFSET_SLAVE;
|
|
|
|
+ info.flags |= I2C_CLIENT_SLAVE;
|
|
|
|
+ }
|
|
|
|
+
|
|
client = i2c_new_device(adap, &info);
|
|
client = i2c_new_device(adap, &info);
|
|
if (!client)
|
|
if (!client)
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
@@ -1209,7 +1219,7 @@ i2c_sysfs_delete_device(struct device *dev, struct device_attribute *attr,
|
|
i2c_adapter_depth(adap));
|
|
i2c_adapter_depth(adap));
|
|
list_for_each_entry_safe(client, next, &adap->userspace_clients,
|
|
list_for_each_entry_safe(client, next, &adap->userspace_clients,
|
|
detected) {
|
|
detected) {
|
|
- if (client->addr == addr) {
|
|
|
|
|
|
+ if (i2c_encode_flags_to_addr(client) == addr) {
|
|
dev_info(dev, "%s: Deleting device %s at 0x%02hx\n",
|
|
dev_info(dev, "%s: Deleting device %s at 0x%02hx\n",
|
|
"delete_device", client->name, client->addr);
|
|
"delete_device", client->name, client->addr);
|
|
|
|
|