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?

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
> 

Reply via email to