OSDN Git Service

thermal: tsens: Add the SROT address map
authorAmit Kucheria <amit.kucheria@linaro.org>
Wed, 12 Sep 2018 09:52:50 +0000 (15:22 +0530)
committerEduardo Valentin <edubezval@gmail.com>
Tue, 23 Oct 2018 00:33:48 +0000 (17:33 -0700)
On platforms whose device trees specify two address spaces for TSENS, the
second one points to the SROT registers. Initialise the SROT map on those
platforms.

Signed-off-by: Amit Kucheria <amit.kucheria@linaro.org>
Reviewed-by: Matthias Kaehlcke <mka@chromium.org>
Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: Eduardo Valentin <edubezval@gmail.com>
drivers/thermal/qcom/tsens-common.c
drivers/thermal/qcom/tsens.h

index 0585084..0b8a793 100644 (file)
@@ -117,16 +117,26 @@ static const struct regmap_config tsens_config = {
 
 int __init init_common(struct tsens_device *tmdev)
 {
-       void __iomem *tm_base;
+       void __iomem *tm_base, *srot_base;
        struct resource *res;
        struct platform_device *op = of_find_device_by_node(tmdev->dev->of_node);
 
        if (!op)
                return -EINVAL;
 
-       /* The driver only uses the TM register address space for now */
        if (op->num_resources > 1) {
+               /* DT with separate SROT and TM address space */
                tmdev->tm_offset = 0;
+               res = platform_get_resource(op, IORESOURCE_MEM, 1);
+               srot_base = devm_ioremap_resource(&op->dev, res);
+               if (IS_ERR(srot_base))
+                       return PTR_ERR(srot_base);
+
+               tmdev->srot_map = devm_regmap_init_mmio(tmdev->dev,
+                                                       srot_base, &tsens_config);
+               if (IS_ERR(tmdev->srot_map))
+                       return PTR_ERR(tmdev->srot_map);
+
        } else {
                /* old DTs where SROT and TM were in a contiguous 2K block */
                tmdev->tm_offset = 0x1000;
index 58e98c4..b9c4bcf 100644 (file)
@@ -70,6 +70,7 @@ struct tsens_device {
        struct device                   *dev;
        u32                             num_sensors;
        struct regmap                   *tm_map;
+       struct regmap                   *srot_map;
        u32                             tm_offset;
        struct tsens_context            ctx;
        const struct tsens_ops          *ops;