Messages in this thread | | | From | Geert Uytterhoeven <> | Date | Fri, 21 Feb 2020 11:13:48 +0100 | Subject | Re: [RFC PATCH 7/7] i2c: core: hand over reserved devices when requesting ancillary addresses |
| |
Hi Wolfram,
On Thu, Feb 20, 2020 at 6:26 PM Wolfram Sang <wsa+renesas@sang-engineering.com> wrote: > With i2c_new_ancillary_address, we can check if the intended driver is > requesting a reserved address. Update the function to do these checks. > If the check passes, the "reserved" device will become a regular "dummy" > device. > > Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Thanks for your patch!
> --- a/drivers/i2c/i2c-core-base.c > +++ b/drivers/i2c/i2c-core-base.c > @@ -975,6 +975,8 @@ struct i2c_client *i2c_new_ancillary_device(struct i2c_client *client, > u16 default_addr) > { > struct device_node *np = client->dev.of_node; > + struct device *reserved_dev, *adapter_dev = &client->adapter->dev; > + struct i2c_client *reserved_client; > u32 addr = default_addr; > int i; > > @@ -984,7 +986,21 @@ struct i2c_client *i2c_new_ancillary_device(struct i2c_client *client, > of_property_read_u32_index(np, "reg", i, &addr); > } > > - dev_dbg(&client->adapter->dev, "Address for %s : 0x%x\n", name, addr); > + dev_info(adapter_dev, "Address for %s : 0x%x\n", name, addr); > + > + /* No need to scan muxes, siblings must sit on the same adapter */ > + reserved_dev = device_find_child(adapter_dev, &addr, __i2c_check_addr_busy); > + reserved_client = i2c_verify_client(reserved_dev); > + > + if (reserved_client) { > + if (reserved_client->dev.of_node != np || > + strcmp(reserved_client->name, I2C_RESERVED_DRV_NAME) != 0) > + return ERR_PTR(-EBUSY);
Missing put_device(reserved_dev).
> + > + strlcpy(reserved_client->name, I2C_DUMMY_DRV_NAME, sizeof(client->name)); > + return reserved_client; > + }
else put_device(reserved_dev)
(perhaps i2c_verify_client() checking dev was not such a great idea, as callers need to act on dev && !verified anyway?)
> + > return i2c_new_dummy_device(client->adapter, addr); > } > EXPORT_SYMBOL_GPL(i2c_new_ancillary_device);
Gr{oetje,eeting}s,
Geert
-- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds
| |