Lines Matching refs:wm8350

3  * wm8350-irq.c  --  IRQ support for Wolfson WM8350
17 #include <linux/mfd/wm8350/core.h>
18 #include <linux/mfd/wm8350/audio.h>
19 #include <linux/mfd/wm8350/comparator.h>
20 #include <linux/mfd/wm8350/gpio.h>
21 #include <linux/mfd/wm8350/pmic.h>
22 #include <linux/mfd/wm8350/rtc.h>
23 #include <linux/mfd/wm8350/supply.h>
24 #include <linux/mfd/wm8350/wdt.h>
361 static inline struct wm8350_irq_data *irq_to_wm8350_irq(struct wm8350 *wm8350,
364 return &wm8350_irqs[irq - wm8350->irq_base];
378 struct wm8350 *wm8350 = irq_data;
385 level_one = wm8350_reg_read(wm8350, WM8350_SYSTEM_INTERRUPTS)
386 & ~wm8350_reg_read(wm8350, WM8350_SYSTEM_INTERRUPTS_MASK);
401 wm8350_reg_read(wm8350, WM8350_INT_STATUS_1 +
403 sub_reg[data->reg] &= ~wm8350->irq_masks[data->reg];
408 handle_nested_irq(wm8350->irq_base + i);
416 struct wm8350 *wm8350 = irq_data_get_irq_chip_data(data);
418 mutex_lock(&wm8350->irq_lock);
423 struct wm8350 *wm8350 = irq_data_get_irq_chip_data(data);
426 for (i = 0; i < ARRAY_SIZE(wm8350->irq_masks); i++) {
429 WARN_ON(regmap_update_bits(wm8350->regmap,
431 0xffff, wm8350->irq_masks[i]));
434 mutex_unlock(&wm8350->irq_lock);
439 struct wm8350 *wm8350 = irq_data_get_irq_chip_data(data);
440 struct wm8350_irq_data *irq_data = irq_to_wm8350_irq(wm8350,
443 wm8350->irq_masks[irq_data->reg] &= ~irq_data->mask;
448 struct wm8350 *wm8350 = irq_data_get_irq_chip_data(data);
449 struct wm8350_irq_data *irq_data = irq_to_wm8350_irq(wm8350,
452 wm8350->irq_masks[irq_data->reg] |= irq_data->mask;
456 .name = "wm8350",
463 int wm8350_irq_init(struct wm8350 *wm8350, int irq,
471 dev_warn(wm8350->dev, "No interrupt support, no core IRQ\n");
476 wm8350_reg_write(wm8350, WM8350_SYSTEM_INTERRUPTS_MASK, 0xFFFF);
481 for (i = 0; i < ARRAY_SIZE(wm8350->irq_masks); i++) {
482 wm8350_reg_write(wm8350, WM8350_INT_STATUS_1_MASK + i,
484 wm8350->irq_masks[i] =
485 wm8350_reg_read(wm8350,
489 mutex_init(&wm8350->irq_lock);
490 wm8350->chip_irq = irq;
495 wm8350->irq_base =
497 if (wm8350->irq_base < 0) {
498 dev_warn(wm8350->dev, "Allocating irqs failed with %d\n",
499 wm8350->irq_base);
506 wm8350_set_bits(wm8350, WM8350_SYSTEM_CONTROL_1,
511 wm8350_clear_bits(wm8350, WM8350_SYSTEM_CONTROL_1,
516 for (cur_irq = wm8350->irq_base;
517 cur_irq < ARRAY_SIZE(wm8350_irqs) + wm8350->irq_base;
519 irq_set_chip_data(cur_irq, wm8350);
528 "wm8350", wm8350);
530 dev_err(wm8350->dev, "Failed to request IRQ: %d\n", ret);
533 wm8350_reg_write(wm8350, WM8350_SYSTEM_INTERRUPTS_MASK, 0);
538 int wm8350_irq_exit(struct wm8350 *wm8350)
540 free_irq(wm8350->chip_irq, wm8350);