Lines Matching defs:wm831x

2  * wm831x-irq.c  --  Interrupt controller support for Wolfson WM831x PMICs
22 #include <linux/mfd/wm831x/core.h>
23 #include <linux/mfd/wm831x/pdata.h>
24 #include <linux/mfd/wm831x/gpio.h>
25 #include <linux/mfd/wm831x/irq.h>
328 static inline struct wm831x_irq_data *irq_to_wm831x_irq(struct wm831x *wm831x,
331 return &wm831x_irqs[irq - wm831x->irq_base];
336 struct wm831x *wm831x = irq_data_get_irq_chip_data(data);
338 mutex_lock(&wm831x->irq_lock);
343 struct wm831x *wm831x = irq_data_get_irq_chip_data(data);
346 for (i = 0; i < ARRAY_SIZE(wm831x->gpio_update); i++) {
347 if (wm831x->gpio_update[i]) {
348 wm831x_set_bits(wm831x, WM831X_GPIO1_CONTROL + i,
350 wm831x->gpio_update[i]);
351 wm831x->gpio_update[i] = 0;
355 for (i = 0; i < ARRAY_SIZE(wm831x->irq_masks_cur); i++) {
358 if (wm831x->irq_masks_cur[i] != wm831x->irq_masks_cache[i]) {
359 dev_dbg(wm831x->dev, "IRQ mask sync: %x = %x\n",
361 wm831x->irq_masks_cur[i]);
363 wm831x->irq_masks_cache[i] = wm831x->irq_masks_cur[i];
364 wm831x_reg_write(wm831x,
366 wm831x->irq_masks_cur[i]);
370 mutex_unlock(&wm831x->irq_lock);
375 struct wm831x *wm831x = irq_data_get_irq_chip_data(data);
376 struct wm831x_irq_data *irq_data = irq_to_wm831x_irq(wm831x,
379 wm831x->irq_masks_cur[irq_data->reg - 1] &= ~irq_data->mask;
384 struct wm831x *wm831x = irq_data_get_irq_chip_data(data);
385 struct wm831x_irq_data *irq_data = irq_to_wm831x_irq(wm831x,
388 wm831x->irq_masks_cur[irq_data->reg - 1] |= irq_data->mask;
393 struct wm831x *wm831x = irq_data_get_irq_chip_data(data);
396 irq = data->irq - wm831x->irq_base;
417 wm831x->gpio_update[irq] = 0x10000 | WM831X_GPN_INT_MODE;
418 wm831x->gpio_level[irq] = false;
421 wm831x->gpio_update[irq] = 0x10000 | WM831X_GPN_POL;
422 wm831x->gpio_level[irq] = false;
425 wm831x->gpio_update[irq] = 0x10000;
426 wm831x->gpio_level[irq] = false;
429 wm831x->gpio_update[irq] = 0x10000 | WM831X_GPN_POL;
430 wm831x->gpio_level[irq] = true;
440 .name = "wm831x",
452 struct wm831x *wm831x = data;
459 primary = wm831x_reg_read(wm831x, WM831X_SYSTEM_INTERRUPTS);
461 dev_err(wm831x->dev, "Failed to read system interrupt: %d\n",
472 handle_nested_irq(wm831x->irq_base + WM831X_IRQ_TCHPD);
474 handle_nested_irq(wm831x->irq_base + WM831X_IRQ_TCHDATA);
490 *status = wm831x_reg_read(wm831x, status_addr);
492 dev_err(wm831x->dev,
501 *status &= ~wm831x->irq_masks_cur[offset];
506 wm831x_reg_write(wm831x, status_addr, *status);
510 handle_nested_irq(wm831x->irq_base + i);
516 wm831x->gpio_level[i - WM831X_IRQ_GPIO_1]) {
517 ret = wm831x_reg_read(wm831x, WM831X_GPIO_LEVEL);
519 handle_nested_irq(wm831x->irq_base + i);
520 ret = wm831x_reg_read(wm831x,
530 int wm831x_irq_init(struct wm831x *wm831x, int irq)
532 struct wm831x_pdata *pdata = wm831x->dev->platform_data;
535 mutex_init(&wm831x->irq_lock);
538 for (i = 0; i < ARRAY_SIZE(wm831x->irq_masks_cur); i++) {
539 wm831x->irq_masks_cur[i] = 0xffff;
540 wm831x->irq_masks_cache[i] = 0xffff;
541 wm831x_reg_write(wm831x, WM831X_INTERRUPT_STATUS_1_MASK + i,
547 wm831x->irq_base = -1;
549 wm831x->irq_base = pdata->irq_base;
551 wm831x->irq_base = irq_alloc_descs(wm831x->irq_base, 0,
553 if (wm831x->irq_base < 0) {
554 dev_warn(wm831x->dev, "Failed to allocate IRQs: %d\n",
555 wm831x->irq_base);
556 wm831x->irq_base = 0;
565 wm831x_set_bits(wm831x, WM831X_IRQ_CONFIG,
575 dev_warn(wm831x->dev, "Can't enable IRQ as wake source: %d\n",
579 wm831x->irq = irq;
582 for (cur_irq = wm831x->irq_base;
583 cur_irq < ARRAY_SIZE(wm831x_irqs) + wm831x->irq_base;
585 irq_set_chip_data(cur_irq, wm831x);
602 "wm831x", wm831x);
604 dev_err(wm831x->dev, "Failed to request IRQ %d: %d\n",
609 dev_warn(wm831x->dev,
614 wm831x_reg_write(wm831x, WM831X_SYSTEM_INTERRUPTS_MASK, 0);
619 void wm831x_irq_exit(struct wm831x *wm831x)
621 if (wm831x->irq)
622 free_irq(wm831x->irq, wm831x);