|
@@ -215,8 +215,9 @@ static inline int is_pden(struct wm97xx *wm)
|
|
|
static int wm9705_poll_sample(struct wm97xx *wm, int adcsel, int *sample)
|
|
|
{
|
|
|
int timeout = 5 * delay;
|
|
|
+ bool wants_pen = adcsel & WM97XX_PEN_DOWN;
|
|
|
|
|
|
- if (!wm->pen_probably_down) {
|
|
|
+ if (wants_pen && !wm->pen_probably_down) {
|
|
|
u16 data = wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD);
|
|
|
if (!(data & WM97XX_PEN_DOWN))
|
|
|
return RC_PENUP;
|
|
@@ -260,7 +261,7 @@ static int wm9705_poll_sample(struct wm97xx *wm, int adcsel, int *sample)
|
|
|
return RC_PENUP;
|
|
|
}
|
|
|
|
|
|
- if (!(*sample & WM97XX_PEN_DOWN)) {
|
|
|
+ if (wants_pen && !(*sample & WM97XX_PEN_DOWN)) {
|
|
|
wm->pen_probably_down = 0;
|
|
|
return RC_PENUP;
|
|
|
}
|
|
@@ -275,14 +276,14 @@ static int wm9705_poll_touch(struct wm97xx *wm, struct wm97xx_data *data)
|
|
|
{
|
|
|
int rc;
|
|
|
|
|
|
- rc = wm9705_poll_sample(wm, WM97XX_ADCSEL_X, &data->x);
|
|
|
+ rc = wm9705_poll_sample(wm, WM97XX_ADCSEL_X | WM97XX_PEN_DOWN, &data->x);
|
|
|
if (rc != RC_VALID)
|
|
|
return rc;
|
|
|
- rc = wm9705_poll_sample(wm, WM97XX_ADCSEL_Y, &data->y);
|
|
|
+ rc = wm9705_poll_sample(wm, WM97XX_ADCSEL_Y | WM97XX_PEN_DOWN, &data->y);
|
|
|
if (rc != RC_VALID)
|
|
|
return rc;
|
|
|
if (pil) {
|
|
|
- rc = wm9705_poll_sample(wm, WM97XX_ADCSEL_PRES, &data->p);
|
|
|
+ rc = wm9705_poll_sample(wm, WM97XX_ADCSEL_PRES | WM97XX_PEN_DOWN, &data->p);
|
|
|
if (rc != RC_VALID)
|
|
|
return rc;
|
|
|
} else
|