[PATCH 4/8] clk: qcom: add support for power domains uclass

Dan Carpenter dan.carpenter at linaro.org
Thu Feb 29 15:49:28 CET 2024


On Thu, Feb 29, 2024 at 02:21:08PM +0000, Volodymyr Babchuk wrote:
> @@ -223,7 +229,7 @@ U_BOOT_DRIVER(qcom_clk) = {
>  int qcom_cc_bind(struct udevice *parent)
>  {
>  	struct msm_clk_data *data = (struct msm_clk_data *)dev_get_driver_data(parent);
> -	struct udevice *clkdev, *rstdev;
> +	struct udevice *clkdev, *rstdev, *pwrdev;
>  	struct driver *drv;
>  	int ret;
>  
> @@ -253,6 +259,20 @@ int qcom_cc_bind(struct udevice *parent)
>  	if (ret)
>  		device_unbind(clkdev);

Change this to:

	if (ret)
		goto unbind_clkdev;

>  
> +	if (!data->power_domains)
> +		return ret;


Then this becomes:

	if (!data->power_domains)
		return 0;

> +
> +	/* Get a handle to the common power domain handler */
> +	drv = lists_driver_lookup_name("qcom_power");
> +	if (!drv)
> +		return -ENOENT;

	if (!drv) {
		ret = -ENOENT;
		goto unbind_rstdev;
	}

> +
> +	/* Register the power domain controller */
> +	ret = device_bind_with_driver_data(parent, drv, "qcom_power", (ulong)data,
> +					   dev_ofnode(parent), &pwrdev);
> +	if (ret)
> +		device_unbind(pwrdev);

pwrdev wasn't bound.  Free the last *successful* allocation which was
still rstdev.

	if (ret)
		goto unbind_rstdev;

	return 0;

unbind_rstdev:
	device_unbind(rstdev);
unbind_clkdev:
	device_unbind(clkdev);

	return ret;

> +
>  	return ret;
>  }
>  

regards,
dan carpenter


More information about the U-Boot mailing list