summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorNine Feng <nfeng@nvidia.com>2014-01-28 12:37:32 +0800
committerDanny Song <dsong@nvidia.com>2014-01-31 21:45:32 -0800
commit8b8d45d48da349159b2006202e13eea1bc652d51 (patch)
tree6b4bbe1e5049a39a0af2f5e07d60cb00004e8307 /drivers
parent2bb0e43403ff31467f3f3ba883165a8b859b602f (diff)
ts :tn7c: support load switch for touch power rail
lcd power rail of EN_LCD_1V8 is shared with touch module. We should make sure it is enabled before touch suspend. Therefore, we add a new consumer for lcd fix regulator, then it would be more reasonable to turn off/on in terms of use counts. Bug 1445143 Change-Id: Ieef0fc9ae46918c724d6129f9878be12641f66d0 Signed-off-by: Nine Feng <nfeng@nvidia.com> Reviewed-on: http://git-master/r/360705 Reviewed-by: Danny Song <dsong@nvidia.com> Tested-by: Danny Song <dsong@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/input/touchscreen/maxim_sti.c42
1 files changed, 41 insertions, 1 deletions
diff --git a/drivers/input/touchscreen/maxim_sti.c b/drivers/input/touchscreen/maxim_sti.c
index 80c53ec93b43..5108f6ca4b71 100644
--- a/drivers/input/touchscreen/maxim_sti.c
+++ b/drivers/input/touchscreen/maxim_sti.c
@@ -3,7 +3,7 @@
* Maxim SmartTouch Imager Touchscreen Driver
*
* Copyright (c)2013 Maxim Integrated Products, Inc.
- * Copyright (C) 2013, NVIDIA Corporation. All Rights Reserved.
+ * Copyright (C) 2014, NVIDIA Corporation. All Rights Reserved.
*
* This software is licensed under the terms of the GNU General Public
* License version 2, as published by the Free Software Foundation, and
@@ -96,6 +96,9 @@ struct dev_data {
struct sched_param thread_sched;
struct list_head dev_list;
struct regulator *reg_avdd;
+#ifdef CONFIG_MACH_TEGRANOTE7C
+ struct regulator *reg_dvdd_ts;
+#endif
struct regulator *reg_dvdd;
void (*service_irq)(struct dev_data *dd);
#if NV_ENABLE_CPU_BOOST
@@ -691,12 +694,26 @@ static int regulator_control(struct dev_data *dd, bool on)
{
int ret = 0;
+#ifdef CONFIG_MACH_TEGRANOTE7C
+ if (!dd->reg_avdd || !dd->reg_dvdd || !dd->reg_dvdd_ts)
+#else
if (!dd->reg_avdd || !dd->reg_dvdd)
+#endif
return 0;
if (on) {
+#ifdef CONFIG_MACH_TEGRANOTE7C
+ ret = regulator_enable(dd->reg_dvdd_ts);
+ if (ret < 0) {
+ ERROR("Failed to enable regulator dvdd_ts: %d", ret);
+ return ret;
+ }
+#endif
ret = regulator_enable(dd->reg_dvdd);
if (ret < 0) {
+#ifdef CONFIG_MACH_TEGRANOTE7C
+ regulator_disable(dd->reg_dvdd_ts);
+#endif
ERROR("Failed to enable regulator dvdd: %d", ret);
return ret;
}
@@ -705,6 +722,9 @@ static int regulator_control(struct dev_data *dd, bool on)
ret = regulator_enable(dd->reg_avdd);
if (ret < 0) {
ERROR("Failed to enable regulator avdd: %d", ret);
+#ifdef CONFIG_MACH_TEGRANOTE7C
+ regulator_disable(dd->reg_dvdd_ts);
+#endif
regulator_disable(dd->reg_dvdd);
return ret;
}
@@ -728,6 +748,17 @@ static int regulator_control(struct dev_data *dd, bool on)
return ret;
}
+#ifdef CONFIG_MACH_TEGRANOTE7C
+ if (regulator_is_enabled(dd->reg_dvdd_ts))
+ ret = regulator_disable(dd->reg_dvdd_ts);
+ if (ret < 0) {
+ ERROR("Failed to disable regulator dvdd_ts: %d", ret);
+ regulator_enable(dd->reg_avdd);
+ regulator_enable(dd->reg_dvdd);
+ return ret;
+ }
+#endif
+
if (!regulator_is_enabled(dd->reg_dvdd)) {
prev_dvdd_rail_state = 0;
msleep(200);
@@ -744,6 +775,12 @@ static void regulator_init(struct dev_data *dd)
if (IS_ERR(dd->reg_avdd))
goto err_null_regulator;
+#ifdef CONFIG_MACH_TEGRANOTE7C
+ dd->reg_dvdd_ts = devm_regulator_get(&dd->spi->dev, "dvdd_ts");
+ if (IS_ERR(dd->reg_dvdd_ts))
+ goto err_null_regulator;
+#endif
+
dd->reg_dvdd = devm_regulator_get(&dd->spi->dev, "dvdd");
if (IS_ERR(dd->reg_dvdd))
goto err_null_regulator;
@@ -752,6 +789,9 @@ static void regulator_init(struct dev_data *dd)
err_null_regulator:
dd->reg_avdd = NULL;
+#ifdef CONFIG_MACH_TEGRANOTE7C
+ dd->reg_dvdd_ts = NULL;
+#endif
dd->reg_dvdd = NULL;
dev_warn(&dd->spi->dev, "Failed to init regulators\n");
}