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