[U-Boot] [PATCH v4 09/13] dm: clk: Define clk_get_by_id() for clk operations

Stefano Babic sbabic at denx.de
Sat Jun 8 15:24:46 UTC 2019



On 17/05/19 00:10, Lukasz Majewski wrote:
> This commit adds the clk_get_by_id() function, which is responsible
> for getting the udevice with matching clk->id. Such approach allows
> re-usage of inherit DM list relationship for the same class (UCLASS_CLK).
> As a result - we don't need any other external list - it is just enough
> to look for UCLASS_CLK related udevices.
> 
> Signed-off-by: Lukasz Majewski <lukma at denx.de>
> 
> ---
> 
> Changes in v4: None
> Changes in v3:
> - Replace -ENODEV with -ENOENT
> - Use **clkp instead of **c
> 
>  drivers/clk/clk-uclass.c | 22 ++++++++++++++++++++++
>  include/clk.h            | 11 +++++++++++
>  2 files changed, 33 insertions(+)
> 
> diff --git a/drivers/clk/clk-uclass.c b/drivers/clk/clk-uclass.c
> index ea43871112..6f054396e3 100644
> --- a/drivers/clk/clk-uclass.c
> +++ b/drivers/clk/clk-uclass.c
> @@ -490,6 +490,28 @@ int clk_disable_bulk(struct clk_bulk *bulk)
>  	return 0;
>  }
>  
> +int clk_get_by_id(ulong id, struct clk **clkp)
> +{
> +	struct udevice *dev;
> +	struct uclass *uc;
> +	int ret;
> +
> +	ret = uclass_get(UCLASS_CLK, &uc);
> +	if (ret)
> +		return ret;
> +
> +	uclass_foreach_dev(dev, uc) {
> +		struct clk *clk = (struct clk *)dev_get_driver_data(dev);
> +
> +		if (clk && clk->id == id) {
> +			*clkp = clk;
> +			return 0;
> +		}
> +	}
> +
> +	return -ENOENT;
> +}
> +
>  UCLASS_DRIVER(clk) = {
>  	.id		= UCLASS_CLK,
>  	.name		= "clk",
> diff --git a/include/clk.h b/include/clk.h
> index 955699eb18..32ac2386ed 100644
> --- a/include/clk.h
> +++ b/include/clk.h
> @@ -345,4 +345,15 @@ static inline bool clk_valid(struct clk *clk)
>  {
>  	return !!clk->dev;
>  }
> +
> +/**
> + * clk_get_by_id() - Get the clock by its ID
> + *
> + * @id:	The clock ID to search for
> + *
> + * @clkp:	A pointer to clock struct that has been found among added clocks
> + *              to UCLASS_CLK
> + * @return zero on success, or -ENOENT on error
> + */
> +int clk_get_by_id(ulong id, struct clk **clkp);
>  #endif
> 

Reviewed-by: Stefano Babic <sbabic at denx.de>

Best regards,
Stefano Babic
-- 
=====================================================================
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
=====================================================================


More information about the U-Boot mailing list