^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: GPL-2.0+
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /* Interrupt support for Dialog DA9063
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * Copyright 2012 Dialog Semiconductor Ltd.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Copyright 2013 Philipp Zabel, Pengutronix
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * Author: Michal Hajduk, Dialog Semiconductor
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <linux/kernel.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include <linux/module.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include <linux/irq.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <linux/mfd/core.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #include <linux/interrupt.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #include <linux/regmap.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #include <linux/mfd/da9063/core.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #define DA9063_REG_EVENT_A_OFFSET 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #define DA9063_REG_EVENT_B_OFFSET 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) #define DA9063_REG_EVENT_C_OFFSET 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) #define DA9063_REG_EVENT_D_OFFSET 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) static const struct regmap_irq da9063_irqs[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) /* DA9063 event A register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) REGMAP_IRQ_REG(DA9063_IRQ_ONKEY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) DA9063_REG_EVENT_A_OFFSET, DA9063_M_ONKEY),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) REGMAP_IRQ_REG(DA9063_IRQ_ALARM,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) DA9063_REG_EVENT_A_OFFSET, DA9063_M_ALARM),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) REGMAP_IRQ_REG(DA9063_IRQ_TICK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) DA9063_REG_EVENT_A_OFFSET, DA9063_M_TICK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) REGMAP_IRQ_REG(DA9063_IRQ_ADC_RDY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) DA9063_REG_EVENT_A_OFFSET, DA9063_M_ADC_RDY),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) REGMAP_IRQ_REG(DA9063_IRQ_SEQ_RDY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) DA9063_REG_EVENT_A_OFFSET, DA9063_M_SEQ_RDY),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) /* DA9063 event B register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) REGMAP_IRQ_REG(DA9063_IRQ_WAKE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) DA9063_REG_EVENT_B_OFFSET, DA9063_M_WAKE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) REGMAP_IRQ_REG(DA9063_IRQ_TEMP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) DA9063_REG_EVENT_B_OFFSET, DA9063_M_TEMP),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) REGMAP_IRQ_REG(DA9063_IRQ_COMP_1V2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) DA9063_REG_EVENT_B_OFFSET, DA9063_M_COMP_1V2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) REGMAP_IRQ_REG(DA9063_IRQ_LDO_LIM,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) DA9063_REG_EVENT_B_OFFSET, DA9063_M_LDO_LIM),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) REGMAP_IRQ_REG(DA9063_IRQ_REG_UVOV,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) DA9063_REG_EVENT_B_OFFSET, DA9063_M_UVOV),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) REGMAP_IRQ_REG(DA9063_IRQ_DVC_RDY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) DA9063_REG_EVENT_B_OFFSET, DA9063_M_DVC_RDY),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) REGMAP_IRQ_REG(DA9063_IRQ_VDD_MON,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) DA9063_REG_EVENT_B_OFFSET, DA9063_M_VDD_MON),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) REGMAP_IRQ_REG(DA9063_IRQ_WARN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) DA9063_REG_EVENT_B_OFFSET, DA9063_M_VDD_WARN),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) /* DA9063 event C register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) REGMAP_IRQ_REG(DA9063_IRQ_GPI0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) DA9063_REG_EVENT_C_OFFSET, DA9063_M_GPI0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) REGMAP_IRQ_REG(DA9063_IRQ_GPI1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) DA9063_REG_EVENT_C_OFFSET, DA9063_M_GPI1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) REGMAP_IRQ_REG(DA9063_IRQ_GPI2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) DA9063_REG_EVENT_C_OFFSET, DA9063_M_GPI2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) REGMAP_IRQ_REG(DA9063_IRQ_GPI3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) DA9063_REG_EVENT_C_OFFSET, DA9063_M_GPI3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) REGMAP_IRQ_REG(DA9063_IRQ_GPI4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) DA9063_REG_EVENT_C_OFFSET, DA9063_M_GPI4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) REGMAP_IRQ_REG(DA9063_IRQ_GPI5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) DA9063_REG_EVENT_C_OFFSET, DA9063_M_GPI5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) REGMAP_IRQ_REG(DA9063_IRQ_GPI6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) DA9063_REG_EVENT_C_OFFSET, DA9063_M_GPI6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) REGMAP_IRQ_REG(DA9063_IRQ_GPI7,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) DA9063_REG_EVENT_C_OFFSET, DA9063_M_GPI7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) /* DA9063 event D register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) REGMAP_IRQ_REG(DA9063_IRQ_GPI8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) DA9063_REG_EVENT_D_OFFSET, DA9063_M_GPI8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) REGMAP_IRQ_REG(DA9063_IRQ_GPI9,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) DA9063_REG_EVENT_D_OFFSET, DA9063_M_GPI9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) REGMAP_IRQ_REG(DA9063_IRQ_GPI10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) DA9063_REG_EVENT_D_OFFSET, DA9063_M_GPI10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) REGMAP_IRQ_REG(DA9063_IRQ_GPI11,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) DA9063_REG_EVENT_D_OFFSET, DA9063_M_GPI11),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) REGMAP_IRQ_REG(DA9063_IRQ_GPI12,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) DA9063_REG_EVENT_D_OFFSET, DA9063_M_GPI12),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) REGMAP_IRQ_REG(DA9063_IRQ_GPI13,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) DA9063_REG_EVENT_D_OFFSET, DA9063_M_GPI13),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) REGMAP_IRQ_REG(DA9063_IRQ_GPI14,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) DA9063_REG_EVENT_D_OFFSET, DA9063_M_GPI14),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) REGMAP_IRQ_REG(DA9063_IRQ_GPI15,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) DA9063_REG_EVENT_D_OFFSET, DA9063_M_GPI15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) static const struct regmap_irq_chip da9063_irq_chip = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) .name = "da9063-irq",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) .irqs = da9063_irqs,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) .num_irqs = ARRAY_SIZE(da9063_irqs),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) .num_regs = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) .status_base = DA9063_REG_EVENT_A,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) .mask_base = DA9063_REG_IRQ_MASK_A,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) .ack_base = DA9063_REG_EVENT_A,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) .init_ack_masked = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) static const struct regmap_irq da9063l_irqs[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) /* DA9063 event A register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) REGMAP_IRQ_REG(DA9063_IRQ_ONKEY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) DA9063_REG_EVENT_A_OFFSET, DA9063_M_ONKEY),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) REGMAP_IRQ_REG(DA9063_IRQ_ADC_RDY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) DA9063_REG_EVENT_A_OFFSET, DA9063_M_ADC_RDY),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) REGMAP_IRQ_REG(DA9063_IRQ_SEQ_RDY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) DA9063_REG_EVENT_A_OFFSET, DA9063_M_SEQ_RDY),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) /* DA9063 event B register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) REGMAP_IRQ_REG(DA9063_IRQ_WAKE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) DA9063_REG_EVENT_B_OFFSET, DA9063_M_WAKE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) REGMAP_IRQ_REG(DA9063_IRQ_TEMP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) DA9063_REG_EVENT_B_OFFSET, DA9063_M_TEMP),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) REGMAP_IRQ_REG(DA9063_IRQ_COMP_1V2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) DA9063_REG_EVENT_B_OFFSET, DA9063_M_COMP_1V2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) REGMAP_IRQ_REG(DA9063_IRQ_LDO_LIM,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) DA9063_REG_EVENT_B_OFFSET, DA9063_M_LDO_LIM),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) REGMAP_IRQ_REG(DA9063_IRQ_REG_UVOV,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) DA9063_REG_EVENT_B_OFFSET, DA9063_M_UVOV),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) REGMAP_IRQ_REG(DA9063_IRQ_DVC_RDY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) DA9063_REG_EVENT_B_OFFSET, DA9063_M_DVC_RDY),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) REGMAP_IRQ_REG(DA9063_IRQ_VDD_MON,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) DA9063_REG_EVENT_B_OFFSET, DA9063_M_VDD_MON),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) REGMAP_IRQ_REG(DA9063_IRQ_WARN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) DA9063_REG_EVENT_B_OFFSET, DA9063_M_VDD_WARN),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) /* DA9063 event C register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) REGMAP_IRQ_REG(DA9063_IRQ_GPI0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) DA9063_REG_EVENT_C_OFFSET, DA9063_M_GPI0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) REGMAP_IRQ_REG(DA9063_IRQ_GPI1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) DA9063_REG_EVENT_C_OFFSET, DA9063_M_GPI1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) REGMAP_IRQ_REG(DA9063_IRQ_GPI2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) DA9063_REG_EVENT_C_OFFSET, DA9063_M_GPI2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) REGMAP_IRQ_REG(DA9063_IRQ_GPI3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) DA9063_REG_EVENT_C_OFFSET, DA9063_M_GPI3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) REGMAP_IRQ_REG(DA9063_IRQ_GPI4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) DA9063_REG_EVENT_C_OFFSET, DA9063_M_GPI4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) REGMAP_IRQ_REG(DA9063_IRQ_GPI5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) DA9063_REG_EVENT_C_OFFSET, DA9063_M_GPI5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) REGMAP_IRQ_REG(DA9063_IRQ_GPI6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) DA9063_REG_EVENT_C_OFFSET, DA9063_M_GPI6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) REGMAP_IRQ_REG(DA9063_IRQ_GPI7,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) DA9063_REG_EVENT_C_OFFSET, DA9063_M_GPI7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) /* DA9063 event D register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) REGMAP_IRQ_REG(DA9063_IRQ_GPI8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) DA9063_REG_EVENT_D_OFFSET, DA9063_M_GPI8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) REGMAP_IRQ_REG(DA9063_IRQ_GPI9,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) DA9063_REG_EVENT_D_OFFSET, DA9063_M_GPI9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) REGMAP_IRQ_REG(DA9063_IRQ_GPI10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) DA9063_REG_EVENT_D_OFFSET, DA9063_M_GPI10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) REGMAP_IRQ_REG(DA9063_IRQ_GPI11,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) DA9063_REG_EVENT_D_OFFSET, DA9063_M_GPI11),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) REGMAP_IRQ_REG(DA9063_IRQ_GPI12,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) DA9063_REG_EVENT_D_OFFSET, DA9063_M_GPI12),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) REGMAP_IRQ_REG(DA9063_IRQ_GPI13,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) DA9063_REG_EVENT_D_OFFSET, DA9063_M_GPI13),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) REGMAP_IRQ_REG(DA9063_IRQ_GPI14,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) DA9063_REG_EVENT_D_OFFSET, DA9063_M_GPI14),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) REGMAP_IRQ_REG(DA9063_IRQ_GPI15,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) DA9063_REG_EVENT_D_OFFSET, DA9063_M_GPI15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) static const struct regmap_irq_chip da9063l_irq_chip = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) .name = "da9063l-irq",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) .irqs = da9063l_irqs,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) .num_irqs = ARRAY_SIZE(da9063l_irqs),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) .num_regs = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) .status_base = DA9063_REG_EVENT_A,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) .mask_base = DA9063_REG_IRQ_MASK_A,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) .ack_base = DA9063_REG_EVENT_A,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) .init_ack_masked = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) int da9063_irq_init(struct da9063 *da9063)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) const struct regmap_irq_chip *irq_chip;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) int ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) if (!da9063->chip_irq) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) dev_err(da9063->dev, "No IRQ configured\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) return -EINVAL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) if (da9063->type == PMIC_TYPE_DA9063)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) irq_chip = &da9063_irq_chip;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) irq_chip = &da9063l_irq_chip;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) ret = devm_regmap_add_irq_chip(da9063->dev, da9063->regmap,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) da9063->chip_irq,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) IRQF_TRIGGER_LOW | IRQF_ONESHOT | IRQF_SHARED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) da9063->irq_base, irq_chip, &da9063->regmap_irq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) if (ret) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) dev_err(da9063->dev, "Failed to reguest IRQ %d: %d\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) da9063->chip_irq, ret);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) }