[U-Boot] [PATCH v2 07/22] clock-uclass: allow disabling a peripheral clock
Simon Glass
sjg at chromium.org
Tue Jul 12 18:02:43 CEST 2016
+Stephen
Hi Benjamin,
On 20 June 2016 at 12:26, Benjamin Tietz <uboot at dresden.micronet24.de> wrote:
> From: Benjamin Tietz <benjamin at micronet24.de>
>
> Currently, clocks can be enabled, only. To be feature-complete - and allow
> a bit of power-saving in applications - disabling a clock should be
> possible, too.
>
> This extend the API of the DM clock driver to allow a clock to be disabled.
>
> The corresponding operation is optional for not breaking existing drivers.
What does this mean? I can't see how it is optional.
Also please can you rebase to mainline and resend, as the API has
changed (sorry).
> ---
> drivers/clk/clk-uclass.c | 10 ++++++++++
> include/clk.h | 18 ++++++++++++++++++
> 2 files changed, 28 insertions(+)
>
> diff --git a/drivers/clk/clk-uclass.c b/drivers/clk/clk-uclass.c
> index b483c1e..462f5f8 100644
> --- a/drivers/clk/clk-uclass.c
> +++ b/drivers/clk/clk-uclass.c
> @@ -44,6 +44,16 @@ int clk_enable(struct udevice *dev, int periph)
> return ops->enable(dev, periph);
> }
>
> +int clk_disable(struct udevice *dev, int periph)
> +{
> + struct clk_ops *ops = clk_get_ops(dev);
> +
> + if (!ops->disable)
> + return -ENOSYS;
> +
> + return ops->disable(dev, periph);
> +}
> +
> ulong clk_get_periph_rate(struct udevice *dev, int periph)
> {
> struct clk_ops *ops = clk_get_ops(dev);
> diff --git a/include/clk.h b/include/clk.h
> index ca20c3d..395f813 100644
> --- a/include/clk.h
> +++ b/include/clk.h
> @@ -43,6 +43,15 @@ struct clk_ops {
> int (*enable)(struct udevice *dev, int periph);
>
> /**
> + * disable() - Disable the clock for a peripheral
> + *
> + * @dev: clock provider
> + * @periph: Peripheral ID to enable
disable
> + * @return zero on success, or -ve error code
> + */
> + int (*disable)(struct udevice *dev, int periph);
> +
> + /**
> * get_periph_rate() - Get clock rate for a peripheral
> *
> * @dev: Device to check (UCLASS_CLK)
> @@ -90,6 +99,15 @@ ulong clk_set_rate(struct udevice *dev, ulong rate);
> int clk_enable(struct udevice *dev, int periph);
>
> /**
> + * clk_disable() - Disable the clock for a peripheral
> + *
> + * @dev: clock provider
> + * @periph: Peripheral ID to enable
> + * @return zero on success, or -ve error code
> + */
> +int clk_disable(struct udevice *dev, int periph);
> +
> +/**
> * clk_get_periph_rate() - Get current clock rate for a peripheral
> *
> * @dev: Device to check (UCLASS_CLK)
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
More information about the U-Boot
mailing list