[PATCH 1/2] i2c: implement of_i2c_register_devices_by_node()
Sascha Hauer
sha at pengutronix.de
Mon Sep 12 02:04:09 PDT 2022
On Mon, Sep 05, 2022 at 12:36:12PM +0200, Ahmad Fatoum wrote:
> i2c controllers probe the devices on their bus themselves, so in the
> case the i2c controller was already probed, we currently have no way to
> have it reread the device tree after fixing it up or applying an
> overlay. Add a new helper that retriggers the device creation.
>
> Signed-off-by: Ahmad Fatoum <a.fatoum at pengutronix.de>
> ---
> drivers/i2c/i2c.c | 20 ++++++++++++++++++++
> include/i2c/i2c.h | 1 +
> 2 files changed, 21 insertions(+)
Applied, thanks
Sascha
>
> diff --git a/drivers/i2c/i2c.c b/drivers/i2c/i2c.c
> index b24fd88f5b39..e70e51618850 100644
> --- a/drivers/i2c/i2c.c
> +++ b/drivers/i2c/i2c.c
> @@ -427,6 +427,12 @@ static void of_i2c_register_devices(struct i2c_adapter *adap)
> const __be32 *addr;
> int len;
>
> + if (n->dev) {
> + dev_dbg(&adap->dev, "of_i2c: skipping already registered %s\n",
> + dev_name(n->dev));
> + continue;
> + }
> +
> of_modalias_node(n, info.type, I2C_NAME_SIZE);
>
> info.of_node = n;
> @@ -452,6 +458,20 @@ static void of_i2c_register_devices(struct i2c_adapter *adap)
> }
> }
>
> +int of_i2c_register_devices_by_node(struct device_node *node)
> +{
> + struct i2c_adapter *adap;
> +
> + adap = of_find_i2c_adapter_by_node(node);
> + if (!adap)
> + return -ENODEV;
> + if (IS_ERR(adap))
> + return PTR_ERR(adap);
> +
> + of_i2c_register_devices(adap);
> + return 0;
> +}
> +
> /**
> * i2c_new_dummy - return a new i2c device bound to a dummy driver
> * @adapter: the adapter managing the device
> diff --git a/include/i2c/i2c.h b/include/i2c/i2c.h
> index 7207b1180e1d..f5e2dc511ed1 100644
> --- a/include/i2c/i2c.h
> +++ b/include/i2c/i2c.h
> @@ -295,6 +295,7 @@ static inline int i2c_register_board_info(int busnum,
> extern int i2c_add_numbered_adapter(struct i2c_adapter *adapter);
> struct i2c_adapter *i2c_get_adapter(int busnum);
> struct i2c_adapter *of_find_i2c_adapter_by_node(struct device_node *node);
> +int of_i2c_register_devices_by_node(struct device_node *node);
> struct i2c_client *of_find_i2c_device_by_node(struct device_node *node);
>
> void i2c_parse_fw_timings(struct device_d *dev, struct i2c_timings *t, bool use_defaults);
> --
> 2.30.2
>
>
>
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
More information about the barebox
mailing list