Lines Matching refs:wm

151 static void wm9713_phy_init(struct wm97xx *wm)
163 dev_info(wm->dev, "setting pen detect pull-up to %d Ohms\n",
170 dev_info(wm->dev, "setting 5-wire touchscreen mode.");
173 dev_warn(wm->dev,
183 dev_info(wm->dev,
186 dev_info(wm->dev,
193 dev_info(wm->dev, "supplied delay out of range.");
195 dev_info(wm->dev, "setting adc sample delay to %d u Secs.",
206 wm->misc = wm97xx_reg_read(wm, 0x5a);
208 wm97xx_reg_write(wm, AC97_WM9713_DIG1, dig1);
209 wm97xx_reg_write(wm, AC97_WM9713_DIG2, dig2);
210 wm97xx_reg_write(wm, AC97_WM9713_DIG3, dig3);
211 wm97xx_reg_write(wm, AC97_GPIO_STICKY, 0x0);
214 static void wm9713_dig_enable(struct wm97xx *wm, int enable)
219 val = wm97xx_reg_read(wm, AC97_EXTENDED_MID);
220 wm97xx_reg_write(wm, AC97_EXTENDED_MID, val & 0x7fff);
221 wm97xx_reg_write(wm, AC97_WM9713_DIG3, wm->dig[2] |
223 wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD); /* dummy read */
225 wm97xx_reg_write(wm, AC97_WM9713_DIG3, wm->dig[2] &
227 val = wm97xx_reg_read(wm, AC97_EXTENDED_MID);
228 wm97xx_reg_write(wm, AC97_EXTENDED_MID, val | 0x8000);
232 static void wm9713_dig_restore(struct wm97xx *wm)
234 wm97xx_reg_write(wm, AC97_WM9713_DIG1, wm->dig_save[0]);
235 wm97xx_reg_write(wm, AC97_WM9713_DIG2, wm->dig_save[1]);
236 wm97xx_reg_write(wm, AC97_WM9713_DIG3, wm->dig_save[2]);
239 static void wm9713_aux_prepare(struct wm97xx *wm)
241 memcpy(wm->dig_save, wm->dig, sizeof(wm->dig));
242 wm97xx_reg_write(wm, AC97_WM9713_DIG1, 0);
243 wm97xx_reg_write(wm, AC97_WM9713_DIG2, 0);
244 wm97xx_reg_write(wm, AC97_WM9713_DIG3, WM97XX_PRP_DET_DIG);
247 static inline int is_pden(struct wm97xx *wm)
249 return wm->dig[2] & WM9713_PDEN;
255 static int wm9713_poll_sample(struct wm97xx *wm, int adcsel, int *sample)
261 if (wants_pen && !wm->pen_probably_down) {
262 u16 data = wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD);
265 wm->pen_probably_down = 1;
269 dig1 = wm97xx_reg_read(wm, AC97_WM9713_DIG1);
274 if (wm->mach_ops && wm->mach_ops->pre_sample)
275 wm->mach_ops->pre_sample(adcsel);
276 wm97xx_reg_write(wm, AC97_WM9713_DIG1, dig1 | WM9713_POLL);
282 while ((wm97xx_reg_read(wm, AC97_WM9713_DIG1) & WM9713_POLL) &&
290 if (is_pden(wm))
291 wm->pen_probably_down = 0;
293 dev_dbg(wm->dev, "adc sample timeout");
297 *sample = wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD);
298 if (wm->mach_ops && wm->mach_ops->post_sample)
299 wm->mach_ops->post_sample(adcsel);
303 dev_dbg(wm->dev, "adc wrong sample, wanted %x got %x",
310 wm->pen_probably_down = 0;
320 static int wm9713_poll_coord(struct wm97xx *wm, struct wm97xx_data *data)
325 if (!wm->pen_probably_down) {
326 u16 val = wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD);
329 wm->pen_probably_down = 1;
333 dig1 = wm97xx_reg_read(wm, AC97_WM9713_DIG1);
338 if (wm->mach_ops && wm->mach_ops->pre_sample)
339 wm->mach_ops->pre_sample(WM97XX_ADCSEL_X | WM97XX_ADCSEL_Y);
340 wm97xx_reg_write(wm, AC97_WM9713_DIG1,
345 data->x = wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD);
347 while ((wm97xx_reg_read(wm, AC97_WM9713_DIG1) & WM9713_POLL)
355 if (is_pden(wm))
356 wm->pen_probably_down = 0;
358 dev_dbg(wm->dev, "adc sample timeout");
363 data->y = wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD);
365 data->p = wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD);
369 if (wm->mach_ops && wm->mach_ops->post_sample)
370 wm->mach_ops->post_sample(WM97XX_ADCSEL_X | WM97XX_ADCSEL_Y);
379 wm->pen_probably_down = 0;
390 static int wm9713_poll_touch(struct wm97xx *wm, struct wm97xx_data *data)
395 rc = wm9713_poll_coord(wm, data);
399 rc = wm9713_poll_sample(wm, WM97XX_ADCSEL_X | WM97XX_PEN_DOWN, &data->x);
402 rc = wm9713_poll_sample(wm, WM97XX_ADCSEL_Y | WM97XX_PEN_DOWN, &data->y);
406 rc = wm9713_poll_sample(wm, WM97XX_ADCSEL_PRES | WM97XX_PEN_DOWN,
420 static int wm9713_acc_enable(struct wm97xx *wm, int enable)
425 dig1 = wm->dig[0];
426 dig2 = wm->dig[1];
427 dig3 = wm->dig[2];
431 if (wm->mach_ops->acc_startup &&
432 (ret = wm->mach_ops->acc_startup(wm)) < 0)
443 WM97XX_SLT(wm->acc_slot) | WM97XX_RATE(wm->acc_rate);
449 if (wm->mach_ops->acc_shutdown)
450 wm->mach_ops->acc_shutdown(wm);
453 wm97xx_reg_write(wm, AC97_WM9713_DIG1, dig1);
454 wm97xx_reg_write(wm, AC97_WM9713_DIG2, dig2);
455 wm97xx_reg_write(wm, AC97_WM9713_DIG3, dig3);