Lines Matching refs:wm

84 int wm97xx_reg_read(struct wm97xx *wm, u16 reg)  in wm97xx_reg_read()  argument
86 if (wm->ac97) in wm97xx_reg_read()
87 return wm->ac97->bus->ops->read(wm->ac97, reg); in wm97xx_reg_read()
93 void wm97xx_reg_write(struct wm97xx *wm, u16 reg, u16 val) in wm97xx_reg_write() argument
97 wm->dig[(reg - AC97_WM9713_DIG1) >> 1] = val; in wm97xx_reg_write()
101 wm->gpio[(reg - AC97_GPIO_CFG) >> 1] = val; in wm97xx_reg_write()
105 wm->misc = val; in wm97xx_reg_write()
107 if (wm->ac97) in wm97xx_reg_write()
108 wm->ac97->bus->ops->write(wm->ac97, reg, val); in wm97xx_reg_write()
120 int wm97xx_read_aux_adc(struct wm97xx *wm, u16 adcsel) in wm97xx_read_aux_adc() argument
128 mutex_lock(&wm->codec_mutex); in wm97xx_read_aux_adc()
133 if (wm->id == WM9713_ID2 && in wm97xx_read_aux_adc()
134 (power = wm97xx_reg_read(wm, AC97_EXTENDED_MID)) & 0x8000) { in wm97xx_read_aux_adc()
136 wm97xx_reg_write(wm, AC97_EXTENDED_MID, power & 0x7fff); in wm97xx_read_aux_adc()
140 wm->codec->aux_prepare(wm); in wm97xx_read_aux_adc()
143 wm->pen_probably_down = 1; in wm97xx_read_aux_adc()
146 rc = wm->codec->poll_sample(wm, adcsel, &auxval); in wm97xx_read_aux_adc()
149 wm97xx_reg_write(wm, AC97_EXTENDED_MID, power | 0x8000); in wm97xx_read_aux_adc()
151 wm->codec->dig_restore(wm); in wm97xx_read_aux_adc()
153 wm->pen_probably_down = 0; in wm97xx_read_aux_adc()
156 dev_err(wm->dev, in wm97xx_read_aux_adc()
159 wm->codec->dig_enable(wm, false); in wm97xx_read_aux_adc()
162 mutex_unlock(&wm->codec_mutex); in wm97xx_read_aux_adc()
175 enum wm97xx_gpio_status wm97xx_get_gpio(struct wm97xx *wm, u32 gpio) in wm97xx_get_gpio() argument
180 mutex_lock(&wm->codec_mutex); in wm97xx_get_gpio()
181 status = wm97xx_reg_read(wm, AC97_GPIO_STATUS); in wm97xx_get_gpio()
188 mutex_unlock(&wm->codec_mutex); in wm97xx_get_gpio()
202 void wm97xx_set_gpio(struct wm97xx *wm, u32 gpio, in wm97xx_set_gpio() argument
207 mutex_lock(&wm->codec_mutex); in wm97xx_set_gpio()
208 reg = wm97xx_reg_read(wm, AC97_GPIO_STATUS); in wm97xx_set_gpio()
215 if (wm->id == WM9712_ID2 && wm->variant != WM97xx_WM1613) in wm97xx_set_gpio()
216 wm97xx_reg_write(wm, AC97_GPIO_STATUS, reg << 1); in wm97xx_set_gpio()
218 wm97xx_reg_write(wm, AC97_GPIO_STATUS, reg); in wm97xx_set_gpio()
219 mutex_unlock(&wm->codec_mutex); in wm97xx_set_gpio()
227 void wm97xx_config_gpio(struct wm97xx *wm, u32 gpio, enum wm97xx_gpio_dir dir, in wm97xx_config_gpio() argument
233 mutex_lock(&wm->codec_mutex); in wm97xx_config_gpio()
234 reg = wm97xx_reg_read(wm, AC97_GPIO_POLARITY); in wm97xx_config_gpio()
241 wm97xx_reg_write(wm, AC97_GPIO_POLARITY, reg); in wm97xx_config_gpio()
242 reg = wm97xx_reg_read(wm, AC97_GPIO_STICKY); in wm97xx_config_gpio()
249 wm97xx_reg_write(wm, AC97_GPIO_STICKY, reg); in wm97xx_config_gpio()
250 reg = wm97xx_reg_read(wm, AC97_GPIO_WAKEUP); in wm97xx_config_gpio()
257 wm97xx_reg_write(wm, AC97_GPIO_WAKEUP, reg); in wm97xx_config_gpio()
258 reg = wm97xx_reg_read(wm, AC97_GPIO_CFG); in wm97xx_config_gpio()
265 wm97xx_reg_write(wm, AC97_GPIO_CFG, reg); in wm97xx_config_gpio()
266 mutex_unlock(&wm->codec_mutex); in wm97xx_config_gpio()
280 void wm97xx_set_suspend_mode(struct wm97xx *wm, u16 mode) in wm97xx_set_suspend_mode() argument
282 wm->suspend_mode = mode; in wm97xx_set_suspend_mode()
283 device_init_wakeup(&wm->input_dev->dev, mode != 0); in wm97xx_set_suspend_mode()
293 struct wm97xx *wm = dev_id; in wm97xx_pen_interrupt() local
294 int pen_was_down = wm->pen_is_down; in wm97xx_pen_interrupt()
297 if (wm->id == WM9705_ID2) { in wm97xx_pen_interrupt()
298 if (wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD) & in wm97xx_pen_interrupt()
300 wm->pen_is_down = 1; in wm97xx_pen_interrupt()
302 wm->pen_is_down = 0; in wm97xx_pen_interrupt()
305 mutex_lock(&wm->codec_mutex); in wm97xx_pen_interrupt()
306 status = wm97xx_reg_read(wm, AC97_GPIO_STATUS); in wm97xx_pen_interrupt()
307 pol = wm97xx_reg_read(wm, AC97_GPIO_POLARITY); in wm97xx_pen_interrupt()
310 wm->pen_is_down = 1; in wm97xx_pen_interrupt()
311 wm97xx_reg_write(wm, AC97_GPIO_POLARITY, pol & in wm97xx_pen_interrupt()
314 wm->pen_is_down = 0; in wm97xx_pen_interrupt()
315 wm97xx_reg_write(wm, AC97_GPIO_POLARITY, pol | in wm97xx_pen_interrupt()
319 if (wm->id == WM9712_ID2 && wm->variant != WM97xx_WM1613) in wm97xx_pen_interrupt()
320 wm97xx_reg_write(wm, AC97_GPIO_STATUS, (status & in wm97xx_pen_interrupt()
323 wm97xx_reg_write(wm, AC97_GPIO_STATUS, status & in wm97xx_pen_interrupt()
325 mutex_unlock(&wm->codec_mutex); in wm97xx_pen_interrupt()
333 if (!wm->mach_ops->acc_enabled || wm->mach_ops->acc_pen_down) { in wm97xx_pen_interrupt()
334 if (wm->pen_is_down && !pen_was_down) { in wm97xx_pen_interrupt()
336 queue_delayed_work(wm->ts_workq, &wm->ts_reader, 1); in wm97xx_pen_interrupt()
340 if (!wm->pen_is_down && pen_was_down) in wm97xx_pen_interrupt()
341 wm->pen_is_down = 1; in wm97xx_pen_interrupt()
344 if (!wm->pen_is_down && wm->mach_ops->acc_enabled) in wm97xx_pen_interrupt()
345 wm->mach_ops->acc_pen_up(wm); in wm97xx_pen_interrupt()
353 static int wm97xx_init_pen_irq(struct wm97xx *wm) in wm97xx_init_pen_irq() argument
357 if (request_threaded_irq(wm->pen_irq, NULL, wm97xx_pen_interrupt, in wm97xx_init_pen_irq()
359 "wm97xx-pen", wm)) { in wm97xx_init_pen_irq()
360 dev_err(wm->dev, in wm97xx_init_pen_irq()
362 wm->pen_irq = 0; in wm97xx_init_pen_irq()
367 if (wm->id != WM9705_ID2) { in wm97xx_init_pen_irq()
368 BUG_ON(!wm->mach_ops->irq_gpio); in wm97xx_init_pen_irq()
369 reg = wm97xx_reg_read(wm, AC97_MISC_AFE); in wm97xx_init_pen_irq()
370 wm97xx_reg_write(wm, AC97_MISC_AFE, in wm97xx_init_pen_irq()
371 reg & ~(wm->mach_ops->irq_gpio)); in wm97xx_init_pen_irq()
372 reg = wm97xx_reg_read(wm, 0x5a); in wm97xx_init_pen_irq()
373 wm97xx_reg_write(wm, 0x5a, reg & ~0x0001); in wm97xx_init_pen_irq()
379 static int wm97xx_read_samples(struct wm97xx *wm) in wm97xx_read_samples() argument
384 mutex_lock(&wm->codec_mutex); in wm97xx_read_samples()
386 if (wm->mach_ops && wm->mach_ops->acc_enabled) in wm97xx_read_samples()
387 rc = wm->mach_ops->acc_pen_down(wm); in wm97xx_read_samples()
389 rc = wm->codec->poll_touch(wm, &data); in wm97xx_read_samples()
392 if (wm->pen_is_down) { in wm97xx_read_samples()
393 wm->pen_is_down = 0; in wm97xx_read_samples()
394 dev_dbg(wm->dev, "pen up\n"); in wm97xx_read_samples()
395 input_report_abs(wm->input_dev, ABS_PRESSURE, 0); in wm97xx_read_samples()
396 input_report_key(wm->input_dev, BTN_TOUCH, 0); in wm97xx_read_samples()
397 input_sync(wm->input_dev); in wm97xx_read_samples()
409 if (wm->ts_reader_interval < HZ / 10) in wm97xx_read_samples()
410 wm->ts_reader_interval++; in wm97xx_read_samples()
414 dev_dbg(wm->dev, in wm97xx_read_samples()
423 dev_dbg(wm->dev, "Measurement out of range, dropping it\n"); in wm97xx_read_samples()
428 input_report_abs(wm->input_dev, ABS_X, data.x & 0xfff); in wm97xx_read_samples()
429 input_report_abs(wm->input_dev, ABS_Y, data.y & 0xfff); in wm97xx_read_samples()
430 input_report_abs(wm->input_dev, ABS_PRESSURE, data.p & 0xfff); in wm97xx_read_samples()
431 input_report_key(wm->input_dev, BTN_TOUCH, 1); in wm97xx_read_samples()
432 input_sync(wm->input_dev); in wm97xx_read_samples()
433 wm->pen_is_down = 1; in wm97xx_read_samples()
434 wm->ts_reader_interval = wm->ts_reader_min_interval; in wm97xx_read_samples()
436 dev_dbg(wm->dev, "pen down\n"); in wm97xx_read_samples()
437 wm->pen_is_down = 1; in wm97xx_read_samples()
438 wm->ts_reader_interval = wm->ts_reader_min_interval; in wm97xx_read_samples()
442 mutex_unlock(&wm->codec_mutex); in wm97xx_read_samples()
452 struct wm97xx *wm = container_of(work, struct wm97xx, ts_reader.work); in wm97xx_ts_reader() local
454 BUG_ON(!wm->codec); in wm97xx_ts_reader()
457 rc = wm97xx_read_samples(wm); in wm97xx_ts_reader()
460 if (wm->pen_is_down || !wm->pen_irq) in wm97xx_ts_reader()
461 queue_delayed_work(wm->ts_workq, &wm->ts_reader, in wm97xx_ts_reader()
462 wm->ts_reader_interval); in wm97xx_ts_reader()
474 struct wm97xx *wm = input_get_drvdata(idev); in wm97xx_ts_input_open() local
476 wm->ts_workq = alloc_ordered_workqueue("kwm97xx", 0); in wm97xx_ts_input_open()
477 if (wm->ts_workq == NULL) { in wm97xx_ts_input_open()
478 dev_err(wm->dev, in wm97xx_ts_input_open()
484 if (wm->mach_ops && wm->mach_ops->acc_enabled) in wm97xx_ts_input_open()
485 wm->codec->acc_enable(wm, 1); in wm97xx_ts_input_open()
486 wm->codec->dig_enable(wm, 1); in wm97xx_ts_input_open()
488 INIT_DELAYED_WORK(&wm->ts_reader, wm97xx_ts_reader); in wm97xx_ts_input_open()
490 wm->ts_reader_min_interval = HZ >= 100 ? HZ / 100 : 1; in wm97xx_ts_input_open()
491 if (wm->ts_reader_min_interval < 1) in wm97xx_ts_input_open()
492 wm->ts_reader_min_interval = 1; in wm97xx_ts_input_open()
493 wm->ts_reader_interval = wm->ts_reader_min_interval; in wm97xx_ts_input_open()
495 wm->pen_is_down = 0; in wm97xx_ts_input_open()
496 if (wm->pen_irq) in wm97xx_ts_input_open()
497 wm97xx_init_pen_irq(wm); in wm97xx_ts_input_open()
499 dev_err(wm->dev, "No IRQ specified\n"); in wm97xx_ts_input_open()
504 if (wm->pen_irq == 0) in wm97xx_ts_input_open()
505 queue_delayed_work(wm->ts_workq, &wm->ts_reader, in wm97xx_ts_input_open()
506 wm->ts_reader_interval); in wm97xx_ts_input_open()
522 struct wm97xx *wm = input_get_drvdata(idev); in wm97xx_ts_input_close() local
525 if (wm->pen_irq) { in wm97xx_ts_input_close()
527 if (wm->id != WM9705_ID2) { in wm97xx_ts_input_close()
528 BUG_ON(!wm->mach_ops->irq_gpio); in wm97xx_ts_input_close()
529 reg = wm97xx_reg_read(wm, AC97_MISC_AFE); in wm97xx_ts_input_close()
530 wm97xx_reg_write(wm, AC97_MISC_AFE, in wm97xx_ts_input_close()
531 reg | wm->mach_ops->irq_gpio); in wm97xx_ts_input_close()
534 free_irq(wm->pen_irq, wm); in wm97xx_ts_input_close()
537 wm->pen_is_down = 0; in wm97xx_ts_input_close()
542 cancel_delayed_work_sync(&wm->ts_reader); in wm97xx_ts_input_close()
544 destroy_workqueue(wm->ts_workq); in wm97xx_ts_input_close()
547 wm->codec->dig_enable(wm, 0); in wm97xx_ts_input_close()
548 if (wm->mach_ops && wm->mach_ops->acc_enabled) in wm97xx_ts_input_close()
549 wm->codec->acc_enable(wm, 0); in wm97xx_ts_input_close()
552 static int wm97xx_register_touch(struct wm97xx *wm) in wm97xx_register_touch() argument
554 struct wm97xx_pdata *pdata = dev_get_platdata(wm->dev); in wm97xx_register_touch()
557 wm->input_dev = devm_input_allocate_device(wm->dev); in wm97xx_register_touch()
558 if (wm->input_dev == NULL) in wm97xx_register_touch()
562 wm->input_dev->name = "wm97xx touchscreen"; in wm97xx_register_touch()
563 wm->input_dev->phys = "wm97xx"; in wm97xx_register_touch()
564 wm->input_dev->open = wm97xx_ts_input_open; in wm97xx_register_touch()
565 wm->input_dev->close = wm97xx_ts_input_close; in wm97xx_register_touch()
567 __set_bit(EV_ABS, wm->input_dev->evbit); in wm97xx_register_touch()
568 __set_bit(EV_KEY, wm->input_dev->evbit); in wm97xx_register_touch()
569 __set_bit(BTN_TOUCH, wm->input_dev->keybit); in wm97xx_register_touch()
571 input_set_abs_params(wm->input_dev, ABS_X, abs_x[0], abs_x[1], in wm97xx_register_touch()
573 input_set_abs_params(wm->input_dev, ABS_Y, abs_y[0], abs_y[1], in wm97xx_register_touch()
575 input_set_abs_params(wm->input_dev, ABS_PRESSURE, abs_p[0], abs_p[1], in wm97xx_register_touch()
578 input_set_drvdata(wm->input_dev, wm); in wm97xx_register_touch()
579 wm->input_dev->dev.parent = wm->dev; in wm97xx_register_touch()
581 ret = input_register_device(wm->input_dev); in wm97xx_register_touch()
589 wm->touch_dev = platform_device_alloc("wm97xx-touch", -1); in wm97xx_register_touch()
590 if (!wm->touch_dev) in wm97xx_register_touch()
593 platform_set_drvdata(wm->touch_dev, wm); in wm97xx_register_touch()
594 wm->touch_dev->dev.parent = wm->dev; in wm97xx_register_touch()
595 wm->touch_dev->dev.platform_data = pdata; in wm97xx_register_touch()
596 ret = platform_device_add(wm->touch_dev); in wm97xx_register_touch()
602 platform_device_put(wm->touch_dev); in wm97xx_register_touch()
607 static void wm97xx_unregister_touch(struct wm97xx *wm) in wm97xx_unregister_touch() argument
609 platform_device_unregister(wm->touch_dev); in wm97xx_unregister_touch()
612 static int _wm97xx_probe(struct wm97xx *wm) in _wm97xx_probe() argument
616 mutex_init(&wm->codec_mutex); in _wm97xx_probe()
617 dev_set_drvdata(wm->dev, wm); in _wm97xx_probe()
620 id = wm97xx_reg_read(wm, AC97_VENDOR_ID1); in _wm97xx_probe()
622 dev_err(wm->dev, in _wm97xx_probe()
627 wm->id = wm97xx_reg_read(wm, AC97_VENDOR_ID2); in _wm97xx_probe()
629 wm->variant = WM97xx_GENERIC; in _wm97xx_probe()
631 dev_info(wm->dev, "detected a wm97%02x codec\n", wm->id & 0xff); in _wm97xx_probe()
633 switch (wm->id & 0xff) { in _wm97xx_probe()
636 wm->codec = &wm9705_codec; in _wm97xx_probe()
641 wm->codec = &wm9712_codec; in _wm97xx_probe()
646 wm->codec = &wm9713_codec; in _wm97xx_probe()
650 dev_err(wm->dev, "Support for wm97%02x not compiled in.\n", in _wm97xx_probe()
651 wm->id & 0xff); in _wm97xx_probe()
656 wm->codec->phy_init(wm); in _wm97xx_probe()
659 wm->gpio[0] = wm97xx_reg_read(wm, AC97_GPIO_CFG); in _wm97xx_probe()
660 wm->gpio[1] = wm97xx_reg_read(wm, AC97_GPIO_POLARITY); in _wm97xx_probe()
661 wm->gpio[2] = wm97xx_reg_read(wm, AC97_GPIO_STICKY); in _wm97xx_probe()
662 wm->gpio[3] = wm97xx_reg_read(wm, AC97_GPIO_WAKEUP); in _wm97xx_probe()
663 wm->gpio[4] = wm97xx_reg_read(wm, AC97_GPIO_STATUS); in _wm97xx_probe()
664 wm->gpio[5] = wm97xx_reg_read(wm, AC97_MISC_AFE); in _wm97xx_probe()
666 return wm97xx_register_touch(wm); in _wm97xx_probe()
669 static void wm97xx_remove_battery(struct wm97xx *wm) in wm97xx_remove_battery() argument
671 platform_device_unregister(wm->battery_dev); in wm97xx_remove_battery()
674 static int wm97xx_add_battery(struct wm97xx *wm, in wm97xx_add_battery() argument
679 wm->battery_dev = platform_device_alloc("wm97xx-battery", -1); in wm97xx_add_battery()
680 if (!wm->battery_dev) in wm97xx_add_battery()
683 platform_set_drvdata(wm->battery_dev, wm); in wm97xx_add_battery()
684 wm->battery_dev->dev.parent = wm->dev; in wm97xx_add_battery()
685 wm->battery_dev->dev.platform_data = pdata; in wm97xx_add_battery()
686 ret = platform_device_add(wm->battery_dev); in wm97xx_add_battery()
688 platform_device_put(wm->battery_dev); in wm97xx_add_battery()
695 struct wm97xx *wm; in wm97xx_probe() local
699 wm = devm_kzalloc(dev, sizeof(struct wm97xx), GFP_KERNEL); in wm97xx_probe()
700 if (!wm) in wm97xx_probe()
703 wm->dev = dev; in wm97xx_probe()
704 wm->ac97 = to_ac97_t(dev); in wm97xx_probe()
706 ret = _wm97xx_probe(wm); in wm97xx_probe()
710 ret = wm97xx_add_battery(wm, pdata ? pdata->batt_pdata : NULL); in wm97xx_probe()
717 wm97xx_unregister_touch(wm); in wm97xx_probe()
723 struct wm97xx *wm = dev_get_drvdata(dev); in wm97xx_remove() local
725 wm97xx_remove_battery(wm); in wm97xx_remove()
726 wm97xx_unregister_touch(wm); in wm97xx_remove()
733 struct wm97xx *wm; in wm97xx_mfd_probe() local
737 wm = devm_kzalloc(&pdev->dev, sizeof(struct wm97xx), GFP_KERNEL); in wm97xx_mfd_probe()
738 if (!wm) in wm97xx_mfd_probe()
741 wm->dev = &pdev->dev; in wm97xx_mfd_probe()
742 wm->ac97 = mfd_pdata->ac97; in wm97xx_mfd_probe()
744 ret = _wm97xx_probe(wm); in wm97xx_mfd_probe()
748 ret = wm97xx_add_battery(wm, mfd_pdata->batt_pdata); in wm97xx_mfd_probe()
755 wm97xx_unregister_touch(wm); in wm97xx_mfd_probe()
768 struct wm97xx *wm = dev_get_drvdata(dev); in wm97xx_suspend() local
772 if (device_may_wakeup(&wm->input_dev->dev)) in wm97xx_suspend()
773 suspend_mode = wm->suspend_mode; in wm97xx_suspend()
777 mutex_lock(&wm->input_dev->mutex); in wm97xx_suspend()
778 if (input_device_enabled(wm->input_dev)) in wm97xx_suspend()
779 cancel_delayed_work_sync(&wm->ts_reader); in wm97xx_suspend()
782 reg = wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER2); in wm97xx_suspend()
784 if (input_device_enabled(wm->input_dev)) in wm97xx_suspend()
786 wm->ac97->bus->ops->write(wm->ac97, AC97_WM97XX_DIGITISER2, reg); in wm97xx_suspend()
790 if (wm->id == WM9713_ID2 && in wm97xx_suspend()
791 (!input_device_enabled(wm->input_dev) || !suspend_mode)) { in wm97xx_suspend()
792 reg = wm97xx_reg_read(wm, AC97_EXTENDED_MID) | 0x8000; in wm97xx_suspend()
793 wm97xx_reg_write(wm, AC97_EXTENDED_MID, reg); in wm97xx_suspend()
795 mutex_unlock(&wm->input_dev->mutex); in wm97xx_suspend()
802 struct wm97xx *wm = dev_get_drvdata(dev); in wm97xx_resume() local
804 mutex_lock(&wm->input_dev->mutex); in wm97xx_resume()
806 if (wm->id == WM9713_ID2) { in wm97xx_resume()
807 wm97xx_reg_write(wm, AC97_WM9713_DIG1, wm->dig[0]); in wm97xx_resume()
808 wm97xx_reg_write(wm, 0x5a, wm->misc); in wm97xx_resume()
809 if (input_device_enabled(wm->input_dev)) { in wm97xx_resume()
811 reg = wm97xx_reg_read(wm, AC97_EXTENDED_MID) & 0x7fff; in wm97xx_resume()
812 wm97xx_reg_write(wm, AC97_EXTENDED_MID, reg); in wm97xx_resume()
816 wm97xx_reg_write(wm, AC97_WM9713_DIG2, wm->dig[1]); in wm97xx_resume()
817 wm97xx_reg_write(wm, AC97_WM9713_DIG3, wm->dig[2]); in wm97xx_resume()
819 wm97xx_reg_write(wm, AC97_GPIO_CFG, wm->gpio[0]); in wm97xx_resume()
820 wm97xx_reg_write(wm, AC97_GPIO_POLARITY, wm->gpio[1]); in wm97xx_resume()
821 wm97xx_reg_write(wm, AC97_GPIO_STICKY, wm->gpio[2]); in wm97xx_resume()
822 wm97xx_reg_write(wm, AC97_GPIO_WAKEUP, wm->gpio[3]); in wm97xx_resume()
823 wm97xx_reg_write(wm, AC97_GPIO_STATUS, wm->gpio[4]); in wm97xx_resume()
824 wm97xx_reg_write(wm, AC97_MISC_AFE, wm->gpio[5]); in wm97xx_resume()
826 if (input_device_enabled(wm->input_dev) && !wm->pen_irq) { in wm97xx_resume()
827 wm->ts_reader_interval = wm->ts_reader_min_interval; in wm97xx_resume()
828 queue_delayed_work(wm->ts_workq, &wm->ts_reader, in wm97xx_resume()
829 wm->ts_reader_interval); in wm97xx_resume()
831 mutex_unlock(&wm->input_dev->mutex); in wm97xx_resume()
841 int wm97xx_register_mach_ops(struct wm97xx *wm, in wm97xx_register_mach_ops() argument
844 mutex_lock(&wm->codec_mutex); in wm97xx_register_mach_ops()
845 if (wm->mach_ops) { in wm97xx_register_mach_ops()
846 mutex_unlock(&wm->codec_mutex); in wm97xx_register_mach_ops()
849 wm->mach_ops = mach_ops; in wm97xx_register_mach_ops()
850 mutex_unlock(&wm->codec_mutex); in wm97xx_register_mach_ops()
856 void wm97xx_unregister_mach_ops(struct wm97xx *wm) in wm97xx_unregister_mach_ops() argument
858 mutex_lock(&wm->codec_mutex); in wm97xx_unregister_mach_ops()
859 wm->mach_ops = NULL; in wm97xx_unregister_mach_ops()
860 mutex_unlock(&wm->codec_mutex); in wm97xx_unregister_mach_ops()