Lines Matching +full:0 +full:- +full:mon
1 // SPDX-License-Identifier: GPL-2.0
3 * R-Car Generation 2 da9063(L)/da9210 regulator quirk
9 * After cold boot or da9063-induced restart, both the da9063 and da9210 seem
32 #define IRQC_BASE 0xe61c0000
33 #define IRQC_MONITOR 0x104 /* IRQn Signal Level Monitor Register */
38 #define DA9210_REG_MASK_A 0x54
53 static u8 da9063_irq_clr[] = { DA9063_REG_IRQ_MASK_A, 0xff, 0xff, 0xff, 0xff };
54 static u8 da9210_irq_clr[] = { DA9210_REG_MASK_A, 0xff, 0xff };
81 u32 mon; in regulator_quirk_notify() local
84 return 0; in regulator_quirk_notify()
86 mon = ioread32(irqc + IRQC_MONITOR); in regulator_quirk_notify()
87 dev_dbg(dev, "%s: %ld, IRQC_MONITOR = 0x%x\n", __func__, action, mon); in regulator_quirk_notify()
88 if (mon & REGULATOR_IRQ_MASK) in regulator_quirk_notify()
91 if (action != BUS_NOTIFY_ADD_DEVICE || dev->type == &i2c_adapter_type) in regulator_quirk_notify()
92 return 0; in regulator_quirk_notify()
95 dev_dbg(dev, "Detected %s\n", client->name); in regulator_quirk_notify()
103 if (!pos->shared) in regulator_quirk_notify()
106 if (pos->np->parent != client->dev.parent->of_node) in regulator_quirk_notify()
109 dev_info(&client->dev, "clearing %s@0x%02x interrupts\n", in regulator_quirk_notify()
110 pos->id->compatible, pos->i2c_msg.addr); in regulator_quirk_notify()
112 ret = i2c_transfer(client->adapter, &pos->i2c_msg, 1); in regulator_quirk_notify()
114 dev_err(&client->dev, "i2c error %d\n", ret); in regulator_quirk_notify()
117 mon = ioread32(irqc + IRQC_MONITOR); in regulator_quirk_notify()
118 if (mon & REGULATOR_IRQ_MASK) in regulator_quirk_notify()
121 return 0; in regulator_quirk_notify()
127 list_del(&pos->list); in regulator_quirk_notify()
128 of_node_put(pos->np); in regulator_quirk_notify()
134 return 0; in regulator_quirk_notify()
147 u32 mon, addr; in rcar_gen2_regulator_quirk() local
155 return -ENODEV; in rcar_gen2_regulator_quirk()
169 ret = -ENOMEM; in rcar_gen2_regulator_quirk()
174 argsa = &quirk->irq_args; in rcar_gen2_regulator_quirk()
175 memcpy(&quirk->i2c_msg, id->data, sizeof(quirk->i2c_msg)); in rcar_gen2_regulator_quirk()
177 quirk->id = id; in rcar_gen2_regulator_quirk()
178 quirk->np = of_node_get(np); in rcar_gen2_regulator_quirk()
179 quirk->i2c_msg.addr = addr; in rcar_gen2_regulator_quirk()
181 ret = of_irq_parse_one(np, 0, argsa); in rcar_gen2_regulator_quirk()
189 argsb = &pos->irq_args; in rcar_gen2_regulator_quirk()
191 if (argsa->args_count != argsb->args_count) in rcar_gen2_regulator_quirk()
194 ret = memcmp(argsa->args, argsb->args, in rcar_gen2_regulator_quirk()
195 argsa->args_count * in rcar_gen2_regulator_quirk()
196 sizeof(argsa->args[0])); in rcar_gen2_regulator_quirk()
198 pos->shared = true; in rcar_gen2_regulator_quirk()
199 quirk->shared = true; in rcar_gen2_regulator_quirk()
203 list_add_tail(&quirk->list, &quirk_list); in rcar_gen2_regulator_quirk()
208 ret = -ENOMEM; in rcar_gen2_regulator_quirk()
212 mon = ioread32(irqc + IRQC_MONITOR); in rcar_gen2_regulator_quirk()
213 if (mon & REGULATOR_IRQ_MASK) { in rcar_gen2_regulator_quirk()
216 ret = 0; in rcar_gen2_regulator_quirk()
223 return 0; in rcar_gen2_regulator_quirk()
229 list_del(&pos->list); in rcar_gen2_regulator_quirk()
230 of_node_put(pos->np); in rcar_gen2_regulator_quirk()