]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Merge remote-tracking branch 'thermal/next'
authorStephen Rothwell <sfr@canb.auug.org.au>
Wed, 20 Feb 2013 02:02:52 +0000 (13:02 +1100)
committerStephen Rothwell <sfr@canb.auug.org.au>
Wed, 20 Feb 2013 02:02:52 +0000 (13:02 +1100)
Conflicts:
drivers/thermal/exynos_thermal.c

1  2 
drivers/thermal/exynos_thermal.c

index 224751e9f5ff3659448796da7d5323ec738f0770,64aa8b445054cc3d24ec1544e6a07b164e5cd00f..a5ae30e3cfa9dda399a3f144d905fa91930a57f5
@@@ -832,7 -852,95 +852,95 @@@ static inline struct  exynos_tmu_platfo
        return (struct exynos_tmu_platform_data *)
                        platform_get_device_id(pdev)->driver_data;
  }
 -static int __devinit exynos_tmu_probe(struct platform_device *pdev)
+ #ifdef CONFIG_EXYNOS_THERMAL_EMUL
+ static ssize_t exynos_tmu_emulation_show(struct device *dev,
+                                        struct device_attribute *attr,
+                                        char *buf)
+ {
+       struct platform_device *pdev = container_of(dev,
+                                       struct platform_device, dev);
+       struct exynos_tmu_data *data = platform_get_drvdata(pdev);
+       unsigned int reg;
+       u8 temp_code;
+       int temp = 0;
+       if (data->soc == SOC_ARCH_EXYNOS4210)
+               goto out;
+       mutex_lock(&data->lock);
+       clk_enable(data->clk);
+       reg = readl(data->base + EXYNOS_EMUL_CON);
+       clk_disable(data->clk);
+       mutex_unlock(&data->lock);
+       if (reg & EXYNOS_EMUL_ENABLE) {
+               reg >>= EXYNOS_EMUL_DATA_SHIFT;
+               temp_code = reg & EXYNOS_EMUL_DATA_MASK;
+               temp = code_to_temp(data, temp_code);
+       }
+ out:
+       return sprintf(buf, "%d\n", temp * MCELSIUS);
+ }
+ static ssize_t exynos_tmu_emulation_store(struct device *dev,
+                                       struct device_attribute *attr,
+                                       const char *buf, size_t count)
+ {
+       struct platform_device *pdev = container_of(dev,
+                                       struct platform_device, dev);
+       struct exynos_tmu_data *data = platform_get_drvdata(pdev);
+       unsigned int reg;
+       int temp;
+       if (data->soc == SOC_ARCH_EXYNOS4210)
+               goto out;
+       if (!sscanf(buf, "%d\n", &temp) || temp < 0)
+               return -EINVAL;
+       mutex_lock(&data->lock);
+       clk_enable(data->clk);
+       reg = readl(data->base + EXYNOS_EMUL_CON);
+       if (temp) {
+               /* Both CELSIUS and MCELSIUS type are available for input */
+               if (temp > MCELSIUS)
+                       temp /= MCELSIUS;
+               reg = (EXYNOS_EMUL_TIME << EXYNOS_EMUL_TIME_SHIFT) |
+                       (temp_to_code(data, (temp / MCELSIUS))
+                        << EXYNOS_EMUL_DATA_SHIFT) | EXYNOS_EMUL_ENABLE;
+       } else {
+               reg &= ~EXYNOS_EMUL_ENABLE;
+       }
+       writel(reg, data->base + EXYNOS_EMUL_CON);
+       clk_disable(data->clk);
+       mutex_unlock(&data->lock);
+ out:
+       return count;
+ }
+ static DEVICE_ATTR(emulation, 0644, exynos_tmu_emulation_show,
+                                       exynos_tmu_emulation_store);
+ static int create_emulation_sysfs(struct device *dev)
+ {
+       return device_create_file(dev, &dev_attr_emulation);
+ }
+ static void remove_emulation_sysfs(struct device *dev)
+ {
+       device_remove_file(dev, &dev_attr_emulation);
+ }
+ #else
+ static inline int create_emulation_sysfs(struct device *dev) { return 0; }
+ static inline void remove_emulation_sysfs(struct device *dev) {}
+ #endif
 +static int exynos_tmu_probe(struct platform_device *pdev)
  {
        struct exynos_tmu_data *data;
        struct exynos_tmu_platform_data *pdata = pdev->dev.platform_data;
@@@ -982,10 -1099,10 +1099,10 @@@ static struct platform_driver exynos_tm
                .name   = "exynos-tmu",
                .owner  = THIS_MODULE,
                .pm     = EXYNOS_TMU_PM,
-               .of_match_table = exynos_tmu_match,
+               .of_match_table = of_match_ptr(exynos_tmu_match),
        },
        .probe = exynos_tmu_probe,
 -      .remove = __devexit_p(exynos_tmu_remove),
 +      .remove = exynos_tmu_remove,
        .id_table = exynos_tmu_driver_ids,
  };