[PATCH 1/2] reset: uniphier-glue: Use reset_control_bulk API

Kunihiko Hayashi hayashi.kunihiko at socionext.com
Wed Dec 15 16:32:27 PST 2021


Hi Philipp,

On 2021/12/15 18:38, Philipp Zabel wrote:
> This driver already uses the clk_bulk API. Simplify the driver by using
> the reset_control_bulk API as well.

Looks good to me.
It makes sense to use reset_control_bulk API.

Reviewed-by: Kunihiko Hayashi <hayashi.kunihiko at socionext.com>

Thank you,

> 
> Signed-off-by: Philipp Zabel <p.zabel at pengutronix.de>
> ---
>   drivers/reset/reset-uniphier-glue.c | 33 ++++++++++++-----------------
>   1 file changed, 14 insertions(+), 19 deletions(-)
> 
> diff --git a/drivers/reset/reset-uniphier-glue.c
> b/drivers/reset/reset-uniphier-glue.c
> index 908c1d5bc41e..9b22c4a91d77 100644
> --- a/drivers/reset/reset-uniphier-glue.c
> +++ b/drivers/reset/reset-uniphier-glue.c
> @@ -23,7 +23,7 @@ struct uniphier_glue_reset_soc_data {
>   
>   struct uniphier_glue_reset_priv {
>   	struct clk_bulk_data clk[MAX_CLKS];
> -	struct reset_control *rst[MAX_RSTS];
> +	struct reset_control_bulk_data rst[MAX_RSTS];
>   	struct reset_simple_data rdata;
>   	const struct uniphier_glue_reset_soc_data *data;
>   };
> @@ -34,8 +34,7 @@ static int uniphier_glue_reset_probe(struct
> platform_device *pdev)
>   	struct uniphier_glue_reset_priv *priv;
>   	struct resource *res;
>   	resource_size_t size;
> -	const char *name;
> -	int i, ret, nr;
> +	int i, ret;
>   
>   	priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
>   	if (!priv)
> @@ -58,22 +57,20 @@ static int uniphier_glue_reset_probe(struct
> platform_device *pdev)
>   	if (ret)
>   		return ret;
>   
> -	for (i = 0; i < priv->data->nrsts; i++) {
> -		name = priv->data->reset_names[i];
> -		priv->rst[i] = devm_reset_control_get_shared(dev, name);
> -		if (IS_ERR(priv->rst[i]))
> -			return PTR_ERR(priv->rst[i]);
> -	}
> +	for (i = 0; i < priv->data->nrsts; i++)
> +		priv->rst[i].id = priv->data->reset_names[i];
> +	ret = devm_reset_control_bulk_get_shared(dev, priv->data->nrsts,
> +						 priv->rst);
> +	if (ret)
> +		return ret;
>   
>   	ret = clk_bulk_prepare_enable(priv->data->nclks, priv->clk);
>   	if (ret)
>   		return ret;
>   
> -	for (nr = 0; nr < priv->data->nrsts; nr++) {
> -		ret = reset_control_deassert(priv->rst[nr]);
> -		if (ret)
> -			goto out_rst_assert;
> -	}
> +	ret = reset_control_bulk_deassert(priv->data->nrsts, priv->rst);
> +	if (ret)
> +		goto out_clk_disable;
>   
>   	spin_lock_init(&priv->rdata.lock);
>   	priv->rdata.rcdev.owner = THIS_MODULE;
> @@ -91,9 +88,9 @@ static int uniphier_glue_reset_probe(struct
> platform_device *pdev)
>   	return 0;
>   
>   out_rst_assert:
> -	while (nr--)
> -		reset_control_assert(priv->rst[nr]);
> +	reset_control_bulk_assert(priv->data->nrsts, priv->rst);
>   
> +out_clk_disable:
>   	clk_bulk_disable_unprepare(priv->data->nclks, priv->clk);
>   
>   	return ret;
> @@ -102,10 +99,8 @@ static int uniphier_glue_reset_probe(struct
> platform_device *pdev)
>   static int uniphier_glue_reset_remove(struct platform_device *pdev)
>   {
>   	struct uniphier_glue_reset_priv *priv =
> platform_get_drvdata(pdev);
> -	int i;
>   
> -	for (i = 0; i < priv->data->nrsts; i++)
> -		reset_control_assert(priv->rst[i]);
> +	reset_control_bulk_assert(priv->data->nrsts, priv->rst);
>   
>   	clk_bulk_disable_unprepare(priv->data->nclks, priv->clk);
>   
> 

---
Best Regards
Kunihiko Hayashi



More information about the linux-arm-kernel mailing list