* [PATCH v2 1/2] thermal: qcom: tsens: remove data indirection in the debugfs
@ 2021-09-26 13:42 Dmitry Baryshkov
2021-09-26 13:42 ` [PATCH v2 2/2] thermal: qcom: tsens: fix VER_0 support Dmitry Baryshkov
2021-10-01 10:28 ` [PATCH v2 1/2] thermal: qcom: tsens: remove data indirection in the debugfs Thara Gopinath
0 siblings, 2 replies; 4+ messages in thread
From: Dmitry Baryshkov @ 2021-09-26 13:42 UTC (permalink / raw)
To: Amit Kucheria, Thara Gopinath, Andy Gross, Bjorn Andersson,
Zhang Rui, Daniel Lezcano
Cc: linux-pm, linux-arm-msm
There is no reason to pass platform device to debugfs just to get the
tsens_priv from it. Not to mention that for TSENS_V0 the platform device
(gcc) might have other device data. Pass the tsens_priv data to debugfs
callbacks directly.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
drivers/thermal/qcom/tsens.c | 17 +++++++----------
1 file changed, 7 insertions(+), 10 deletions(-)
diff --git a/drivers/thermal/qcom/tsens.c b/drivers/thermal/qcom/tsens.c
index 4c7ebd1d3f9c..6aeea74c1bb0 100644
--- a/drivers/thermal/qcom/tsens.c
+++ b/drivers/thermal/qcom/tsens.c
@@ -657,8 +657,7 @@ int get_temp_common(const struct tsens_sensor *s, int *temp)
#ifdef CONFIG_DEBUG_FS
static int dbg_sensors_show(struct seq_file *s, void *data)
{
- struct platform_device *pdev = s->private;
- struct tsens_priv *priv = platform_get_drvdata(pdev);
+ struct tsens_priv *priv = s->private;
int i;
seq_printf(s, "max: %2d\nnum: %2d\n\n",
@@ -675,8 +674,7 @@ static int dbg_sensors_show(struct seq_file *s, void *data)
static int dbg_version_show(struct seq_file *s, void *data)
{
- struct platform_device *pdev = s->private;
- struct tsens_priv *priv = platform_get_drvdata(pdev);
+ struct tsens_priv *priv = s->private;
u32 maj_ver, min_ver, step_ver;
int ret;
@@ -701,9 +699,8 @@ static int dbg_version_show(struct seq_file *s, void *data)
DEFINE_SHOW_ATTRIBUTE(dbg_version);
DEFINE_SHOW_ATTRIBUTE(dbg_sensors);
-static void tsens_debug_init(struct platform_device *pdev)
+static void tsens_debug_init(struct platform_device *pdev, struct tsens_priv *priv)
{
- struct tsens_priv *priv = platform_get_drvdata(pdev);
struct dentry *root, *file;
root = debugfs_lookup("tsens", NULL);
@@ -715,14 +712,14 @@ static void tsens_debug_init(struct platform_device *pdev)
file = debugfs_lookup("version", priv->debug_root);
if (!file)
debugfs_create_file("version", 0444, priv->debug_root,
- pdev, &dbg_version_fops);
+ priv, &dbg_version_fops);
/* A directory for each instance of the TSENS IP */
priv->debug = debugfs_create_dir(dev_name(&pdev->dev), priv->debug_root);
- debugfs_create_file("sensors", 0444, priv->debug, pdev, &dbg_sensors_fops);
+ debugfs_create_file("sensors", 0444, priv->debug, priv, &dbg_sensors_fops);
}
#else
-static inline void tsens_debug_init(struct platform_device *pdev) {}
+static inline void tsens_debug_init(struct platform_device *pdev, struct tsens_priv *priv) {}
#endif
static const struct regmap_config tsens_config = {
@@ -918,7 +915,7 @@ int __init init_common(struct tsens_priv *priv)
if (tsens_version(priv) >= VER_0_1)
tsens_enable_irq(priv);
- tsens_debug_init(op);
+ tsens_debug_init(op, priv);
err_put_device:
put_device(&op->dev);
--
2.30.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v2 2/2] thermal: qcom: tsens: fix VER_0 support
2021-09-26 13:42 [PATCH v2 1/2] thermal: qcom: tsens: remove data indirection in the debugfs Dmitry Baryshkov
@ 2021-09-26 13:42 ` Dmitry Baryshkov
2021-10-01 12:48 ` Thara Gopinath
2021-10-01 10:28 ` [PATCH v2 1/2] thermal: qcom: tsens: remove data indirection in the debugfs Thara Gopinath
1 sibling, 1 reply; 4+ messages in thread
From: Dmitry Baryshkov @ 2021-09-26 13:42 UTC (permalink / raw)
To: Amit Kucheria, Thara Gopinath, Andy Gross, Bjorn Andersson,
Zhang Rui, Daniel Lezcano
Cc: linux-pm, linux-arm-msm
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(-)
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;
--
2.30.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v2 1/2] thermal: qcom: tsens: remove data indirection in the debugfs
2021-09-26 13:42 [PATCH v2 1/2] thermal: qcom: tsens: remove data indirection in the debugfs Dmitry Baryshkov
2021-09-26 13:42 ` [PATCH v2 2/2] thermal: qcom: tsens: fix VER_0 support Dmitry Baryshkov
@ 2021-10-01 10:28 ` Thara Gopinath
1 sibling, 0 replies; 4+ messages in thread
From: Thara Gopinath @ 2021-10-01 10:28 UTC (permalink / raw)
To: Dmitry Baryshkov, Amit Kucheria, Andy Gross, Bjorn Andersson,
Zhang Rui, Daniel Lezcano
Cc: linux-pm, linux-arm-msm
Hi Dimitry,
Thanks for the patch
On 9/26/21 9:42 AM, Dmitry Baryshkov wrote:
> There is no reason to pass platform device to debugfs just to get the
> tsens_priv from it. Not to mention that for TSENS_V0 the platform device
> (gcc) might have other device data. Pass the tsens_priv data to debugfs
> callbacks directly.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
> drivers/thermal/qcom/tsens.c | 17 +++++++----------
> 1 file changed, 7 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/thermal/qcom/tsens.c b/drivers/thermal/qcom/tsens.c
> index 4c7ebd1d3f9c..6aeea74c1bb0 100644
> --- a/drivers/thermal/qcom/tsens.c
> +++ b/drivers/thermal/qcom/tsens.c
> @@ -657,8 +657,7 @@ int get_temp_common(const struct tsens_sensor *s, int *temp)
> #ifdef CONFIG_DEBUG_FS
> static int dbg_sensors_show(struct seq_file *s, void *data)
> {
> - struct platform_device *pdev = s->private;
> - struct tsens_priv *priv = platform_get_drvdata(pdev);
> + struct tsens_priv *priv = s->private;
> int i;
>
> seq_printf(s, "max: %2d\nnum: %2d\n\n",
> @@ -675,8 +674,7 @@ static int dbg_sensors_show(struct seq_file *s, void *data)
>
> static int dbg_version_show(struct seq_file *s, void *data)
> {
> - struct platform_device *pdev = s->private;
> - struct tsens_priv *priv = platform_get_drvdata(pdev);
> + struct tsens_priv *priv = s->private;
> u32 maj_ver, min_ver, step_ver;
> int ret;
>
> @@ -701,9 +699,8 @@ static int dbg_version_show(struct seq_file *s, void *data)
> DEFINE_SHOW_ATTRIBUTE(dbg_version);
> DEFINE_SHOW_ATTRIBUTE(dbg_sensors);
>
> -static void tsens_debug_init(struct platform_device *pdev)
> +static void tsens_debug_init(struct platform_device *pdev, struct tsens_priv *priv)
You anyways have to pass pdev here, as it is used for referencing dev
name below. So drop sending tsens_priv as well. You can get it via
platform_get_drvdata as in the original code. I am okay with the change
in using priv instead of pdev as private pointer in the fops.
> {
> - struct tsens_priv *priv = platform_get_drvdata(pdev);
> struct dentry *root, *file;
>
> root = debugfs_lookup("tsens", NULL);
> @@ -715,14 +712,14 @@ static void tsens_debug_init(struct platform_device *pdev)
> file = debugfs_lookup("version", priv->debug_root);
> if (!file)
> debugfs_create_file("version", 0444, priv->debug_root,
> - pdev, &dbg_version_fops);
> + priv, &dbg_version_fops);
>
> /* A directory for each instance of the TSENS IP */
> priv->debug = debugfs_create_dir(dev_name(&pdev->dev), priv->debug_root);
> - debugfs_create_file("sensors", 0444, priv->debug, pdev, &dbg_sensors_fops);
> + debugfs_create_file("sensors", 0444, priv->debug, priv, &dbg_sensors_fops);
> }
> #else
> -static inline void tsens_debug_init(struct platform_device *pdev) {}
> +static inline void tsens_debug_init(struct platform_device *pdev, struct tsens_priv *priv) {}
> #endif
>
> static const struct regmap_config tsens_config = {
> @@ -918,7 +915,7 @@ int __init init_common(struct tsens_priv *priv)
> if (tsens_version(priv) >= VER_0_1)
> tsens_enable_irq(priv);
>
> - tsens_debug_init(op);
> + tsens_debug_init(op, priv);
>
> err_put_device:
> put_device(&op->dev);
>
--
Warm Regards
Thara (She/Her/Hers)
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v2 2/2] thermal: qcom: tsens: fix VER_0 support
2021-09-26 13:42 ` [PATCH v2 2/2] thermal: qcom: tsens: fix VER_0 support Dmitry Baryshkov
@ 2021-10-01 12:48 ` Thara Gopinath
0 siblings, 0 replies; 4+ messages in thread
From: Thara Gopinath @ 2021-10-01 12:48 UTC (permalink / raw)
To: Dmitry Baryshkov, Amit Kucheria, Andy Gross, Bjorn Andersson,
Zhang Rui, Daniel Lezcano
Cc: linux-pm, linux-arm-msm
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>
--
Warm Regards
Thara (She/Her/Hers)
> ---
> drivers/thermal/qcom/tsens.c | 21 ++++++++++-----------
> 1 file changed, 10 insertions(+), 11 deletions(-)
>
> 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;
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-10-01 12:48 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-26 13:42 [PATCH v2 1/2] thermal: qcom: tsens: remove data indirection in the debugfs Dmitry Baryshkov
2021-09-26 13:42 ` [PATCH v2 2/2] thermal: qcom: tsens: fix VER_0 support Dmitry Baryshkov
2021-10-01 12:48 ` Thara Gopinath
2021-10-01 10:28 ` [PATCH v2 1/2] thermal: qcom: tsens: remove data indirection in the debugfs Thara Gopinath
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).