Re: [PATCH v5 04/10] regulator: Do pure DT regulator lookup in of_regulator_bulk_get_all()
From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date: 2024-08-22 13:54:21
Also in:
chrome-platform, linux-arm-kernel, linux-i2c, linux-mediatek, lkml
On Thu, Aug 22, 2024 at 05:19:57PM +0800, Chen-Yu Tsai wrote:
The to-be-introduced I2C component prober needs to enable regulator supplies (and toggle GPIO pins) for the various components it intends to probe. To support this, a new "pure DT lookup" method for getting regulator supplies is needed, since the device normally requesting the supply won't get created until after the component is probed to be available. Convert the existing of_regulator_bulk_get_all() for this purpose. This function has no in-tree users, as the original patch [1] that used it was never landed. This patch changes the function ABI, but it is straightforward to convert users. The underlying code that supports the existing regulator_get*() functions has been reworked in previous patches to support this specific case. An internal OF-specific version of regulator_get(), of_regulator_get_optional(), is added for this.
[1] https://lore.kernel.org/all/20231220203537.83479-2-jernej.skrabec@gmail.com/ (local)
Make it Link tag Link: https://lore.kernel.org/all/20231220203537.83479-2-jernej.skrabec@gmail.com/ (local) [1] Signed-off-by: Chen-Yu Tsai <wenst@chromium.org> ...
/* first do a dt based lookup */
if (dev && dev->of_node) {if (dev_of_node())
- r = of_regulator_dev_lookup(dev, supply); + r = of_regulator_dev_lookup(dev, dev->of_node, supply);
dev_of_node()
if (!IS_ERR(r)) return r; if (PTR_ERR(r) == -EPROBE_DEFER)
...
/** * of_get_regulator - get a regulator device node based on supply name - * @dev: Device pointer for the consumer (of regulator) device + * @dev: Device pointer for dev_printk messages
dev_printk()
+ * @node: Device node pointer for supply property lookup * @supply: regulator supply name * * Extract the regulator device node corresponding to the supply name. * returns the device node corresponding to the regulator if found, else * returns NULL. */
...
/** of_regulator_dev_lookup - lookup a regulator device with device tree only - * @dev: Device pointer for regulator supply lookup. + * @dev: Device pointer for dev_printk messages.
Ditto.
quoted hunk ↗ jump to hunk
+ * @node: Device node pointer for regulator supply lookup. * @supply: Supply name or regulator ID. * * If successful, returns a struct regulator_dev that corresponds to the name@@ -636,13 +639,13 @@ static struct regulator_dev *of_find_regulator_by_node(struct device_node *np) * -ENODEV if lookup fails permanently, -EPROBE_DEFER if lookup could succeed * in the future. */
...
+/** + * of_regulator_get_optional - get optional regulator via device tree lookup + * @dev: device used for dev_printk messages
Ditto.
+ * @node: device node for regulator "consumer" + * @id: Supply name + * + * Returns a struct regulator corresponding to the regulator producer, + * or IS_ERR() condition containing errno. + * + * This is intended for use by consumers that want to get a regulator + * supply directly from a device node, and can and want to deal with + * absence of such supplies. This will _not_ consider supply aliases. + * See regulator_dev_lookup().
Fix kernel-doc warning.
+ */
-- With Best Regards, Andy Shevchenko