Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'intel-pinctrl-v5.5-2' of git://git.kernel.org/pub/scm/linux/kernel/git/pinctrl/intel into fixes

intel-pinctrl for v5.5-2

* Fix Baytrail silicon issue by using a global lock
* Fix North community pin names that user will assume their functions
* Convert Cherryview and Baytrail to pass IRQ chip along with GPIO one

The following is an automated git shortlog grouped by driver:

baytrail:
- Pass irqchip when adding gpiochip
- Add GPIO <-> pin mapping ranges via callback
- Update North Community pin list
- Really serialize all register accesses

cherryview:
- Pass irqchip when adding gpiochip
- Add GPIO <-> pin mapping ranges via callback
- Split out irq hw-init into a separate helper function

+178 -139
+110 -90
drivers/pinctrl/intel/pinctrl-baytrail.c
··· 110 110 struct platform_device *pdev; 111 111 struct pinctrl_dev *pctl_dev; 112 112 struct pinctrl_desc pctl_desc; 113 - raw_spinlock_t lock; 114 113 const struct intel_pinctrl_soc_data *soc_data; 115 114 struct intel_community *communities_copy; 116 115 struct byt_gpio_pin_context *saved_context; ··· 493 494 }; 494 495 495 496 static const struct pinctrl_pin_desc byt_ncore_pins[] = { 496 - PINCTRL_PIN(0, "GPIO_NCORE0"), 497 - PINCTRL_PIN(1, "GPIO_NCORE1"), 498 - PINCTRL_PIN(2, "GPIO_NCORE2"), 499 - PINCTRL_PIN(3, "GPIO_NCORE3"), 500 - PINCTRL_PIN(4, "GPIO_NCORE4"), 501 - PINCTRL_PIN(5, "GPIO_NCORE5"), 502 - PINCTRL_PIN(6, "GPIO_NCORE6"), 503 - PINCTRL_PIN(7, "GPIO_NCORE7"), 504 - PINCTRL_PIN(8, "GPIO_NCORE8"), 505 - PINCTRL_PIN(9, "GPIO_NCORE9"), 506 - PINCTRL_PIN(10, "GPIO_NCORE10"), 507 - PINCTRL_PIN(11, "GPIO_NCORE11"), 508 - PINCTRL_PIN(12, "GPIO_NCORE12"), 509 - PINCTRL_PIN(13, "GPIO_NCORE13"), 510 - PINCTRL_PIN(14, "GPIO_NCORE14"), 511 - PINCTRL_PIN(15, "GPIO_NCORE15"), 512 - PINCTRL_PIN(16, "GPIO_NCORE16"), 513 - PINCTRL_PIN(17, "GPIO_NCORE17"), 514 - PINCTRL_PIN(18, "GPIO_NCORE18"), 515 - PINCTRL_PIN(19, "GPIO_NCORE19"), 516 - PINCTRL_PIN(20, "GPIO_NCORE20"), 517 - PINCTRL_PIN(21, "GPIO_NCORE21"), 518 - PINCTRL_PIN(22, "GPIO_NCORE22"), 519 - PINCTRL_PIN(23, "GPIO_NCORE23"), 520 - PINCTRL_PIN(24, "GPIO_NCORE24"), 521 - PINCTRL_PIN(25, "GPIO_NCORE25"), 522 - PINCTRL_PIN(26, "GPIO_NCORE26"), 523 - PINCTRL_PIN(27, "GPIO_NCORE27"), 497 + PINCTRL_PIN(0, "HV_DDI0_HPD"), 498 + PINCTRL_PIN(1, "HV_DDI0_DDC_SDA"), 499 + PINCTRL_PIN(2, "HV_DDI0_DDC_SCL"), 500 + PINCTRL_PIN(3, "PANEL0_VDDEN"), 501 + PINCTRL_PIN(4, "PANEL0_BKLTEN"), 502 + PINCTRL_PIN(5, "PANEL0_BKLTCTL"), 503 + PINCTRL_PIN(6, "HV_DDI1_HPD"), 504 + PINCTRL_PIN(7, "HV_DDI1_DDC_SDA"), 505 + PINCTRL_PIN(8, "HV_DDI1_DDC_SCL"), 506 + PINCTRL_PIN(9, "PANEL1_VDDEN"), 507 + PINCTRL_PIN(10, "PANEL1_BKLTEN"), 508 + PINCTRL_PIN(11, "PANEL1_BKLTCTL"), 509 + PINCTRL_PIN(12, "GP_INTD_DSI_TE1"), 510 + PINCTRL_PIN(13, "HV_DDI2_DDC_SDA"), 511 + PINCTRL_PIN(14, "HV_DDI2_DDC_SCL"), 512 + PINCTRL_PIN(15, "GP_CAMERASB00"), 513 + PINCTRL_PIN(16, "GP_CAMERASB01"), 514 + PINCTRL_PIN(17, "GP_CAMERASB02"), 515 + PINCTRL_PIN(18, "GP_CAMERASB03"), 516 + PINCTRL_PIN(19, "GP_CAMERASB04"), 517 + PINCTRL_PIN(20, "GP_CAMERASB05"), 518 + PINCTRL_PIN(21, "GP_CAMERASB06"), 519 + PINCTRL_PIN(22, "GP_CAMERASB07"), 520 + PINCTRL_PIN(23, "GP_CAMERASB08"), 521 + PINCTRL_PIN(24, "GP_CAMERASB09"), 522 + PINCTRL_PIN(25, "GP_CAMERASB10"), 523 + PINCTRL_PIN(26, "GP_CAMERASB11"), 524 + PINCTRL_PIN(27, "GP_INTD_DSI_TE2"), 524 525 }; 525 526 526 527 static const unsigned int byt_ncore_pins_map[BYT_NGPIO_NCORE] = { ··· 547 548 &byt_ncore_soc_data, 548 549 NULL 549 550 }; 551 + 552 + static DEFINE_RAW_SPINLOCK(byt_lock); 550 553 551 554 static struct intel_community *byt_get_community(struct byt_gpio *vg, 552 555 unsigned int pin) ··· 659 658 unsigned long flags; 660 659 int i; 661 660 662 - raw_spin_lock_irqsave(&vg->lock, flags); 661 + raw_spin_lock_irqsave(&byt_lock, flags); 663 662 664 663 for (i = 0; i < group.npins; i++) { 665 664 void __iomem *padcfg0; ··· 679 678 writel(value, padcfg0); 680 679 } 681 680 682 - raw_spin_unlock_irqrestore(&vg->lock, flags); 681 + raw_spin_unlock_irqrestore(&byt_lock, flags); 683 682 } 684 683 685 684 static void byt_set_group_mixed_mux(struct byt_gpio *vg, ··· 689 688 unsigned long flags; 690 689 int i; 691 690 692 - raw_spin_lock_irqsave(&vg->lock, flags); 691 + raw_spin_lock_irqsave(&byt_lock, flags); 693 692 694 693 for (i = 0; i < group.npins; i++) { 695 694 void __iomem *padcfg0; ··· 709 708 writel(value, padcfg0); 710 709 } 711 710 712 - raw_spin_unlock_irqrestore(&vg->lock, flags); 711 + raw_spin_unlock_irqrestore(&byt_lock, flags); 713 712 } 714 713 715 714 static int byt_set_mux(struct pinctrl_dev *pctldev, unsigned int func_selector, ··· 750 749 unsigned long flags; 751 750 u32 value; 752 751 753 - raw_spin_lock_irqsave(&vg->lock, flags); 752 + raw_spin_lock_irqsave(&byt_lock, flags); 754 753 value = readl(reg); 755 754 value &= ~(BYT_TRIG_POS | BYT_TRIG_NEG | BYT_TRIG_LVL); 756 755 writel(value, reg); 757 - raw_spin_unlock_irqrestore(&vg->lock, flags); 756 + raw_spin_unlock_irqrestore(&byt_lock, flags); 758 757 } 759 758 760 759 static int byt_gpio_request_enable(struct pinctrl_dev *pctl_dev, ··· 766 765 u32 value, gpio_mux; 767 766 unsigned long flags; 768 767 769 - raw_spin_lock_irqsave(&vg->lock, flags); 768 + raw_spin_lock_irqsave(&byt_lock, flags); 770 769 771 770 /* 772 771 * In most cases, func pin mux 000 means GPIO function. ··· 788 787 "pin %u forcibly re-configured as GPIO\n", offset); 789 788 } 790 789 791 - raw_spin_unlock_irqrestore(&vg->lock, flags); 790 + raw_spin_unlock_irqrestore(&byt_lock, flags); 792 791 793 792 pm_runtime_get(&vg->pdev->dev); 794 793 ··· 816 815 unsigned long flags; 817 816 u32 value; 818 817 819 - raw_spin_lock_irqsave(&vg->lock, flags); 818 + raw_spin_lock_irqsave(&byt_lock, flags); 820 819 821 820 value = readl(val_reg); 822 821 value &= ~BYT_DIR_MASK; ··· 833 832 "Potential Error: Setting GPIO with direct_irq_en to output"); 834 833 writel(value, val_reg); 835 834 836 - raw_spin_unlock_irqrestore(&vg->lock, flags); 835 + raw_spin_unlock_irqrestore(&byt_lock, flags); 837 836 838 837 return 0; 839 838 } ··· 902 901 u32 conf, pull, val, debounce; 903 902 u16 arg = 0; 904 903 905 - raw_spin_lock_irqsave(&vg->lock, flags); 904 + raw_spin_lock_irqsave(&byt_lock, flags); 906 905 conf = readl(conf_reg); 907 906 pull = conf & BYT_PULL_ASSIGN_MASK; 908 907 val = readl(val_reg); 909 - raw_spin_unlock_irqrestore(&vg->lock, flags); 908 + raw_spin_unlock_irqrestore(&byt_lock, flags); 910 909 911 910 switch (param) { 912 911 case PIN_CONFIG_BIAS_DISABLE: ··· 933 932 if (!(conf & BYT_DEBOUNCE_EN)) 934 933 return -EINVAL; 935 934 936 - raw_spin_lock_irqsave(&vg->lock, flags); 935 + raw_spin_lock_irqsave(&byt_lock, flags); 937 936 debounce = readl(db_reg); 938 - raw_spin_unlock_irqrestore(&vg->lock, flags); 937 + raw_spin_unlock_irqrestore(&byt_lock, flags); 939 938 940 939 switch (debounce & BYT_DEBOUNCE_PULSE_MASK) { 941 940 case BYT_DEBOUNCE_PULSE_375US: ··· 987 986 u32 conf, val, debounce; 988 987 int i, ret = 0; 989 988 990 - raw_spin_lock_irqsave(&vg->lock, flags); 989 + raw_spin_lock_irqsave(&byt_lock, flags); 991 990 992 991 conf = readl(conf_reg); 993 992 val = readl(val_reg); ··· 1095 1094 if (!ret) 1096 1095 writel(conf, conf_reg); 1097 1096 1098 - raw_spin_unlock_irqrestore(&vg->lock, flags); 1097 + raw_spin_unlock_irqrestore(&byt_lock, flags); 1099 1098 1100 1099 return ret; 1101 1100 } ··· 1120 1119 unsigned long flags; 1121 1120 u32 val; 1122 1121 1123 - raw_spin_lock_irqsave(&vg->lock, flags); 1122 + raw_spin_lock_irqsave(&byt_lock, flags); 1124 1123 val = readl(reg); 1125 - raw_spin_unlock_irqrestore(&vg->lock, flags); 1124 + raw_spin_unlock_irqrestore(&byt_lock, flags); 1126 1125 1127 1126 return !!(val & BYT_LEVEL); 1128 1127 } ··· 1137 1136 if (!reg) 1138 1137 return; 1139 1138 1140 - raw_spin_lock_irqsave(&vg->lock, flags); 1139 + raw_spin_lock_irqsave(&byt_lock, flags); 1141 1140 old_val = readl(reg); 1142 1141 if (value) 1143 1142 writel(old_val | BYT_LEVEL, reg); 1144 1143 else 1145 1144 writel(old_val & ~BYT_LEVEL, reg); 1146 - raw_spin_unlock_irqrestore(&vg->lock, flags); 1145 + raw_spin_unlock_irqrestore(&byt_lock, flags); 1147 1146 } 1148 1147 1149 1148 static int byt_gpio_get_direction(struct gpio_chip *chip, unsigned int offset) ··· 1156 1155 if (!reg) 1157 1156 return -EINVAL; 1158 1157 1159 - raw_spin_lock_irqsave(&vg->lock, flags); 1158 + raw_spin_lock_irqsave(&byt_lock, flags); 1160 1159 value = readl(reg); 1161 - raw_spin_unlock_irqrestore(&vg->lock, flags); 1160 + raw_spin_unlock_irqrestore(&byt_lock, flags); 1162 1161 1163 1162 if (!(value & BYT_OUTPUT_EN)) 1164 1163 return 0; ··· 1201 1200 const char *label; 1202 1201 unsigned int pin; 1203 1202 1204 - raw_spin_lock_irqsave(&vg->lock, flags); 1203 + raw_spin_lock_irqsave(&byt_lock, flags); 1205 1204 pin = vg->soc_data->pins[i].number; 1206 1205 reg = byt_gpio_reg(vg, pin, BYT_CONF0_REG); 1207 1206 if (!reg) { 1208 1207 seq_printf(s, 1209 1208 "Could not retrieve pin %i conf0 reg\n", 1210 1209 pin); 1211 - raw_spin_unlock_irqrestore(&vg->lock, flags); 1210 + raw_spin_unlock_irqrestore(&byt_lock, flags); 1212 1211 continue; 1213 1212 } 1214 1213 conf0 = readl(reg); ··· 1217 1216 if (!reg) { 1218 1217 seq_printf(s, 1219 1218 "Could not retrieve pin %i val reg\n", pin); 1220 - raw_spin_unlock_irqrestore(&vg->lock, flags); 1219 + raw_spin_unlock_irqrestore(&byt_lock, flags); 1221 1220 continue; 1222 1221 } 1223 1222 val = readl(reg); 1224 - raw_spin_unlock_irqrestore(&vg->lock, flags); 1223 + raw_spin_unlock_irqrestore(&byt_lock, flags); 1225 1224 1226 1225 comm = byt_get_community(vg, pin); 1227 1226 if (!comm) { ··· 1305 1304 if (!reg) 1306 1305 return; 1307 1306 1308 - raw_spin_lock(&vg->lock); 1307 + raw_spin_lock(&byt_lock); 1309 1308 writel(BIT(offset % 32), reg); 1310 - raw_spin_unlock(&vg->lock); 1309 + raw_spin_unlock(&byt_lock); 1311 1310 } 1312 1311 1313 1312 static void byt_irq_mask(struct irq_data *d) ··· 1331 1330 if (!reg) 1332 1331 return; 1333 1332 1334 - raw_spin_lock_irqsave(&vg->lock, flags); 1333 + raw_spin_lock_irqsave(&byt_lock, flags); 1335 1334 value = readl(reg); 1336 1335 1337 1336 switch (irqd_get_trigger_type(d)) { ··· 1354 1353 1355 1354 writel(value, reg); 1356 1355 1357 - raw_spin_unlock_irqrestore(&vg->lock, flags); 1356 + raw_spin_unlock_irqrestore(&byt_lock, flags); 1358 1357 } 1359 1358 1360 1359 static int byt_irq_type(struct irq_data *d, unsigned int type) ··· 1368 1367 if (!reg || offset >= vg->chip.ngpio) 1369 1368 return -EINVAL; 1370 1369 1371 - raw_spin_lock_irqsave(&vg->lock, flags); 1370 + raw_spin_lock_irqsave(&byt_lock, flags); 1372 1371 value = readl(reg); 1373 1372 1374 1373 WARN(value & BYT_DIRECT_IRQ_EN, ··· 1390 1389 else if (type & IRQ_TYPE_LEVEL_MASK) 1391 1390 irq_set_handler_locked(d, handle_level_irq); 1392 1391 1393 - raw_spin_unlock_irqrestore(&vg->lock, flags); 1392 + raw_spin_unlock_irqrestore(&byt_lock, flags); 1394 1393 1395 1394 return 0; 1396 1395 } ··· 1426 1425 continue; 1427 1426 } 1428 1427 1429 - raw_spin_lock(&vg->lock); 1428 + raw_spin_lock(&byt_lock); 1430 1429 pending = readl(reg); 1431 - raw_spin_unlock(&vg->lock); 1430 + raw_spin_unlock(&byt_lock); 1432 1431 for_each_set_bit(pin, &pending, 32) { 1433 1432 virq = irq_find_mapping(vg->chip.irq.domain, base + pin); 1434 1433 generic_handle_irq(virq); ··· 1451 1450 */ 1452 1451 } 1453 1452 1454 - static void byt_gpio_irq_init_hw(struct byt_gpio *vg) 1453 + static int byt_gpio_irq_init_hw(struct gpio_chip *chip) 1455 1454 { 1456 - struct gpio_chip *gc = &vg->chip; 1455 + struct byt_gpio *vg = gpiochip_get_data(chip); 1457 1456 struct device *dev = &vg->pdev->dev; 1458 1457 void __iomem *reg; 1459 1458 u32 base, value; ··· 1477 1476 1478 1477 value = readl(reg); 1479 1478 if (value & BYT_DIRECT_IRQ_EN) { 1480 - clear_bit(i, gc->irq.valid_mask); 1479 + clear_bit(i, chip->irq.valid_mask); 1481 1480 dev_dbg(dev, "excluding GPIO %d from IRQ domain\n", i); 1482 1481 } else if ((value & BYT_PIN_MUX) == byt_get_gpio_mux(vg, i)) { 1483 1482 byt_gpio_clear_triggering(vg, i); ··· 1505 1504 "GPIO interrupt error, pins misconfigured. INT_STAT%u: 0x%08x\n", 1506 1505 base / 32, value); 1507 1506 } 1507 + 1508 + return 0; 1509 + } 1510 + 1511 + static int byt_gpio_add_pin_ranges(struct gpio_chip *chip) 1512 + { 1513 + struct byt_gpio *vg = gpiochip_get_data(chip); 1514 + struct device *dev = &vg->pdev->dev; 1515 + int ret; 1516 + 1517 + ret = gpiochip_add_pin_range(chip, dev_name(dev), 0, 0, vg->soc_data->npins); 1518 + if (ret) 1519 + dev_err(dev, "failed to add GPIO pin range\n"); 1520 + 1521 + return ret; 1508 1522 } 1509 1523 1510 1524 static int byt_gpio_probe(struct byt_gpio *vg) ··· 1534 1518 gc->label = dev_name(&vg->pdev->dev); 1535 1519 gc->base = -1; 1536 1520 gc->can_sleep = false; 1521 + gc->add_pin_ranges = byt_gpio_add_pin_ranges; 1537 1522 gc->parent = &vg->pdev->dev; 1538 1523 gc->ngpio = vg->soc_data->npins; 1539 1524 gc->irq.init_valid_mask = byt_init_irq_valid_mask; ··· 1545 1528 if (!vg->saved_context) 1546 1529 return -ENOMEM; 1547 1530 #endif 1548 - ret = devm_gpiochip_add_data(&vg->pdev->dev, gc, vg); 1549 - if (ret) { 1550 - dev_err(&vg->pdev->dev, "failed adding byt-gpio chip\n"); 1551 - return ret; 1552 - } 1553 - 1554 - ret = gpiochip_add_pin_range(&vg->chip, dev_name(&vg->pdev->dev), 1555 - 0, 0, vg->soc_data->npins); 1556 - if (ret) { 1557 - dev_err(&vg->pdev->dev, "failed to add GPIO pin range\n"); 1558 - return ret; 1559 - } 1560 1531 1561 1532 /* set up interrupts */ 1562 1533 irq_rc = platform_get_resource(vg->pdev, IORESOURCE_IRQ, 0); 1563 1534 if (irq_rc && irq_rc->start) { 1564 - byt_gpio_irq_init_hw(vg); 1565 - ret = gpiochip_irqchip_add(gc, &byt_irqchip, 0, 1566 - handle_bad_irq, IRQ_TYPE_NONE); 1567 - if (ret) { 1568 - dev_err(&vg->pdev->dev, "failed to add irqchip\n"); 1569 - return ret; 1570 - } 1535 + struct gpio_irq_chip *girq; 1571 1536 1572 - gpiochip_set_chained_irqchip(gc, &byt_irqchip, 1573 - (unsigned)irq_rc->start, 1574 - byt_gpio_irq_handler); 1537 + girq = &gc->irq; 1538 + girq->chip = &byt_irqchip; 1539 + girq->init_hw = byt_gpio_irq_init_hw; 1540 + girq->parent_handler = byt_gpio_irq_handler; 1541 + girq->num_parents = 1; 1542 + girq->parents = devm_kcalloc(&vg->pdev->dev, girq->num_parents, 1543 + sizeof(*girq->parents), GFP_KERNEL); 1544 + if (!girq->parents) 1545 + return -ENOMEM; 1546 + girq->parents[0] = (unsigned int)irq_rc->start; 1547 + girq->default_type = IRQ_TYPE_NONE; 1548 + girq->handler = handle_bad_irq; 1549 + } 1550 + 1551 + ret = devm_gpiochip_add_data(&vg->pdev->dev, gc, vg); 1552 + if (ret) { 1553 + dev_err(&vg->pdev->dev, "failed adding byt-gpio chip\n"); 1554 + return ret; 1575 1555 } 1576 1556 1577 1557 return ret; ··· 1652 1638 return PTR_ERR(vg->pctl_dev); 1653 1639 } 1654 1640 1655 - raw_spin_lock_init(&vg->lock); 1656 - 1657 1641 ret = byt_gpio_probe(vg); 1658 1642 if (ret) 1659 1643 return ret; ··· 1666 1654 static int byt_gpio_suspend(struct device *dev) 1667 1655 { 1668 1656 struct byt_gpio *vg = dev_get_drvdata(dev); 1657 + unsigned long flags; 1669 1658 int i; 1659 + 1660 + raw_spin_lock_irqsave(&byt_lock, flags); 1670 1661 1671 1662 for (i = 0; i < vg->soc_data->npins; i++) { 1672 1663 void __iomem *reg; ··· 1691 1676 vg->saved_context[i].val = value; 1692 1677 } 1693 1678 1679 + raw_spin_unlock_irqrestore(&byt_lock, flags); 1694 1680 return 0; 1695 1681 } 1696 1682 1697 1683 static int byt_gpio_resume(struct device *dev) 1698 1684 { 1699 1685 struct byt_gpio *vg = dev_get_drvdata(dev); 1686 + unsigned long flags; 1700 1687 int i; 1688 + 1689 + raw_spin_lock_irqsave(&byt_lock, flags); 1701 1690 1702 1691 for (i = 0; i < vg->soc_data->npins; i++) { 1703 1692 void __iomem *reg; ··· 1740 1721 } 1741 1722 } 1742 1723 1724 + raw_spin_unlock_irqrestore(&byt_lock, flags); 1743 1725 return 0; 1744 1726 } 1745 1727 #endif
+68 -49
drivers/pinctrl/intel/pinctrl-cherryview.c
··· 149 149 * @chip: GPIO chip in this pin controller 150 150 * @irqchip: IRQ chip in this pin controller 151 151 * @regs: MMIO registers 152 + * @irq: Our parent irq 152 153 * @intr_lines: Stores mapping between 16 HW interrupt wires and GPIO 153 154 * offset (in GPIO number space) 154 155 * @community: Community this pinctrl instance represents ··· 166 165 struct gpio_chip chip; 167 166 struct irq_chip irqchip; 168 167 void __iomem *regs; 168 + unsigned int irq; 169 169 unsigned int intr_lines[16]; 170 170 const struct chv_community *community; 171 171 u32 saved_intmask; ··· 1557 1555 } 1558 1556 } 1559 1557 1560 - static int chv_gpio_probe(struct chv_pinctrl *pctrl, int irq) 1558 + static int chv_gpio_irq_init_hw(struct gpio_chip *chip) 1561 1559 { 1562 - const struct chv_gpio_pinrange *range; 1563 - struct gpio_chip *chip = &pctrl->chip; 1564 - bool need_valid_mask = !dmi_check_system(chv_no_valid_mask); 1565 - const struct chv_community *community = pctrl->community; 1566 - int ret, i, irq_base; 1560 + struct chv_pinctrl *pctrl = gpiochip_get_data(chip); 1567 1561 1568 - *chip = chv_gpio_chip; 1569 - 1570 - chip->ngpio = community->pins[community->npins - 1].number + 1; 1571 - chip->label = dev_name(pctrl->dev); 1572 - chip->parent = pctrl->dev; 1573 - chip->base = -1; 1574 - if (need_valid_mask) 1575 - chip->irq.init_valid_mask = chv_init_irq_valid_mask; 1576 - 1577 - ret = devm_gpiochip_add_data(pctrl->dev, chip, pctrl); 1578 - if (ret) { 1579 - dev_err(pctrl->dev, "Failed to register gpiochip\n"); 1580 - return ret; 1562 + /* 1563 + * The same set of machines in chv_no_valid_mask[] have incorrectly 1564 + * configured GPIOs that generate spurious interrupts so we use 1565 + * this same list to apply another quirk for them. 1566 + * 1567 + * See also https://bugzilla.kernel.org/show_bug.cgi?id=197953. 1568 + */ 1569 + if (!pctrl->chip.irq.init_valid_mask) { 1570 + /* 1571 + * Mask all interrupts the community is able to generate 1572 + * but leave the ones that can only generate GPEs unmasked. 1573 + */ 1574 + chv_writel(GENMASK(31, pctrl->community->nirqs), 1575 + pctrl->regs + CHV_INTMASK); 1581 1576 } 1577 + 1578 + /* Clear all interrupts */ 1579 + chv_writel(0xffff, pctrl->regs + CHV_INTSTAT); 1580 + 1581 + return 0; 1582 + } 1583 + 1584 + static int chv_gpio_add_pin_ranges(struct gpio_chip *chip) 1585 + { 1586 + struct chv_pinctrl *pctrl = gpiochip_get_data(chip); 1587 + const struct chv_community *community = pctrl->community; 1588 + const struct chv_gpio_pinrange *range; 1589 + int ret, i; 1582 1590 1583 1591 for (i = 0; i < community->ngpio_ranges; i++) { 1584 1592 range = &community->gpio_ranges[i]; ··· 1601 1589 } 1602 1590 } 1603 1591 1604 - /* 1605 - * The same set of machines in chv_no_valid_mask[] have incorrectly 1606 - * configured GPIOs that generate spurious interrupts so we use 1607 - * this same list to apply another quirk for them. 1608 - * 1609 - * See also https://bugzilla.kernel.org/show_bug.cgi?id=197953. 1610 - */ 1611 - if (!need_valid_mask) { 1612 - /* 1613 - * Mask all interrupts the community is able to generate 1614 - * but leave the ones that can only generate GPEs unmasked. 1615 - */ 1616 - chv_writel(GENMASK(31, pctrl->community->nirqs), 1617 - pctrl->regs + CHV_INTMASK); 1618 - } 1592 + return 0; 1593 + } 1619 1594 1620 - /* Clear all interrupts */ 1621 - chv_writel(0xffff, pctrl->regs + CHV_INTSTAT); 1595 + static int chv_gpio_probe(struct chv_pinctrl *pctrl, int irq) 1596 + { 1597 + const struct chv_gpio_pinrange *range; 1598 + struct gpio_chip *chip = &pctrl->chip; 1599 + bool need_valid_mask = !dmi_check_system(chv_no_valid_mask); 1600 + const struct chv_community *community = pctrl->community; 1601 + int ret, i, irq_base; 1622 1602 1623 - if (!need_valid_mask) { 1624 - irq_base = devm_irq_alloc_descs(pctrl->dev, -1, 0, 1625 - community->npins, NUMA_NO_NODE); 1626 - if (irq_base < 0) { 1627 - dev_err(pctrl->dev, "Failed to allocate IRQ numbers\n"); 1628 - return irq_base; 1629 - } 1630 - } 1603 + *chip = chv_gpio_chip; 1631 1604 1605 + chip->ngpio = community->pins[community->npins - 1].number + 1; 1606 + chip->label = dev_name(pctrl->dev); 1607 + chip->add_pin_ranges = chv_gpio_add_pin_ranges; 1608 + chip->parent = pctrl->dev; 1609 + chip->base = -1; 1610 + 1611 + pctrl->irq = irq; 1632 1612 pctrl->irqchip.name = "chv-gpio"; 1633 1613 pctrl->irqchip.irq_startup = chv_gpio_irq_startup; 1634 1614 pctrl->irqchip.irq_ack = chv_gpio_irq_ack; ··· 1629 1625 pctrl->irqchip.irq_set_type = chv_gpio_irq_type; 1630 1626 pctrl->irqchip.flags = IRQCHIP_SKIP_SET_WAKE; 1631 1627 1632 - ret = gpiochip_irqchip_add(chip, &pctrl->irqchip, 0, 1633 - handle_bad_irq, IRQ_TYPE_NONE); 1628 + chip->irq.chip = &pctrl->irqchip; 1629 + chip->irq.init_hw = chv_gpio_irq_init_hw; 1630 + chip->irq.parent_handler = chv_gpio_irq_handler; 1631 + chip->irq.num_parents = 1; 1632 + chip->irq.parents = &pctrl->irq; 1633 + chip->irq.default_type = IRQ_TYPE_NONE; 1634 + chip->irq.handler = handle_bad_irq; 1635 + if (need_valid_mask) { 1636 + chip->irq.init_valid_mask = chv_init_irq_valid_mask; 1637 + } else { 1638 + irq_base = devm_irq_alloc_descs(pctrl->dev, -1, 0, 1639 + community->npins, NUMA_NO_NODE); 1640 + if (irq_base < 0) { 1641 + dev_err(pctrl->dev, "Failed to allocate IRQ numbers\n"); 1642 + return irq_base; 1643 + } 1644 + } 1645 + 1646 + ret = devm_gpiochip_add_data(pctrl->dev, chip, pctrl); 1634 1647 if (ret) { 1635 - dev_err(pctrl->dev, "failed to add IRQ chip\n"); 1648 + dev_err(pctrl->dev, "Failed to register gpiochip\n"); 1636 1649 return ret; 1637 1650 } 1638 1651 ··· 1663 1642 } 1664 1643 } 1665 1644 1666 - gpiochip_set_chained_irqchip(chip, &pctrl->irqchip, irq, 1667 - chv_gpio_irq_handler); 1668 1645 return 0; 1669 1646 } 1670 1647