xref: /linux/drivers/base/regmap/regmap-irq.c (revision f4cdf7ca9a1fdcca413157df19753f388a5a224e)
1 // SPDX-License-Identifier: GPL-2.0
2 //
3 // regmap based irq_chip
4 //
5 // Copyright 2011 Wolfson Microelectronics plc
6 //
7 // Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
8 
9 #include <linux/array_size.h>
10 #include <linux/device.h>
11 #include <linux/export.h>
12 #include <linux/interrupt.h>
13 #include <linux/irq.h>
14 #include <linux/irqdomain.h>
15 #include <linux/overflow.h>
16 #include <linux/pm_runtime.h>
17 #include <linux/regmap.h>
18 #include <linux/slab.h>
19 
20 #include "internal.h"
21 
22 struct regmap_irq_chip_data {
23 	struct mutex lock;
24 	struct lock_class_key lock_key;
25 	struct irq_chip irq_chip;
26 
27 	struct regmap *map;
28 	const struct regmap_irq_chip *chip;
29 
30 	int irq_base;
31 	struct irq_domain *domain;
32 
33 	int irq;
34 	int wake_count;
35 
36 	void *status_reg_buf;
37 	unsigned int *main_status_buf;
38 	unsigned int *status_buf;
39 	unsigned int *prev_status_buf;
40 	unsigned int *mask_buf;
41 	unsigned int *mask_buf_def;
42 	unsigned int *wake_buf;
43 	unsigned int *type_buf;
44 	unsigned int *type_buf_def;
45 	unsigned int **config_buf;
46 
47 	unsigned int irq_reg_stride;
48 
49 	unsigned int (*get_irq_reg)(struct regmap_irq_chip_data *data,
50 				    unsigned int base, int index);
51 
52 	unsigned int clear_status:1;
53 };
54 
55 static inline const
56 struct regmap_irq *irq_to_regmap_irq(struct regmap_irq_chip_data *data,
57 				     int irq)
58 {
59 	return &data->chip->irqs[irq];
60 }
61 
62 static bool regmap_irq_can_bulk_read_status(struct regmap_irq_chip_data *data)
63 {
64 	struct regmap *map = data->map;
65 
66 	/*
67 	 * While possible that a user-defined ->get_irq_reg() callback might
68 	 * be linear enough to support bulk reads, most of the time it won't.
69 	 * Therefore only allow them if the default callback is being used.
70 	 */
71 	return data->irq_reg_stride == 1 && map->reg_stride == 1 &&
72 	       data->get_irq_reg == regmap_irq_get_irq_reg_linear &&
73 	       !map->use_single_read;
74 }
75 
76 static void regmap_irq_lock(struct irq_data *data)
77 {
78 	struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data);
79 
80 	mutex_lock(&d->lock);
81 }
82 
83 static void regmap_irq_sync_unlock(struct irq_data *data)
84 {
85 	struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data);
86 	struct regmap *map = d->map;
87 	int i, j, ret;
88 	u32 reg;
89 	u32 val;
90 
91 	if (d->chip->runtime_pm) {
92 		ret = pm_runtime_get_sync(map->dev);
93 		if (ret < 0)
94 			dev_err(map->dev, "IRQ sync failed to resume: %d\n",
95 				ret);
96 	}
97 
98 	if (d->clear_status) {
99 		for (i = 0; i < d->chip->num_regs; i++) {
100 			reg = d->get_irq_reg(d, d->chip->status_base, i);
101 
102 			ret = regmap_read(map, reg, &val);
103 			if (ret)
104 				dev_err(d->map->dev,
105 					"Failed to clear the interrupt status bits\n");
106 		}
107 
108 		d->clear_status = false;
109 	}
110 
111 	/*
112 	 * If there's been a change in the mask write it back to the
113 	 * hardware.  We rely on the use of the regmap core cache to
114 	 * suppress pointless writes.
115 	 */
116 	for (i = 0; i < d->chip->num_regs; i++) {
117 		if (d->chip->handle_mask_sync)
118 			d->chip->handle_mask_sync(i, d->mask_buf_def[i],
119 						  d->mask_buf[i],
120 						  d->chip->irq_drv_data);
121 
122 		if (d->chip->mask_base && !d->chip->handle_mask_sync) {
123 			reg = d->get_irq_reg(d, d->chip->mask_base, i);
124 			ret = regmap_update_bits(d->map, reg,
125 						 d->mask_buf_def[i],
126 						 d->mask_buf[i]);
127 			if (ret)
128 				dev_err(d->map->dev, "Failed to sync masks in %x\n", reg);
129 		}
130 
131 		if (d->chip->unmask_base && !d->chip->handle_mask_sync) {
132 			reg = d->get_irq_reg(d, d->chip->unmask_base, i);
133 			ret = regmap_update_bits(d->map, reg,
134 					d->mask_buf_def[i], ~d->mask_buf[i]);
135 			if (ret)
136 				dev_err(d->map->dev, "Failed to sync masks in %x\n",
137 					reg);
138 		}
139 
140 		reg = d->get_irq_reg(d, d->chip->wake_base, i);
141 		if (d->wake_buf) {
142 			if (d->chip->wake_invert)
143 				ret = regmap_update_bits(d->map, reg,
144 							 d->mask_buf_def[i],
145 							 ~d->wake_buf[i]);
146 			else
147 				ret = regmap_update_bits(d->map, reg,
148 							 d->mask_buf_def[i],
149 							 d->wake_buf[i]);
150 			if (ret != 0)
151 				dev_err(d->map->dev,
152 					"Failed to sync wakes in %x: %d\n",
153 					reg, ret);
154 		}
155 
156 		if (!d->chip->init_ack_masked)
157 			continue;
158 		/*
159 		 * Ack all the masked interrupts unconditionally,
160 		 * OR if there is masked interrupt which hasn't been Acked,
161 		 * it'll be ignored in irq handler, then may introduce irq storm
162 		 */
163 		if (d->mask_buf[i] && (d->chip->ack_base || d->chip->use_ack)) {
164 			reg = d->get_irq_reg(d, d->chip->ack_base, i);
165 
166 			/* some chips ack by write 0 */
167 			if (d->chip->ack_invert)
168 				ret = regmap_write(map, reg, ~d->mask_buf[i]);
169 			else
170 				ret = regmap_write(map, reg, d->mask_buf[i]);
171 			if (d->chip->clear_ack) {
172 				if (d->chip->ack_invert && !ret)
173 					ret = regmap_write(map, reg, UINT_MAX);
174 				else if (!ret)
175 					ret = regmap_write(map, reg, 0);
176 			}
177 			if (ret != 0)
178 				dev_err(d->map->dev, "Failed to ack 0x%x: %d\n",
179 					reg, ret);
180 		}
181 	}
182 
183 	for (i = 0; i < d->chip->num_config_bases; i++) {
184 		for (j = 0; j < d->chip->num_config_regs; j++) {
185 			reg = d->get_irq_reg(d, d->chip->config_base[i], j);
186 			ret = regmap_write(map, reg, d->config_buf[i][j]);
187 			if (ret)
188 				dev_err(d->map->dev,
189 					"Failed to write config %x: %d\n",
190 					reg, ret);
191 		}
192 	}
193 
194 	if (d->chip->runtime_pm)
195 		pm_runtime_put(map->dev);
196 
197 	/* If we've changed our wakeup count propagate it to the parent */
198 	if (d->wake_count < 0)
199 		for (i = d->wake_count; i < 0; i++)
200 			disable_irq_wake(d->irq);
201 	else if (d->wake_count > 0)
202 		for (i = 0; i < d->wake_count; i++)
203 			enable_irq_wake(d->irq);
204 
205 	d->wake_count = 0;
206 
207 	mutex_unlock(&d->lock);
208 }
209 
210 static void regmap_irq_enable(struct irq_data *data)
211 {
212 	struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data);
213 	struct regmap *map = d->map;
214 	const struct regmap_irq *irq_data = irq_to_regmap_irq(d, data->hwirq);
215 	unsigned int reg = irq_data->reg_offset / map->reg_stride;
216 	unsigned int mask;
217 
218 	/*
219 	 * The type_in_mask flag means that the underlying hardware uses
220 	 * separate mask bits for each interrupt trigger type, but we want
221 	 * to have a single logical interrupt with a configurable type.
222 	 *
223 	 * If the interrupt we're enabling defines any supported types
224 	 * then instead of using the regular mask bits for this interrupt,
225 	 * use the value previously written to the type buffer at the
226 	 * corresponding offset in regmap_irq_set_type().
227 	 */
228 	if (d->chip->type_in_mask && irq_data->type.types_supported)
229 		mask = d->type_buf[reg] & irq_data->mask;
230 	else
231 		mask = irq_data->mask;
232 
233 	if (d->chip->clear_on_unmask)
234 		d->clear_status = true;
235 
236 	d->mask_buf[reg] &= ~mask;
237 }
238 
239 static void regmap_irq_disable(struct irq_data *data)
240 {
241 	struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data);
242 	struct regmap *map = d->map;
243 	const struct regmap_irq *irq_data = irq_to_regmap_irq(d, data->hwirq);
244 
245 	d->mask_buf[irq_data->reg_offset / map->reg_stride] |= irq_data->mask;
246 }
247 
248 static int regmap_irq_set_type(struct irq_data *data, unsigned int type)
249 {
250 	struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data);
251 	struct regmap *map = d->map;
252 	const struct regmap_irq *irq_data = irq_to_regmap_irq(d, data->hwirq);
253 	int reg, ret;
254 	const struct regmap_irq_type *t = &irq_data->type;
255 
256 	if ((t->types_supported & type) != type)
257 		return 0;
258 
259 	reg = t->type_reg_offset / map->reg_stride;
260 
261 	if (d->chip->type_in_mask) {
262 		ret = regmap_irq_set_type_config_simple(&d->type_buf, type,
263 							irq_data, reg, d->chip->irq_drv_data);
264 		if (ret)
265 			return ret;
266 	}
267 
268 	if (d->chip->set_type_config) {
269 		ret = d->chip->set_type_config(d->config_buf, type, irq_data,
270 					       reg, d->chip->irq_drv_data);
271 		if (ret)
272 			return ret;
273 	}
274 
275 	return 0;
276 }
277 
278 static int regmap_irq_set_wake(struct irq_data *data, unsigned int on)
279 {
280 	struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data);
281 	struct regmap *map = d->map;
282 	const struct regmap_irq *irq_data = irq_to_regmap_irq(d, data->hwirq);
283 
284 	if (on) {
285 		if (d->wake_buf)
286 			d->wake_buf[irq_data->reg_offset / map->reg_stride]
287 				&= ~irq_data->mask;
288 		d->wake_count++;
289 	} else {
290 		if (d->wake_buf)
291 			d->wake_buf[irq_data->reg_offset / map->reg_stride]
292 				|= irq_data->mask;
293 		d->wake_count--;
294 	}
295 
296 	return 0;
297 }
298 
299 static int regmap_irq_reqres(struct irq_data *data)
300 {
301 	struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data);
302 	irq_hw_number_t hwirq = irqd_to_hwirq(data);
303 
304 	if (d->chip->irq_reqres)
305 		return d->chip->irq_reqres(d->chip->irq_drv_data, hwirq);
306 
307 	return 0;
308 }
309 
310 static void regmap_irq_relres(struct irq_data *data)
311 {
312 	struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data);
313 	irq_hw_number_t hwirq = irqd_to_hwirq(data);
314 
315 	if (d->chip->irq_relres)
316 		d->chip->irq_relres(d->chip->irq_drv_data, hwirq);
317 }
318 
319 static const struct irq_chip regmap_irq_chip = {
320 	.irq_bus_lock		= regmap_irq_lock,
321 	.irq_bus_sync_unlock	= regmap_irq_sync_unlock,
322 	.irq_disable		= regmap_irq_disable,
323 	.irq_enable		= regmap_irq_enable,
324 	.irq_set_type		= regmap_irq_set_type,
325 	.irq_set_wake		= regmap_irq_set_wake,
326 	.irq_request_resources  = regmap_irq_reqres,
327 	.irq_release_resources  = regmap_irq_relres,
328 };
329 
330 static inline int read_sub_irq_data(struct regmap_irq_chip_data *data,
331 					   unsigned int b)
332 {
333 	const struct regmap_irq_chip *chip = data->chip;
334 	const struct regmap_irq_sub_irq_map *subreg;
335 	struct regmap *map = data->map;
336 	unsigned int reg;
337 	int i, ret = 0;
338 
339 	if (!chip->sub_reg_offsets) {
340 		reg = data->get_irq_reg(data, chip->status_base, b);
341 		ret = regmap_read(map, reg, &data->status_buf[b]);
342 	} else {
343 		/*
344 		 * Note we can't use ->get_irq_reg() here because the offsets
345 		 * in 'subreg' are *not* interchangeable with indices.
346 		 */
347 		subreg = &chip->sub_reg_offsets[b];
348 		for (i = 0; i < subreg->num_regs; i++) {
349 			unsigned int offset = subreg->offset[i];
350 			unsigned int index = offset / map->reg_stride;
351 
352 			ret = regmap_read(map, chip->status_base + offset,
353 					  &data->status_buf[index]);
354 			if (ret)
355 				break;
356 		}
357 	}
358 	return ret;
359 }
360 
361 static int read_irq_data(struct regmap_irq_chip_data *data)
362 {
363 	const struct regmap_irq_chip *chip = data->chip;
364 	struct regmap *map = data->map;
365 	int ret, i;
366 	u32 reg;
367 
368 	/*
369 	 * Read only registers with active IRQs if the chip has 'main status
370 	 * register'. Else read in the statuses, using a single bulk read if
371 	 * possible in order to reduce the I/O overheads.
372 	 */
373 
374 	if (chip->no_status) {
375 		/* no status register so default to all active */
376 		memset32(data->status_buf, GENMASK(31, 0), chip->num_regs);
377 	} else if (chip->num_main_regs) {
378 		unsigned int max_main_bits;
379 
380 		max_main_bits = (chip->num_main_status_bits) ?
381 				 chip->num_main_status_bits : chip->num_regs;
382 		/* Clear the status buf as we don't read all status regs */
383 		memset32(data->status_buf, 0, chip->num_regs);
384 
385 		/* We could support bulk read for main status registers
386 		 * but I don't expect to see devices with really many main
387 		 * status registers so let's only support single reads for the
388 		 * sake of simplicity. and add bulk reads only if needed
389 		 */
390 		for (i = 0; i < chip->num_main_regs; i++) {
391 			reg = data->get_irq_reg(data, chip->main_status, i);
392 			ret = regmap_read(map, reg, &data->main_status_buf[i]);
393 			if (ret) {
394 				dev_err(map->dev, "Failed to read IRQ status %d\n", ret);
395 				return ret;
396 			}
397 		}
398 
399 		/* Read sub registers with active IRQs */
400 		for (i = 0; i < chip->num_main_regs; i++) {
401 			unsigned int b;
402 			const unsigned long mreg = data->main_status_buf[i];
403 
404 			for_each_set_bit(b, &mreg, map->format.val_bytes * 8) {
405 				if (i * map->format.val_bytes * 8 + b >
406 				    max_main_bits)
407 					break;
408 				ret = read_sub_irq_data(data, b);
409 
410 				if (ret != 0) {
411 					dev_err(map->dev, "Failed to read IRQ status %d\n", ret);
412 					return ret;
413 				}
414 			}
415 
416 		}
417 	} else if (regmap_irq_can_bulk_read_status(data)) {
418 
419 		u8 *buf8 = data->status_reg_buf;
420 		u16 *buf16 = data->status_reg_buf;
421 		u32 *buf32 = data->status_reg_buf;
422 
423 		BUG_ON(!data->status_reg_buf);
424 
425 		ret = regmap_bulk_read(map, chip->status_base,
426 				       data->status_reg_buf,
427 				       chip->num_regs);
428 		if (ret != 0) {
429 			dev_err(map->dev, "Failed to read IRQ status: %d\n", ret);
430 			return ret;
431 		}
432 
433 		for (i = 0; i < data->chip->num_regs; i++) {
434 			switch (map->format.val_bytes) {
435 			case 1:
436 				data->status_buf[i] = buf8[i];
437 				break;
438 			case 2:
439 				data->status_buf[i] = buf16[i];
440 				break;
441 			case 4:
442 				data->status_buf[i] = buf32[i];
443 				break;
444 			default:
445 				BUG();
446 				return -EIO;
447 			}
448 		}
449 
450 	} else {
451 		for (i = 0; i < data->chip->num_regs; i++) {
452 			unsigned int reg = data->get_irq_reg(data,
453 					data->chip->status_base, i);
454 			ret = regmap_read(map, reg, &data->status_buf[i]);
455 
456 			if (ret != 0) {
457 				dev_err(map->dev, "Failed to read IRQ status: %d\n", ret);
458 				return ret;
459 			}
460 		}
461 	}
462 
463 	if (chip->status_invert)
464 		for (i = 0; i < data->chip->num_regs; i++)
465 			data->status_buf[i] = ~data->status_buf[i];
466 
467 	return 0;
468 }
469 
470 static irqreturn_t regmap_irq_thread(int irq, void *d)
471 {
472 	struct regmap_irq_chip_data *data = d;
473 	const struct regmap_irq_chip *chip = data->chip;
474 	struct regmap *map = data->map;
475 	int ret, i;
476 	bool handled = false;
477 	u32 reg;
478 
479 	if (chip->handle_pre_irq)
480 		chip->handle_pre_irq(chip->irq_drv_data);
481 
482 	if (chip->runtime_pm) {
483 		ret = pm_runtime_get_sync(map->dev);
484 		if (ret < 0) {
485 			dev_err(map->dev, "IRQ thread failed to resume: %d\n", ret);
486 			goto exit;
487 		}
488 	}
489 
490 	ret = read_irq_data(data);
491 	if (ret < 0)
492 		goto exit;
493 
494 	if (chip->status_is_level) {
495 		for (i = 0; i < data->chip->num_regs; i++) {
496 			unsigned int val = data->status_buf[i];
497 
498 			data->status_buf[i] ^= data->prev_status_buf[i];
499 			data->prev_status_buf[i] = val;
500 		}
501 	}
502 
503 	/*
504 	 * Ignore masked IRQs and ack if we need to; we ack early so
505 	 * there is no race between handling and acknowledging the
506 	 * interrupt.  We assume that typically few of the interrupts
507 	 * will fire simultaneously so don't worry about overhead from
508 	 * doing a write per register.
509 	 */
510 	for (i = 0; i < data->chip->num_regs; i++) {
511 		data->status_buf[i] &= ~data->mask_buf[i];
512 
513 		if (data->status_buf[i] && (chip->ack_base || chip->use_ack)) {
514 			reg = data->get_irq_reg(data, data->chip->ack_base, i);
515 
516 			if (chip->ack_invert)
517 				ret = regmap_write(map, reg,
518 						~data->status_buf[i]);
519 			else
520 				ret = regmap_write(map, reg,
521 						data->status_buf[i]);
522 			if (chip->clear_ack) {
523 				if (chip->ack_invert && !ret)
524 					ret = regmap_write(map, reg, UINT_MAX);
525 				else if (!ret)
526 					ret = regmap_write(map, reg, 0);
527 			}
528 			if (ret != 0)
529 				dev_err(map->dev, "Failed to ack 0x%x: %d\n",
530 					reg, ret);
531 		}
532 	}
533 
534 	for (i = 0; i < chip->num_irqs; i++) {
535 		if (data->status_buf[chip->irqs[i].reg_offset /
536 				     map->reg_stride] & chip->irqs[i].mask) {
537 			handle_nested_irq(irq_find_mapping(data->domain, i));
538 			handled = true;
539 		}
540 	}
541 
542 exit:
543 	if (chip->handle_post_irq)
544 		chip->handle_post_irq(chip->irq_drv_data);
545 
546 	if (chip->runtime_pm)
547 		pm_runtime_put(map->dev);
548 
549 	if (handled)
550 		return IRQ_HANDLED;
551 	else
552 		return IRQ_NONE;
553 }
554 
555 static struct lock_class_key regmap_irq_lock_class;
556 static struct lock_class_key regmap_irq_request_class;
557 
558 static int regmap_irq_map(struct irq_domain *h, unsigned int virq,
559 			  irq_hw_number_t hw)
560 {
561 	struct regmap_irq_chip_data *data = h->host_data;
562 
563 	irq_set_chip_data(virq, data);
564 	irq_set_lockdep_class(virq, &regmap_irq_lock_class, &regmap_irq_request_class);
565 	irq_set_chip(virq, &data->irq_chip);
566 	irq_set_nested_thread(virq, 1);
567 	irq_set_parent(virq, data->irq);
568 	irq_set_noprobe(virq);
569 
570 	return 0;
571 }
572 
573 static const struct irq_domain_ops regmap_domain_ops = {
574 	.map	= regmap_irq_map,
575 	.xlate	= irq_domain_xlate_onetwocell,
576 };
577 
578 /**
579  * regmap_irq_get_irq_reg_linear() - Linear IRQ register mapping callback.
580  * @data: Data for the &struct regmap_irq_chip
581  * @base: Base register
582  * @index: Register index
583  *
584  * Returns the register address corresponding to the given @base and @index
585  * by the formula ``base + index * regmap_stride * irq_reg_stride``.
586  */
587 unsigned int regmap_irq_get_irq_reg_linear(struct regmap_irq_chip_data *data,
588 					   unsigned int base, int index)
589 {
590 	struct regmap *map = data->map;
591 
592 	return base + index * map->reg_stride * data->irq_reg_stride;
593 }
594 EXPORT_SYMBOL_GPL(regmap_irq_get_irq_reg_linear);
595 
596 /**
597  * regmap_irq_set_type_config_simple() - Simple IRQ type configuration callback.
598  * @buf: Buffer containing configuration register values, this is a 2D array of
599  *       `num_config_bases` rows, each of `num_config_regs` elements.
600  * @type: The requested IRQ type.
601  * @irq_data: The IRQ being configured.
602  * @idx: Index of the irq's config registers within each array `buf[i]`
603  * @irq_drv_data: Driver specific IRQ data
604  *
605  * This is a &struct regmap_irq_chip->set_type_config callback suitable for
606  * chips with one config register. Register values are updated according to
607  * the &struct regmap_irq_type data associated with an IRQ.
608  */
609 int regmap_irq_set_type_config_simple(unsigned int **buf, unsigned int type,
610 				      const struct regmap_irq *irq_data,
611 				      int idx, void *irq_drv_data)
612 {
613 	const struct regmap_irq_type *t = &irq_data->type;
614 
615 	if (t->type_reg_mask)
616 		buf[0][idx] &= ~t->type_reg_mask;
617 	else
618 		buf[0][idx] &= ~(t->type_falling_val |
619 				 t->type_rising_val |
620 				 t->type_level_low_val |
621 				 t->type_level_high_val);
622 
623 	switch (type) {
624 	case IRQ_TYPE_EDGE_FALLING:
625 		buf[0][idx] |= t->type_falling_val;
626 		break;
627 
628 	case IRQ_TYPE_EDGE_RISING:
629 		buf[0][idx] |= t->type_rising_val;
630 		break;
631 
632 	case IRQ_TYPE_EDGE_BOTH:
633 		buf[0][idx] |= (t->type_falling_val |
634 				t->type_rising_val);
635 		break;
636 
637 	case IRQ_TYPE_LEVEL_HIGH:
638 		buf[0][idx] |= t->type_level_high_val;
639 		break;
640 
641 	case IRQ_TYPE_LEVEL_LOW:
642 		buf[0][idx] |= t->type_level_low_val;
643 		break;
644 
645 	default:
646 		return -EINVAL;
647 	}
648 
649 	return 0;
650 }
651 EXPORT_SYMBOL_GPL(regmap_irq_set_type_config_simple);
652 
653 static int regmap_irq_create_domain(struct fwnode_handle *fwnode, int irq_base,
654 				    const struct regmap_irq_chip *chip,
655 				    struct regmap_irq_chip_data *d)
656 {
657 	struct irq_domain_info info = {
658 		.fwnode = fwnode,
659 		.size = chip->num_irqs,
660 		.hwirq_max = chip->num_irqs,
661 		.virq_base = irq_base,
662 		.ops = &regmap_domain_ops,
663 		.host_data = d,
664 		.name_suffix = chip->domain_suffix,
665 	};
666 
667 	d->domain = irq_domain_instantiate(&info);
668 	if (IS_ERR(d->domain)) {
669 		dev_err(d->map->dev, "Failed to create IRQ domain\n");
670 		return PTR_ERR(d->domain);
671 	}
672 
673 	return 0;
674 }
675 
676 
677 /**
678  * regmap_add_irq_chip_fwnode() - Use standard regmap IRQ controller handling
679  *
680  * @fwnode: The firmware node where the IRQ domain should be added to.
681  * @map: The regmap for the device.
682  * @irq: The IRQ the device uses to signal interrupts.
683  * @irq_flags: The IRQF_ flags to use for the primary interrupt.
684  * @irq_base: Allocate at specific IRQ number if irq_base > 0.
685  * @chip: Configuration for the interrupt controller.
686  * @data: Runtime data structure for the controller, allocated on success.
687  *
688  * Returns 0 on success or an errno on failure.
689  *
690  * In order for this to be efficient the chip really should use a
691  * register cache.  The chip driver is responsible for restoring the
692  * register values used by the IRQ controller over suspend and resume.
693  */
694 int regmap_add_irq_chip_fwnode(struct fwnode_handle *fwnode,
695 			       struct regmap *map, int irq,
696 			       int irq_flags, int irq_base,
697 			       const struct regmap_irq_chip *chip,
698 			       struct regmap_irq_chip_data **data)
699 {
700 	struct regmap_irq_chip_data *d;
701 	int i;
702 	int ret = -ENOMEM;
703 	u32 reg;
704 
705 	if (chip->num_regs <= 0)
706 		return -EINVAL;
707 
708 	if (chip->clear_on_unmask && (chip->ack_base || chip->use_ack))
709 		return -EINVAL;
710 
711 	if (chip->mask_base && chip->unmask_base && !chip->mask_unmask_non_inverted)
712 		return -EINVAL;
713 
714 	for (i = 0; i < chip->num_irqs; i++) {
715 		if (chip->irqs[i].reg_offset % map->reg_stride)
716 			return -EINVAL;
717 		if (chip->irqs[i].reg_offset / map->reg_stride >=
718 		    chip->num_regs)
719 			return -EINVAL;
720 	}
721 
722 	if (irq_base) {
723 		irq_base = irq_alloc_descs(irq_base, 0, chip->num_irqs, 0);
724 		if (irq_base < 0) {
725 			dev_warn(map->dev, "Failed to allocate IRQs: %d\n",
726 				 irq_base);
727 			return irq_base;
728 		}
729 	}
730 
731 	d = kzalloc_obj(*d);
732 	if (!d)
733 		return -ENOMEM;
734 
735 	if (chip->num_main_regs) {
736 		d->main_status_buf = kcalloc(chip->num_main_regs,
737 					     sizeof(*d->main_status_buf),
738 					     GFP_KERNEL);
739 
740 		if (!d->main_status_buf)
741 			goto err_alloc;
742 	}
743 
744 	d->status_buf = kcalloc(chip->num_regs, sizeof(*d->status_buf),
745 				GFP_KERNEL);
746 	if (!d->status_buf)
747 		goto err_alloc;
748 
749 	if (chip->status_is_level) {
750 		d->prev_status_buf = kcalloc(chip->num_regs, sizeof(*d->prev_status_buf),
751 					     GFP_KERNEL);
752 		if (!d->prev_status_buf)
753 			goto err_alloc;
754 	}
755 
756 	d->mask_buf = kcalloc(chip->num_regs, sizeof(*d->mask_buf),
757 			      GFP_KERNEL);
758 	if (!d->mask_buf)
759 		goto err_alloc;
760 
761 	d->mask_buf_def = kcalloc(chip->num_regs, sizeof(*d->mask_buf_def),
762 				  GFP_KERNEL);
763 	if (!d->mask_buf_def)
764 		goto err_alloc;
765 
766 	if (chip->wake_base) {
767 		d->wake_buf = kcalloc(chip->num_regs, sizeof(*d->wake_buf),
768 				      GFP_KERNEL);
769 		if (!d->wake_buf)
770 			goto err_alloc;
771 	}
772 
773 	if (chip->type_in_mask) {
774 		d->type_buf_def = kcalloc(chip->num_regs,
775 					  sizeof(*d->type_buf_def), GFP_KERNEL);
776 		if (!d->type_buf_def)
777 			goto err_alloc;
778 
779 		d->type_buf = kcalloc(chip->num_regs, sizeof(*d->type_buf), GFP_KERNEL);
780 		if (!d->type_buf)
781 			goto err_alloc;
782 	}
783 
784 	if (chip->num_config_bases && chip->num_config_regs) {
785 		/*
786 		 * Create config_buf[num_config_bases][num_config_regs]
787 		 */
788 		d->config_buf = kcalloc(chip->num_config_bases,
789 					sizeof(*d->config_buf), GFP_KERNEL);
790 		if (!d->config_buf)
791 			goto err_alloc;
792 
793 		for (i = 0; i < chip->num_config_bases; i++) {
794 			d->config_buf[i] = kcalloc(chip->num_config_regs,
795 						   sizeof(**d->config_buf),
796 						   GFP_KERNEL);
797 			if (!d->config_buf[i])
798 				goto err_alloc;
799 		}
800 	}
801 
802 	d->irq_chip = regmap_irq_chip;
803 	d->irq_chip.name = chip->name;
804 	d->irq = irq;
805 	d->map = map;
806 	d->chip = chip;
807 	d->irq_base = irq_base;
808 
809 	if (chip->irq_reg_stride)
810 		d->irq_reg_stride = chip->irq_reg_stride;
811 	else
812 		d->irq_reg_stride = 1;
813 
814 	if (chip->get_irq_reg)
815 		d->get_irq_reg = chip->get_irq_reg;
816 	else
817 		d->get_irq_reg = regmap_irq_get_irq_reg_linear;
818 
819 	if (regmap_irq_can_bulk_read_status(d)) {
820 		d->status_reg_buf = kmalloc_array(chip->num_regs,
821 						  map->format.val_bytes,
822 						  GFP_KERNEL);
823 		if (!d->status_reg_buf)
824 			goto err_alloc;
825 	}
826 
827 	/*
828 	 * If one regmap-irq is the parent of another then we'll try
829 	 * to lock the child with the parent locked, use an explicit
830 	 * lock_key so lockdep can figure out what's going on.
831 	 */
832 	lockdep_register_key(&d->lock_key);
833 	mutex_init_with_key(&d->lock, &d->lock_key);
834 
835 	for (i = 0; i < chip->num_irqs; i++)
836 		d->mask_buf_def[chip->irqs[i].reg_offset / map->reg_stride]
837 			|= chip->irqs[i].mask;
838 
839 	/* Mask all the interrupts by default */
840 	for (i = 0; i < chip->num_regs; i++) {
841 		d->mask_buf[i] = d->mask_buf_def[i];
842 
843 		if (chip->handle_mask_sync) {
844 			ret = chip->handle_mask_sync(i, d->mask_buf_def[i],
845 						     d->mask_buf[i],
846 						     chip->irq_drv_data);
847 			if (ret)
848 				goto err_mutex;
849 		}
850 
851 		if (chip->mask_base && !chip->handle_mask_sync) {
852 			reg = d->get_irq_reg(d, chip->mask_base, i);
853 			ret = regmap_update_bits(d->map, reg,
854 						 d->mask_buf_def[i],
855 						 d->mask_buf[i]);
856 			if (ret) {
857 				dev_err(map->dev, "Failed to set masks in 0x%x: %d\n",
858 					reg, ret);
859 				goto err_mutex;
860 			}
861 		}
862 
863 		if (chip->unmask_base && !chip->handle_mask_sync) {
864 			reg = d->get_irq_reg(d, chip->unmask_base, i);
865 			ret = regmap_update_bits(d->map, reg,
866 					d->mask_buf_def[i], ~d->mask_buf[i]);
867 			if (ret) {
868 				dev_err(map->dev, "Failed to set masks in 0x%x: %d\n",
869 					reg, ret);
870 				goto err_mutex;
871 			}
872 		}
873 
874 		if (!chip->init_ack_masked)
875 			continue;
876 
877 		/* Ack masked but set interrupts */
878 		if (d->chip->no_status) {
879 			/* no status register so default to all active */
880 			d->status_buf[i] = UINT_MAX;
881 		} else {
882 			reg = d->get_irq_reg(d, d->chip->status_base, i);
883 			ret = regmap_read(map, reg, &d->status_buf[i]);
884 			if (ret != 0) {
885 				dev_err(map->dev, "Failed to read IRQ status: %d\n",
886 					ret);
887 				goto err_mutex;
888 			}
889 		}
890 
891 		if (chip->status_invert)
892 			d->status_buf[i] = ~d->status_buf[i];
893 
894 		if (d->status_buf[i] && (chip->ack_base || chip->use_ack)) {
895 			reg = d->get_irq_reg(d, d->chip->ack_base, i);
896 			if (chip->ack_invert)
897 				ret = regmap_write(map, reg,
898 					~(d->status_buf[i] & d->mask_buf[i]));
899 			else
900 				ret = regmap_write(map, reg,
901 					d->status_buf[i] & d->mask_buf[i]);
902 			if (chip->clear_ack) {
903 				if (chip->ack_invert && !ret)
904 					ret = regmap_write(map, reg, UINT_MAX);
905 				else if (!ret)
906 					ret = regmap_write(map, reg, 0);
907 			}
908 			if (ret != 0) {
909 				dev_err(map->dev, "Failed to ack 0x%x: %d\n",
910 					reg, ret);
911 				goto err_mutex;
912 			}
913 		}
914 	}
915 
916 	/* Wake is disabled by default */
917 	if (d->wake_buf) {
918 		for (i = 0; i < chip->num_regs; i++) {
919 			d->wake_buf[i] = d->mask_buf_def[i];
920 			reg = d->get_irq_reg(d, d->chip->wake_base, i);
921 
922 			if (chip->wake_invert)
923 				ret = regmap_update_bits(d->map, reg,
924 							 d->mask_buf_def[i],
925 							 0);
926 			else
927 				ret = regmap_update_bits(d->map, reg,
928 							 d->mask_buf_def[i],
929 							 d->wake_buf[i]);
930 			if (ret != 0) {
931 				dev_err(map->dev, "Failed to set masks in 0x%x: %d\n",
932 					reg, ret);
933 				goto err_mutex;
934 			}
935 		}
936 	}
937 
938 	/* Store current levels */
939 	if (chip->status_is_level) {
940 		ret = read_irq_data(d);
941 		if (ret < 0)
942 			goto err_mutex;
943 
944 		memcpy(d->prev_status_buf, d->status_buf,
945 		       array_size(d->chip->num_regs, sizeof(d->prev_status_buf[0])));
946 	}
947 
948 	ret = regmap_irq_create_domain(fwnode, irq_base, chip, d);
949 	if (ret)
950 		goto err_mutex;
951 
952 	ret = request_threaded_irq(irq, NULL, regmap_irq_thread,
953 				   irq_flags | IRQF_ONESHOT,
954 				   chip->name, d);
955 	if (ret != 0) {
956 		dev_err(map->dev, "Failed to request IRQ %d for %s: %d\n",
957 			irq, chip->name, ret);
958 		goto err_domain;
959 	}
960 
961 	*data = d;
962 
963 	return 0;
964 
965 err_domain:
966 	/* Should really dispose of the domain but... */
967 err_mutex:
968 	mutex_destroy(&d->lock);
969 	lockdep_unregister_key(&d->lock_key);
970 err_alloc:
971 	kfree(d->type_buf);
972 	kfree(d->type_buf_def);
973 	kfree(d->wake_buf);
974 	kfree(d->mask_buf_def);
975 	kfree(d->mask_buf);
976 	kfree(d->main_status_buf);
977 	kfree(d->status_buf);
978 	kfree(d->prev_status_buf);
979 	kfree(d->status_reg_buf);
980 	if (d->config_buf) {
981 		for (i = 0; i < chip->num_config_bases; i++)
982 			kfree(d->config_buf[i]);
983 		kfree(d->config_buf);
984 	}
985 	kfree(d);
986 	return ret;
987 }
988 EXPORT_SYMBOL_GPL(regmap_add_irq_chip_fwnode);
989 
990 /**
991  * regmap_add_irq_chip() - Use standard regmap IRQ controller handling
992  *
993  * @map: The regmap for the device.
994  * @irq: The IRQ the device uses to signal interrupts.
995  * @irq_flags: The IRQF_ flags to use for the primary interrupt.
996  * @irq_base: Allocate at specific IRQ number if irq_base > 0.
997  * @chip: Configuration for the interrupt controller.
998  * @data: Runtime data structure for the controller, allocated on success.
999  *
1000  * Returns 0 on success or an errno on failure.
1001  *
1002  * This is the same as regmap_add_irq_chip_fwnode, except that the firmware
1003  * node of the regmap is used.
1004  */
1005 int regmap_add_irq_chip(struct regmap *map, int irq, int irq_flags,
1006 			int irq_base, const struct regmap_irq_chip *chip,
1007 			struct regmap_irq_chip_data **data)
1008 {
1009 	return regmap_add_irq_chip_fwnode(dev_fwnode(map->dev), map, irq,
1010 					  irq_flags, irq_base, chip, data);
1011 }
1012 EXPORT_SYMBOL_GPL(regmap_add_irq_chip);
1013 
1014 /**
1015  * regmap_del_irq_chip() - Stop interrupt handling for a regmap IRQ chip
1016  *
1017  * @irq: Primary IRQ for the device
1018  * @d: &regmap_irq_chip_data allocated by regmap_add_irq_chip()
1019  *
1020  * This function also disposes of all mapped IRQs on the chip.
1021  */
1022 void regmap_del_irq_chip(int irq, struct regmap_irq_chip_data *d)
1023 {
1024 	unsigned int virq;
1025 	int i, hwirq;
1026 
1027 	if (!d)
1028 		return;
1029 
1030 	free_irq(irq, d);
1031 
1032 	/* Dispose all virtual irq from irq domain before removing it */
1033 	for (hwirq = 0; hwirq < d->chip->num_irqs; hwirq++) {
1034 		/* Ignore hwirq if holes in the IRQ list */
1035 		if (!d->chip->irqs[hwirq].mask)
1036 			continue;
1037 
1038 		/*
1039 		 * Find the virtual irq of hwirq on chip and if it is
1040 		 * there then dispose it
1041 		 */
1042 		virq = irq_find_mapping(d->domain, hwirq);
1043 		if (virq)
1044 			irq_dispose_mapping(virq);
1045 	}
1046 
1047 	irq_domain_remove(d->domain);
1048 	kfree(d->type_buf);
1049 	kfree(d->type_buf_def);
1050 	kfree(d->wake_buf);
1051 	kfree(d->mask_buf_def);
1052 	kfree(d->mask_buf);
1053 	kfree(d->main_status_buf);
1054 	kfree(d->status_reg_buf);
1055 	kfree(d->status_buf);
1056 	kfree(d->prev_status_buf);
1057 	if (d->config_buf) {
1058 		for (i = 0; i < d->chip->num_config_bases; i++)
1059 			kfree(d->config_buf[i]);
1060 		kfree(d->config_buf);
1061 	}
1062 	mutex_destroy(&d->lock);
1063 	lockdep_unregister_key(&d->lock_key);
1064 	kfree(d);
1065 }
1066 EXPORT_SYMBOL_GPL(regmap_del_irq_chip);
1067 
1068 static void devm_regmap_irq_chip_release(struct device *dev, void *res)
1069 {
1070 	struct regmap_irq_chip_data *d = *(struct regmap_irq_chip_data **)res;
1071 
1072 	regmap_del_irq_chip(d->irq, d);
1073 }
1074 
1075 static int devm_regmap_irq_chip_match(struct device *dev, void *res, void *data)
1076 
1077 {
1078 	struct regmap_irq_chip_data **r = res;
1079 
1080 	if (!r || !*r) {
1081 		WARN_ON(!r || !*r);
1082 		return 0;
1083 	}
1084 	return *r == data;
1085 }
1086 
1087 /**
1088  * devm_regmap_add_irq_chip_fwnode() - Resource managed regmap_add_irq_chip_fwnode()
1089  *
1090  * @dev: The device pointer on which irq_chip belongs to.
1091  * @fwnode: The firmware node where the IRQ domain should be added to.
1092  * @map: The regmap for the device.
1093  * @irq: The IRQ the device uses to signal interrupts
1094  * @irq_flags: The IRQF_ flags to use for the primary interrupt.
1095  * @irq_base: Allocate at specific IRQ number if irq_base > 0.
1096  * @chip: Configuration for the interrupt controller.
1097  * @data: Runtime data structure for the controller, allocated on success
1098  *
1099  * Returns 0 on success or an errno on failure.
1100  *
1101  * The &regmap_irq_chip_data will be automatically released when the device is
1102  * unbound.
1103  */
1104 int devm_regmap_add_irq_chip_fwnode(struct device *dev,
1105 				    struct fwnode_handle *fwnode,
1106 				    struct regmap *map, int irq,
1107 				    int irq_flags, int irq_base,
1108 				    const struct regmap_irq_chip *chip,
1109 				    struct regmap_irq_chip_data **data)
1110 {
1111 	struct regmap_irq_chip_data **ptr, *d;
1112 	int ret;
1113 
1114 	ptr = devres_alloc(devm_regmap_irq_chip_release, sizeof(*ptr),
1115 			   GFP_KERNEL);
1116 	if (!ptr)
1117 		return -ENOMEM;
1118 
1119 	ret = regmap_add_irq_chip_fwnode(fwnode, map, irq, irq_flags, irq_base,
1120 					 chip, &d);
1121 	if (ret < 0) {
1122 		devres_free(ptr);
1123 		return ret;
1124 	}
1125 
1126 	*ptr = d;
1127 	devres_add(dev, ptr);
1128 	*data = d;
1129 	return 0;
1130 }
1131 EXPORT_SYMBOL_GPL(devm_regmap_add_irq_chip_fwnode);
1132 
1133 /**
1134  * devm_regmap_add_irq_chip() - Resource managed regmap_add_irq_chip()
1135  *
1136  * @dev: The device pointer on which irq_chip belongs to.
1137  * @map: The regmap for the device.
1138  * @irq: The IRQ the device uses to signal interrupts
1139  * @irq_flags: The IRQF_ flags to use for the primary interrupt.
1140  * @irq_base: Allocate at specific IRQ number if irq_base > 0.
1141  * @chip: Configuration for the interrupt controller.
1142  * @data: Runtime data structure for the controller, allocated on success
1143  *
1144  * Returns 0 on success or an errno on failure.
1145  *
1146  * The &regmap_irq_chip_data will be automatically released when the device is
1147  * unbound.
1148  */
1149 int devm_regmap_add_irq_chip(struct device *dev, struct regmap *map, int irq,
1150 			     int irq_flags, int irq_base,
1151 			     const struct regmap_irq_chip *chip,
1152 			     struct regmap_irq_chip_data **data)
1153 {
1154 	return devm_regmap_add_irq_chip_fwnode(dev, dev_fwnode(map->dev), map,
1155 					       irq, irq_flags, irq_base, chip,
1156 					       data);
1157 }
1158 EXPORT_SYMBOL_GPL(devm_regmap_add_irq_chip);
1159 
1160 /**
1161  * devm_regmap_del_irq_chip() - Resource managed regmap_del_irq_chip()
1162  *
1163  * @dev: Device for which the resource was allocated.
1164  * @irq: Primary IRQ for the device.
1165  * @data: &regmap_irq_chip_data allocated by regmap_add_irq_chip().
1166  *
1167  * A resource managed version of regmap_del_irq_chip().
1168  */
1169 void devm_regmap_del_irq_chip(struct device *dev, int irq,
1170 			      struct regmap_irq_chip_data *data)
1171 {
1172 	int rc;
1173 
1174 	WARN_ON(irq != data->irq);
1175 	rc = devres_release(dev, devm_regmap_irq_chip_release,
1176 			    devm_regmap_irq_chip_match, data);
1177 
1178 	if (rc != 0)
1179 		WARN_ON(rc);
1180 }
1181 EXPORT_SYMBOL_GPL(devm_regmap_del_irq_chip);
1182 
1183 /**
1184  * regmap_irq_chip_get_base() - Retrieve interrupt base for a regmap IRQ chip
1185  *
1186  * @data: regmap irq controller to operate on.
1187  *
1188  * Useful for drivers to request their own IRQs.
1189  */
1190 int regmap_irq_chip_get_base(struct regmap_irq_chip_data *data)
1191 {
1192 	WARN_ON(!data->irq_base);
1193 	return data->irq_base;
1194 }
1195 EXPORT_SYMBOL_GPL(regmap_irq_chip_get_base);
1196 
1197 /**
1198  * regmap_irq_get_virq() - Map an interrupt on a chip to a virtual IRQ
1199  *
1200  * @data: regmap irq controller to operate on.
1201  * @irq: index of the interrupt requested in the chip IRQs.
1202  *
1203  * Useful for drivers to request their own IRQs.
1204  */
1205 int regmap_irq_get_virq(struct regmap_irq_chip_data *data, int irq)
1206 {
1207 	/* Handle holes in the IRQ list */
1208 	if (!data->chip->irqs[irq].mask)
1209 		return -EINVAL;
1210 
1211 	return irq_create_mapping(data->domain, irq);
1212 }
1213 EXPORT_SYMBOL_GPL(regmap_irq_get_virq);
1214 
1215 /**
1216  * regmap_irq_get_domain() - Retrieve the irq_domain for the chip
1217  *
1218  * @data: regmap_irq controller to operate on.
1219  *
1220  * Useful for drivers to request their own IRQs and for integration
1221  * with subsystems.  For ease of integration NULL is accepted as a
1222  * domain, allowing devices to just call this even if no domain is
1223  * allocated.
1224  */
1225 struct irq_domain *regmap_irq_get_domain(struct regmap_irq_chip_data *data)
1226 {
1227 	if (data)
1228 		return data->domain;
1229 	else
1230 		return NULL;
1231 }
1232 EXPORT_SYMBOL_GPL(regmap_irq_get_domain);
1233