Lines Matching +full:mute +full:- +full:gpios
1 // SPDX-License-Identifier: GPL-2.0-only
63 *gpioptr = -1; in get_gpio()
68 /* some machines have only gpioX/extint-gpioX nodes, in get_gpio()
69 * and an audio-gpio property saying what it is ... in get_gpio()
76 audio_gpio = of_get_property(np, "audio-gpio", NULL); in get_gpio()
98 /* this is a hack, usually the GPIOs 'reg' property in get_gpio()
104 reg = of_get_property(np, "audio-gpio-active-state", NULL); in get_gpio()
110 * (which, incidentally, snd-powermac also does...) */ in get_gpio()
152 rt->implementation_private &= ~(1<<bit); \
153 rt->implementation_private |= (!!on << bit); \
158 return (rt->implementation_private>>bit)&1; \
188 saved = rt->implementation_private; in ftr_gpio_all_amps_off()
194 rt->implementation_private = saved; in ftr_gpio_all_amps_off()
202 s = rt->implementation_private; in ftr_gpio_all_amps_restore()
215 mutex_lock(¬if->mutex); in ftr_handle_notify()
216 if (notif->notify) in ftr_handle_notify()
217 notif->notify(notif->data); in ftr_handle_notify()
218 mutex_unlock(¬if->mutex); in ftr_handle_notify()
225 if (gpio == -1) in gpio_enable_dual_edge()
234 get_gpio("headphone-mute", NULL, in ftr_gpio_init()
237 get_gpio("amp-mute", NULL, in ftr_gpio_init()
240 get_gpio("lineout-mute", NULL, in ftr_gpio_init()
243 get_gpio("hw-reset", "audio-hw-reset", in ftr_gpio_init()
246 if (get_gpio("master-mute", NULL, in ftr_gpio_init()
253 headphone_detect_node = get_gpio("headphone-detect", NULL, in ftr_gpio_init()
258 lineout_detect_node = get_gpio("lineout-detect", "line-output-detect", in ftr_gpio_init()
261 linein_detect_node = get_gpio("linein-detect", "line-input-detect", in ftr_gpio_init()
274 rt->implementation_private = 0; in ftr_gpio_init()
275 INIT_DELAYED_WORK(&rt->headphone_notify.work, ftr_handle_notify); in ftr_gpio_init()
276 INIT_DELAYED_WORK(&rt->line_in_notify.work, ftr_handle_notify); in ftr_gpio_init()
277 INIT_DELAYED_WORK(&rt->line_out_notify.work, ftr_handle_notify); in ftr_gpio_init()
278 mutex_init(&rt->headphone_notify.mutex); in ftr_gpio_init()
279 mutex_init(&rt->line_in_notify.mutex); in ftr_gpio_init()
280 mutex_init(&rt->line_out_notify.mutex); in ftr_gpio_init()
286 rt->implementation_private = 0; in ftr_gpio_exit()
287 if (rt->headphone_notify.notify) in ftr_gpio_exit()
288 free_irq(headphone_detect_irq, &rt->headphone_notify); in ftr_gpio_exit()
289 if (rt->line_in_notify.gpio_private) in ftr_gpio_exit()
290 free_irq(linein_detect_irq, &rt->line_in_notify); in ftr_gpio_exit()
291 if (rt->line_out_notify.gpio_private) in ftr_gpio_exit()
292 free_irq(lineout_detect_irq, &rt->line_out_notify); in ftr_gpio_exit()
293 cancel_delayed_work_sync(&rt->headphone_notify.work); in ftr_gpio_exit()
294 cancel_delayed_work_sync(&rt->line_in_notify.work); in ftr_gpio_exit()
295 cancel_delayed_work_sync(&rt->line_out_notify.work); in ftr_gpio_exit()
296 mutex_destroy(&rt->headphone_notify.mutex); in ftr_gpio_exit()
297 mutex_destroy(&rt->line_in_notify.mutex); in ftr_gpio_exit()
298 mutex_destroy(&rt->line_out_notify.mutex); in ftr_gpio_exit()
305 schedule_delayed_work(¬if->work, 0); in ftr_handle_notify_irq()
319 int err = -EBUSY; in ftr_set_notify()
323 notif = &rt->headphone_notify; in ftr_set_notify()
324 name = "headphone-detect"; in ftr_set_notify()
328 notif = &rt->line_in_notify; in ftr_set_notify()
329 name = "linein-detect"; in ftr_set_notify()
333 notif = &rt->line_out_notify; in ftr_set_notify()
334 name = "lineout-detect"; in ftr_set_notify()
338 return -EINVAL; in ftr_set_notify()
342 return -ENODEV; in ftr_set_notify()
344 mutex_lock(¬if->mutex); in ftr_set_notify()
346 old = notif->notify; in ftr_set_notify()
354 if (old == notify && notif->data == data) in ftr_set_notify()
368 notif->notify = notify; in ftr_set_notify()
369 notif->data = data; in ftr_set_notify()
373 mutex_unlock(¬if->mutex); in ftr_set_notify()
396 return -EINVAL; in ftr_get_detect()
399 if (gpio == -1) in ftr_get_detect()
400 return -ENODEV; in ftr_get_detect()