summaryrefslogtreecommitdiff
path: root/drivers/hwmon
diff options
context:
space:
mode:
authorBitan Biswas <bbiswas@nvidia.com>2011-07-12 21:05:55 +0530
committerDan Willemsen <dwillemsen@nvidia.com>2011-11-30 21:47:37 -0800
commitd95c322321462eb6d7b064fe6569753d4e08c2df (patch)
tree679980e4d8c7ac06d7195024e878902a4ce7fc11 /drivers/hwmon
parente585434bb1fc6b6e708fc6bbb2c9c7924dd565dd (diff)
hwmon: tegra: tsensor: set STOP bit in suspend
tsensor STOP bit is set before suspend. This disables the counters and prevents OVERFLOW interrupt in LP1 mode bug 850683 Original-Change-Id: I01fbc9529ecc25ce96f50a5fbf599c9bce2157b5 Reviewed-on: http://git-master/r/40656 Reviewed-by: Bitan Biswas <bbiswas@nvidia.com> Tested-by: Bitan Biswas <bbiswas@nvidia.com> Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com> Rebase-Id: Rbdf02380a72c8f75449a0a3e52007e5883f62d4b
Diffstat (limited to 'drivers/hwmon')
-rw-r--r--drivers/hwmon/tegra-tsensor.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/hwmon/tegra-tsensor.c b/drivers/hwmon/tegra-tsensor.c
index b3edeb3c844e..7e0f002fc4dd 100644
--- a/drivers/hwmon/tegra-tsensor.c
+++ b/drivers/hwmon/tegra-tsensor.c
@@ -1628,6 +1628,14 @@ static int tsensor_suspend(struct platform_device *pdev,
pm_message_t state)
{
struct tegra_tsensor_data *data = platform_get_drvdata(pdev);
+ unsigned int config0;
+ int i;
+ /* set STOP bit, else OVERFLOW interrupt seen in LP1 */
+ for (i = 0; i < TSENSOR_COUNT; i++) {
+ config0 = tsensor_readl(data, ((i << 16) | SENSOR_CFG0));
+ config0 |= (1 << SENSOR_CFG0_STOP_SHIFT);
+ tsensor_writel(data, config0, ((i << 16) | SENSOR_CFG0));
+ }
/* TBD: check anything else that could be needed for suspend */
tsensor_clk_enable(data, false);
@@ -1637,8 +1645,16 @@ static int tsensor_suspend(struct platform_device *pdev,
static int tsensor_resume(struct platform_device *pdev)
{
struct tegra_tsensor_data *data = platform_get_drvdata(pdev);
+ unsigned int config0;
+ int i;
/* TBD: check anything else that could be needed for resume */
tsensor_clk_enable(data, true);
+ /* clear STOP bit */
+ for (i = 0; i < TSENSOR_COUNT; i++) {
+ config0 = tsensor_readl(data, ((i << 16) | SENSOR_CFG0));
+ config0 &= ~(1 << SENSOR_CFG0_STOP_SHIFT);
+ tsensor_writel(data, config0, ((i << 16) | SENSOR_CFG0));
+ }
return 0;
}