@@ -198,7 +198,7 @@ struct ads7846 {
/* Must be called with ts->lock held */
static void ads7846_stop(struct ads7846 *ts)
{
- if (!ts->disabled && !ts->suspended) {
+ if (!ts->stopped) {
/* Signal IRQ thread to stop polling and disable the handler. */
ts->stopped = true;
mb();
@@ -210,7 +210,7 @@ static void ads7846_stop(struct ads7846 *ts)
/* Must be called with ts->lock held */
static void ads7846_restart(struct ads7846 *ts)
{
- if (!ts->disabled && !ts->suspended) {
+ if (ts->stopped) {
/* Tell IRQ thread that it may poll the device. */
ts->stopped = false;
mb();
@@ -223,7 +223,7 @@ static void __ads7846_disable(struct ads7846 *ts)
{
ads7846_stop(ts);
regulator_disable(ts->reg);
-
+ ts->disabled = true;
/*
* We know the chip's in low power mode since we always
* leave it that way after every request
@@ -235,6 +235,7 @@ static void __ads7846_enable(struct ads7846 *ts)
{
regulator_enable(ts->reg);
ads7846_restart(ts);
+ ts->disabled = false;
}
static void ads7846_disable(struct ads7846 *ts)
@@ -244,8 +245,6 @@ static void ads7846_disable(struct ads7846 *ts)
if (!ts->disabled && !ts->suspended)
__ads7846_disable(ts);
- ts->disabled = true;
-
mutex_unlock(&ts->lock);
}
@@ -256,8 +255,6 @@ static void ads7846_enable(struct ads7846 *ts)
if (ts->disabled && !ts->suspended)
__ads7846_enable(ts);
- ts->disabled = false;
-
mutex_unlock(&ts->lock);
}
@@ -919,7 +916,7 @@ static int ads7846_resume(struct spi_device *spi)
if (device_may_wakeup(&ts->spi->dev))
disable_irq_wake(ts->spi->irq);
- if (!ts->disabled)
+ if (ts->disabled)
__ads7846_enable(ts);
ts->suspended = false;