diff mbox

[v2,4/9] clk: qcom: create virtual child device for TSENS

Message ID 1442384603-26053-5-git-send-email-rnayak@codeaurora.org (mailing list archive)
State Superseded, archived
Delegated to: Eduardo Valentin
Headers show

Commit Message

Rajendra Nayak Sept. 16, 2015, 6:23 a.m. UTC
8960 family of devices have TSENS as part of GCC in hardware.
Hence DT would represent a GCC node with GCC properties as well
as TSENS. Create a virtual platform child device here for TSENS
so the driver can probe it and use the parent (GCC) to extract DT
properties.

Suggested-by: Stephen Boyd <sboyd@codeaurora.org>
Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org>
---
 drivers/clk/qcom/gcc-msm8960.c | 23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

Comments

Stephen Boyd Sept. 16, 2015, 10:39 p.m. UTC | #1
On 09/16, Rajendra Nayak wrote:
> @@ -3520,7 +3522,26 @@ static int gcc_msm8960_probe(struct platform_device *pdev)
>  	if (IS_ERR(clk))
>  		return PTR_ERR(clk);
>  
> -	return qcom_cc_probe(pdev, match->data);
> +	ret = qcom_cc_probe(pdev, match->data);
> +	if (ret)
> +		return ret;
> +
> +	tsens = platform_device_alloc("qcom-tsens", -1);
> +	if (!tsens) {
> +		ret = -ENOMEM;
> +		goto err_alloc;
> +	}
> +
> +	tsens->dev.parent = &pdev->dev;
> +	ret = platform_device_add(tsens);
> +	if (ret)
> +		goto err_add;

platform_device_register_data() instead of all these lines? We
should probably remove the device when this driver is removed
too.

> +	return 0;
Rajendra Nayak Sept. 21, 2015, 4:28 a.m. UTC | #2
On 09/17/2015 04:09 AM, Stephen Boyd wrote:
> On 09/16, Rajendra Nayak wrote:
>> @@ -3520,7 +3522,26 @@ static int gcc_msm8960_probe(struct platform_device *pdev)
>>   	if (IS_ERR(clk))
>>   		return PTR_ERR(clk);
>>
>> -	return qcom_cc_probe(pdev, match->data);
>> +	ret = qcom_cc_probe(pdev, match->data);
>> +	if (ret)
>> +		return ret;
>> +
>> +	tsens = platform_device_alloc("qcom-tsens", -1);
>> +	if (!tsens) {
>> +		ret = -ENOMEM;
>> +		goto err_alloc;
>> +	}
>> +
>> +	tsens->dev.parent = &pdev->dev;
>> +	ret = platform_device_add(tsens);
>> +	if (ret)
>> +		goto err_add;
>
> platform_device_register_data() instead of all these lines? We
> should probably remove the device when this driver is removed
> too.

Thanks Stephen, I'll fix it.
diff mbox

Patch

diff --git a/drivers/clk/qcom/gcc-msm8960.c b/drivers/clk/qcom/gcc-msm8960.c
index aa294b1..51db3a5 100644
--- a/drivers/clk/qcom/gcc-msm8960.c
+++ b/drivers/clk/qcom/gcc-msm8960.c
@@ -3506,6 +3506,8 @@  static int gcc_msm8960_probe(struct platform_device *pdev)
 	struct clk *clk;
 	struct device *dev = &pdev->dev;
 	const struct of_device_id *match;
+	struct platform_device *tsens;
+	int ret;
 
 	match = of_match_device(gcc_msm8960_match_table, &pdev->dev);
 	if (!match)
@@ -3520,7 +3522,26 @@  static int gcc_msm8960_probe(struct platform_device *pdev)
 	if (IS_ERR(clk))
 		return PTR_ERR(clk);
 
-	return qcom_cc_probe(pdev, match->data);
+	ret = qcom_cc_probe(pdev, match->data);
+	if (ret)
+		return ret;
+
+	tsens = platform_device_alloc("qcom-tsens", -1);
+	if (!tsens) {
+		ret = -ENOMEM;
+		goto err_alloc;
+	}
+
+	tsens->dev.parent = &pdev->dev;
+	ret = platform_device_add(tsens);
+	if (ret)
+		goto err_add;
+	return 0;
+err_add:
+	platform_device_put(tsens);
+err_alloc:
+	qcom_cc_remove(pdev);
+	return ret;
 }
 
 static int gcc_msm8960_remove(struct platform_device *pdev)