Re: [PATCH v2 1/5] interconnect: Add devm_of_icc_get_by_index() as exported API for users
Georgi Djakov <[email protected]>
| Newsgroups | org.kernel.vger.phone-devel,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-clk,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel,org.kernel.vger.linux-pm |
|---|---|
| Message-ID | <[email protected]> |
On 5/8/26 4:32 AM, Bjorn Andersson wrote: > On Fri, May 01, 2026 at 11:18:29AM +0200, Luca Weiss wrote: >> Users can use devm version of of_icc_get_by_index() to benefit from >> automatic resource release. >> >> Reviewed-by: Konrad Dybcio <[email protected]> >> Reviewed-by: Dmitry Baryshkov <[email protected]> >> Signed-off-by: Luca Weiss <[email protected]> > > Georgi, can I have an ack on this, or an immutable branch and a ping > once it's available? Hi Bjorn, please apply it. Acked-by: Georgi Djakov <[email protected]> Thanks, Georgi > > Thanks, > Bjorn > >> --- >> drivers/interconnect/core.c | 20 ++++++++++++++++++++ >> include/linux/interconnect.h | 6 ++++++ >> 2 files changed, 26 insertions(+) >> >> diff --git a/drivers/interconnect/core.c b/drivers/interconnect/core.c >> index 8569b78a1851..bc2e416dbcb2 100644 >> --- a/drivers/interconnect/core.c >> +++ b/drivers/interconnect/core.c >> @@ -443,6 +443,26 @@ struct icc_path *devm_of_icc_get(struct device *dev, const char *name) >> } >> EXPORT_SYMBOL_GPL(devm_of_icc_get); >> >> +struct icc_path *devm_of_icc_get_by_index(struct device *dev, int idx) >> +{ >> + struct icc_path **ptr, *path; >> + >> + ptr = devres_alloc(devm_icc_release, sizeof(*ptr), GFP_KERNEL); >> + if (!ptr) >> + return ERR_PTR(-ENOMEM); >> + >> + path = of_icc_get_by_index(dev, idx); >> + if (!IS_ERR(path)) { >> + *ptr = path; >> + devres_add(dev, ptr); >> + } else { >> + devres_free(ptr); >> + } >> + >> + return path; >> +} >> +EXPORT_SYMBOL_GPL(devm_of_icc_get_by_index); >> + >> /** >> * of_icc_get_by_index() - get a path handle from a DT node based on index >> * @dev: device pointer for the consumer device >> diff --git a/include/linux/interconnect.h b/include/linux/interconnect.h >> index 4b12821528a6..75a32ad0482e 100644 >> --- a/include/linux/interconnect.h >> +++ b/include/linux/interconnect.h >> @@ -47,6 +47,7 @@ struct icc_path *of_icc_get(struct device *dev, const char *name); >> struct icc_path *devm_of_icc_get(struct device *dev, const char *name); >> int devm_of_icc_bulk_get(struct device *dev, int num_paths, struct icc_bulk_data *paths); >> struct icc_path *of_icc_get_by_index(struct device *dev, int idx); >> +struct icc_path *devm_of_icc_get_by_index(struct device *dev, int idx); >> void icc_put(struct icc_path *path); >> int icc_enable(struct icc_path *path); >> int icc_disable(struct icc_path *path); >> @@ -79,6 +80,11 @@ static inline struct icc_path *of_icc_get_by_index(struct device *dev, int idx) >> return NULL; >> } >> >> +static inline struct icc_path *devm_of_icc_get_by_index(struct device *dev, int idx) >> +{ >> + return NULL; >> +} >> + >> static inline void icc_put(struct icc_path *path) >> { >> } >> >> -- >> 2.54.0 >>