]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/input/touchscreen/wm97xx-core.c
Merge branch 'master' into tk71
[mv-sheeva.git] / drivers / input / touchscreen / wm97xx-core.c
index cbfef1ea7e30b55945c82314a9da5bf9a42a2457..6b75c9f660ae213294ac656e91e4b961fbb8f083 100644 (file)
@@ -125,6 +125,8 @@ int wm97xx_read_aux_adc(struct wm97xx *wm, u16 adcsel)
 {
        int power_adc = 0, auxval;
        u16 power = 0;
+       int rc = 0;
+       int timeout = 0;
 
        /* get codec */
        mutex_lock(&wm->codec_mutex);
@@ -143,7 +145,9 @@ int wm97xx_read_aux_adc(struct wm97xx *wm, u16 adcsel)
 
        /* Turn polling mode on to read AUX ADC */
        wm->pen_probably_down = 1;
-       wm->codec->poll_sample(wm, adcsel, &auxval);
+
+       while (rc != RC_VALID && timeout++ < 5)
+               rc = wm->codec->poll_sample(wm, adcsel, &auxval);
 
        if (power_adc)
                wm97xx_reg_write(wm, AC97_EXTENDED_MID, power | 0x8000);
@@ -152,8 +156,15 @@ int wm97xx_read_aux_adc(struct wm97xx *wm, u16 adcsel)
 
        wm->pen_probably_down = 0;
 
+       if (timeout >= 5) {
+               dev_err(wm->dev,
+                       "timeout reading auxadc %d, disabling digitiser\n",
+                       adcsel);
+               wm->codec->dig_enable(wm, false);
+       }
+
        mutex_unlock(&wm->codec_mutex);
-       return auxval & 0xfff;
+       return (rc == RC_VALID ? auxval & 0xfff : -EBUSY);
 }
 EXPORT_SYMBOL_GPL(wm97xx_read_aux_adc);
 
@@ -684,8 +695,7 @@ static int wm97xx_probe(struct device *dev)
  touch_reg_err:
        platform_device_put(wm->touch_dev);
  touch_err:
-       platform_device_unregister(wm->battery_dev);
-       wm->battery_dev = NULL;
+       platform_device_del(wm->battery_dev);
  batt_reg_err:
        platform_device_put(wm->battery_dev);
  batt_err: