17 #include <linux/module.h>
19 #include <linux/kernel.h>
20 #include <linux/input.h>
22 #include <linux/bitops.h>
25 #define TS_NAME "wm97xx"
26 #define WM9705_VERSION "1.00"
27 #define DEFAULT_PRESSURE 0xb0c0
106 static const int delay_table[] = {
130 static inline void poll_delay(
int d)
138 static void wm9705_phy_init(
struct wm97xx *wm)
153 "setting pressure measurement current to 400uA.");
156 "setting pressure measurement current to 200uA.");
162 if (delay < 0 || delay > 15) {
163 dev_dbg(wm->
dev,
"supplied delay out of range.");
169 dev_dbg(wm->
dev,
"setting adc sample delay to %d u Secs.",
173 dig2 |= (pdd & 0x000f);
174 dev_dbg(wm->
dev,
"setting pdd to Vmid/%d", 1 - (pdd & 0x000f));
177 dig2 |= ((
mask & 0x3) << 4);
183 static void wm9705_dig_enable(
struct wm97xx *wm,
int enable)
194 static void wm9705_aux_prepare(
struct wm97xx *wm)
201 static void wm9705_dig_restore(
struct wm97xx *wm)
207 static inline int is_pden(
struct wm97xx *wm)
215 static int wm9705_poll_sample(
struct wm97xx *wm,
int adcsel,
int *
sample)
222 if (!(data & WM97XX_PEN_DOWN))
257 if ((*sample ^ adcsel) & WM97XX_ADCSEL_MASK) {
258 dev_dbg(wm->
dev,
"adc wrong sample, wanted %x got %x",
259 adcsel & WM97XX_ADCSEL_MASK,
260 *sample & WM97XX_ADCSEL_MASK);
264 if (wants_pen && !(*sample & WM97XX_PEN_DOWN)) {
299 static int wm9705_acc_enable(
struct wm97xx *wm,
int enable)
310 (ret = wm->
mach_ops->acc_startup(wm)) < 0)
337 .poll_sample = wm9705_poll_sample,
338 .poll_touch = wm9705_poll_touch,
339 .acc_enable = wm9705_acc_enable,
340 .phy_init = wm9705_phy_init,
341 .dig_enable = wm9705_dig_enable,
342 .dig_restore = wm9705_dig_restore,
343 .aux_prepare = wm9705_aux_prepare,