diff mbox series

[v2,2/2] thermal: qcom: tsens: fix VER_0 support

Message ID 20210926134237.23863-2-dmitry.baryshkov@linaro.org (mailing list archive)
State New, archived
Delegated to: Daniel Lezcano
Headers show
Series [v2,1/2] thermal: qcom: tsens: remove data indirection in the debugfs | expand

Commit Message

Dmitry Baryshkov Sept. 26, 2021, 1:42 p.m. UTC
For VER_0 tsens shares the device with the clock controller, but
nevertheless it does not use syscon for these registers. Drop
syscon_node_to_regmap() and acquire the regmap on our own.

apq8064 has tsens as a part of gcc device tree node, ipq8064 puts tsens
node as a child node of gcc. Thus check whether tsens resource can be
fetched either from the device itself or from it's parent.

Fixes: 53e2a20e4c41 ("thermal/drivers/tsens: Add VER_0 tsens version")
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
 drivers/thermal/qcom/tsens.c | 21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)

Comments

Thara Gopinath Oct. 1, 2021, 12:48 p.m. UTC | #1
On 9/26/21 9:42 AM, Dmitry Baryshkov wrote:
> For VER_0 tsens shares the device with the clock controller, but
> nevertheless it does not use syscon for these registers. Drop
> syscon_node_to_regmap() and acquire the regmap on our own.
> 
> apq8064 has tsens as a part of gcc device tree node, ipq8064 puts tsens
> node as a child node of gcc. Thus check whether tsens resource can be
> fetched either from the device itself or from it's parent.
> 
> Fixes: 53e2a20e4c41 ("thermal/drivers/tsens: Add VER_0 tsens version")
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>

Acked-by: Thara Gopinath <thara.gopinath@linaro.org>
diff mbox series

Patch

diff --git a/drivers/thermal/qcom/tsens.c b/drivers/thermal/qcom/tsens.c
index 6aeea74c1bb0..bc0c86a54fe7 100644
--- a/drivers/thermal/qcom/tsens.c
+++ b/drivers/thermal/qcom/tsens.c
@@ -12,7 +12,6 @@ 
 #include <linux/of.h>
 #include <linux/of_address.h>
 #include <linux/of_platform.h>
-#include <linux/mfd/syscon.h>
 #include <linux/platform_device.h>
 #include <linux/pm.h>
 #include <linux/regmap.h>
@@ -773,19 +772,19 @@  int __init init_common(struct tsens_priv *priv)
 	if (tsens_version(priv) >= VER_0_1) {
 		res = platform_get_resource(op, IORESOURCE_MEM, 0);
 		tm_base = devm_ioremap_resource(dev, res);
-		if (IS_ERR(tm_base)) {
-			ret = PTR_ERR(tm_base);
-			goto err_put_device;
-		}
-
-		priv->tm_map = devm_regmap_init_mmio(dev, tm_base, &tsens_config);
-	} else { /* VER_0 share the same gcc regs using a syscon */
-		struct device *parent = priv->dev->parent;
+	} else { /* VER_0 share the same gcc regs. It can be either the same device, or parent */
+		res = platform_get_resource(op, IORESOURCE_MEM, 0);
+		if (!res && dev_is_platform(priv->dev->parent))
+			res = platform_get_resource(to_platform_device(priv->dev->parent), IORESOURCE_MEM, 0);
+		tm_base = devm_ioremap(dev, res->start, resource_size(res));
+	}
 
-		if (parent)
-			priv->tm_map = syscon_node_to_regmap(parent->of_node);
+	if (IS_ERR(tm_base)) {
+		ret = PTR_ERR(tm_base);
+		goto err_put_device;
 	}
 
+	priv->tm_map = devm_regmap_init_mmio(dev, tm_base, &tsens_config);
 	if (IS_ERR_OR_NULL(priv->tm_map)) {
 		if (!priv->tm_map)
 			ret = -ENODEV;