aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2018-05-08 11:37:17 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2018-05-08 11:37:17 -0400
commit93a0d34024ad9951a7ce86a306c8d3414b1b1d88 (patch)
tree8dd96e4749fa2f0fe47fe2436e5bcb4452e6ab83
parent89240c675ed12fe540093fc70c13ae8ff227e8e5 (diff)
parentc41eb2c7f93531b8ea689b1e2bfe7e6b884a7213 (diff)
Merge tag 'pinctrl-v4.17-2' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl
Pull pin control fixes from Linus Walleij: "Here are three pin control fixes. The Intel fixes are the most serious and important things I had queued since it affects a large portion of deployed Chromebooks. - Two major fixes for the Intel Cherryview and Sunrisepoint pin controllers, adjusting numberspaces so that they get aligned with various messed-up numbers encoded into the BIOS. - A fix for the Meson driver GPIO pin range" * tag 'pinctrl-v4.17-2' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl: pinctrl: sunrisepoint: Align GPIO number space with Windows pinctrl: cherryview: Associate IRQ descriptors to irqdomain pinctrl: meson-axg: fix the range of aobus bank
-rw-r--r--drivers/pinctrl/intel/pinctrl-cherryview.c16
-rw-r--r--drivers/pinctrl/intel/pinctrl-sunrisepoint.c45
-rw-r--r--drivers/pinctrl/meson/pinctrl-meson-axg.c2
3 files changed, 55 insertions, 8 deletions
diff --git a/drivers/pinctrl/intel/pinctrl-cherryview.c b/drivers/pinctrl/intel/pinctrl-cherryview.c
index b1ae1618fefe..fee9225ca559 100644
--- a/drivers/pinctrl/intel/pinctrl-cherryview.c
+++ b/drivers/pinctrl/intel/pinctrl-cherryview.c
@@ -1622,22 +1622,30 @@ static int chv_gpio_probe(struct chv_pinctrl *pctrl, int irq)
1622 1622
1623 if (!need_valid_mask) { 1623 if (!need_valid_mask) {
1624 irq_base = devm_irq_alloc_descs(pctrl->dev, -1, 0, 1624 irq_base = devm_irq_alloc_descs(pctrl->dev, -1, 0,
1625 chip->ngpio, NUMA_NO_NODE); 1625 community->npins, NUMA_NO_NODE);
1626 if (irq_base < 0) { 1626 if (irq_base < 0) {
1627 dev_err(pctrl->dev, "Failed to allocate IRQ numbers\n"); 1627 dev_err(pctrl->dev, "Failed to allocate IRQ numbers\n");
1628 return irq_base; 1628 return irq_base;
1629 } 1629 }
1630 } else {
1631 irq_base = 0;
1632 } 1630 }
1633 1631
1634 ret = gpiochip_irqchip_add(chip, &chv_gpio_irqchip, irq_base, 1632 ret = gpiochip_irqchip_add(chip, &chv_gpio_irqchip, 0,
1635 handle_bad_irq, IRQ_TYPE_NONE); 1633 handle_bad_irq, IRQ_TYPE_NONE);
1636 if (ret) { 1634 if (ret) {
1637 dev_err(pctrl->dev, "failed to add IRQ chip\n"); 1635 dev_err(pctrl->dev, "failed to add IRQ chip\n");
1638 return ret; 1636 return ret;
1639 } 1637 }
1640 1638
1639 if (!need_valid_mask) {
1640 for (i = 0; i < community->ngpio_ranges; i++) {
1641 range = &community->gpio_ranges[i];
1642
1643 irq_domain_associate_many(chip->irq.domain, irq_base,
1644 range->base, range->npins);
1645 irq_base += range->npins;
1646 }
1647 }
1648
1641 gpiochip_set_chained_irqchip(chip, &chv_gpio_irqchip, irq, 1649 gpiochip_set_chained_irqchip(chip, &chv_gpio_irqchip, irq,
1642 chv_gpio_irq_handler); 1650 chv_gpio_irq_handler);
1643 return 0; 1651 return 0;
diff --git a/drivers/pinctrl/intel/pinctrl-sunrisepoint.c b/drivers/pinctrl/intel/pinctrl-sunrisepoint.c
index 8870a4100164..fee3435a6f15 100644
--- a/drivers/pinctrl/intel/pinctrl-sunrisepoint.c
+++ b/drivers/pinctrl/intel/pinctrl-sunrisepoint.c
@@ -36,6 +36,27 @@
36 .npins = ((e) - (s) + 1), \ 36 .npins = ((e) - (s) + 1), \
37 } 37 }
38 38
39#define SPTH_GPP(r, s, e, g) \
40 { \
41 .reg_num = (r), \
42 .base = (s), \
43 .size = ((e) - (s) + 1), \
44 .gpio_base = (g), \
45 }
46
47#define SPTH_COMMUNITY(b, s, e, g) \
48 { \
49 .barno = (b), \
50 .padown_offset = SPT_PAD_OWN, \
51 .padcfglock_offset = SPT_PADCFGLOCK, \
52 .hostown_offset = SPT_HOSTSW_OWN, \
53 .ie_offset = SPT_GPI_IE, \
54 .pin_base = (s), \
55 .npins = ((e) - (s) + 1), \
56 .gpps = (g), \
57 .ngpps = ARRAY_SIZE(g), \
58 }
59
39/* Sunrisepoint-LP */ 60/* Sunrisepoint-LP */
40static const struct pinctrl_pin_desc sptlp_pins[] = { 61static const struct pinctrl_pin_desc sptlp_pins[] = {
41 /* GPP_A */ 62 /* GPP_A */
@@ -531,10 +552,28 @@ static const struct intel_function spth_functions[] = {
531 FUNCTION("i2c2", spth_i2c2_groups), 552 FUNCTION("i2c2", spth_i2c2_groups),
532}; 553};
533 554
555static const struct intel_padgroup spth_community0_gpps[] = {
556 SPTH_GPP(0, 0, 23, 0), /* GPP_A */
557 SPTH_GPP(1, 24, 47, 24), /* GPP_B */
558};
559
560static const struct intel_padgroup spth_community1_gpps[] = {
561 SPTH_GPP(0, 48, 71, 48), /* GPP_C */
562 SPTH_GPP(1, 72, 95, 72), /* GPP_D */
563 SPTH_GPP(2, 96, 108, 96), /* GPP_E */
564 SPTH_GPP(3, 109, 132, 120), /* GPP_F */
565 SPTH_GPP(4, 133, 156, 144), /* GPP_G */
566 SPTH_GPP(5, 157, 180, 168), /* GPP_H */
567};
568
569static const struct intel_padgroup spth_community3_gpps[] = {
570 SPTH_GPP(0, 181, 191, 192), /* GPP_I */
571};
572
534static const struct intel_community spth_communities[] = { 573static const struct intel_community spth_communities[] = {
535 SPT_COMMUNITY(0, 0, 47), 574 SPTH_COMMUNITY(0, 0, 47, spth_community0_gpps),
536 SPT_COMMUNITY(1, 48, 180), 575 SPTH_COMMUNITY(1, 48, 180, spth_community1_gpps),
537 SPT_COMMUNITY(2, 181, 191), 576 SPTH_COMMUNITY(2, 181, 191, spth_community3_gpps),
538}; 577};
539 578
540static const struct intel_pinctrl_soc_data spth_soc_data = { 579static const struct intel_pinctrl_soc_data spth_soc_data = {
diff --git a/drivers/pinctrl/meson/pinctrl-meson-axg.c b/drivers/pinctrl/meson/pinctrl-meson-axg.c
index 4b91ff74779b..99a6ceac8e53 100644
--- a/drivers/pinctrl/meson/pinctrl-meson-axg.c
+++ b/drivers/pinctrl/meson/pinctrl-meson-axg.c
@@ -898,7 +898,7 @@ static struct meson_bank meson_axg_periphs_banks[] = {
898 898
899static struct meson_bank meson_axg_aobus_banks[] = { 899static struct meson_bank meson_axg_aobus_banks[] = {
900 /* name first last irq pullen pull dir out in */ 900 /* name first last irq pullen pull dir out in */
901 BANK("AO", GPIOAO_0, GPIOAO_9, 0, 13, 0, 16, 0, 0, 0, 0, 0, 16, 1, 0), 901 BANK("AO", GPIOAO_0, GPIOAO_13, 0, 13, 0, 16, 0, 0, 0, 0, 0, 16, 1, 0),
902}; 902};
903 903
904static struct meson_pmx_bank meson_axg_periphs_pmx_banks[] = { 904static struct meson_pmx_bank meson_axg_periphs_pmx_banks[] = {