diff options
Diffstat (limited to 'drivers/pinctrl')
-rw-r--r-- | drivers/pinctrl/Kconfig | 2 | ||||
-rw-r--r-- | drivers/pinctrl/core.c | 8 | ||||
-rw-r--r-- | drivers/pinctrl/pinctrl-at91.c | 10 | ||||
-rw-r--r-- | drivers/pinctrl/pinctrl-capri.c | 2 | ||||
-rw-r--r-- | drivers/pinctrl/pinctrl-imx1-core.c | 10 | ||||
-rw-r--r-- | drivers/pinctrl/pinctrl-sunxi.c | 6 | ||||
-rw-r--r-- | drivers/pinctrl/pinctrl-sunxi.h | 6 | ||||
-rw-r--r-- | drivers/pinctrl/pinctrl-tegra.c | 2 | ||||
-rw-r--r-- | drivers/pinctrl/sh-pfc/pfc-r8a7791.c | 6 | ||||
-rw-r--r-- | drivers/pinctrl/sirf/pinctrl-prima2.c | 2 | ||||
-rw-r--r-- | drivers/pinctrl/sirf/pinctrl-sirf.c | 4 | ||||
-rw-r--r-- | drivers/pinctrl/vt8500/pinctrl-wmt.c | 15 |
12 files changed, 48 insertions, 25 deletions
diff --git a/drivers/pinctrl/Kconfig b/drivers/pinctrl/Kconfig index be361b7cd30f..1e4e69384baa 100644 --- a/drivers/pinctrl/Kconfig +++ b/drivers/pinctrl/Kconfig | |||
@@ -217,7 +217,7 @@ config PINCTRL_IMX28 | |||
217 | select PINCTRL_MXS | 217 | select PINCTRL_MXS |
218 | 218 | ||
219 | config PINCTRL_MSM | 219 | config PINCTRL_MSM |
220 | tristate | 220 | bool |
221 | select PINMUX | 221 | select PINMUX |
222 | select PINCONF | 222 | select PINCONF |
223 | select GENERIC_PINCONF | 223 | select GENERIC_PINCONF |
diff --git a/drivers/pinctrl/core.c b/drivers/pinctrl/core.c index 5ee61a470016..c0fe6091566a 100644 --- a/drivers/pinctrl/core.c +++ b/drivers/pinctrl/core.c | |||
@@ -851,7 +851,9 @@ static struct pinctrl *create_pinctrl(struct device *dev) | |||
851 | kref_init(&p->users); | 851 | kref_init(&p->users); |
852 | 852 | ||
853 | /* Add the pinctrl handle to the global list */ | 853 | /* Add the pinctrl handle to the global list */ |
854 | mutex_lock(&pinctrl_list_mutex); | ||
854 | list_add_tail(&p->node, &pinctrl_list); | 855 | list_add_tail(&p->node, &pinctrl_list); |
856 | mutex_unlock(&pinctrl_list_mutex); | ||
855 | 857 | ||
856 | return p; | 858 | return p; |
857 | } | 859 | } |
@@ -1642,8 +1644,10 @@ static void pinctrl_init_device_debugfs(struct pinctrl_dev *pctldev) | |||
1642 | device_root, pctldev, &pinctrl_groups_ops); | 1644 | device_root, pctldev, &pinctrl_groups_ops); |
1643 | debugfs_create_file("gpio-ranges", S_IFREG | S_IRUGO, | 1645 | debugfs_create_file("gpio-ranges", S_IFREG | S_IRUGO, |
1644 | device_root, pctldev, &pinctrl_gpioranges_ops); | 1646 | device_root, pctldev, &pinctrl_gpioranges_ops); |
1645 | pinmux_init_device_debugfs(device_root, pctldev); | 1647 | if (pctldev->desc->pmxops) |
1646 | pinconf_init_device_debugfs(device_root, pctldev); | 1648 | pinmux_init_device_debugfs(device_root, pctldev); |
1649 | if (pctldev->desc->confops) | ||
1650 | pinconf_init_device_debugfs(device_root, pctldev); | ||
1647 | } | 1651 | } |
1648 | 1652 | ||
1649 | static void pinctrl_remove_device_debugfs(struct pinctrl_dev *pctldev) | 1653 | static void pinctrl_remove_device_debugfs(struct pinctrl_dev *pctldev) |
diff --git a/drivers/pinctrl/pinctrl-at91.c b/drivers/pinctrl/pinctrl-at91.c index 38c6f8b9790e..d990e33d8aa7 100644 --- a/drivers/pinctrl/pinctrl-at91.c +++ b/drivers/pinctrl/pinctrl-at91.c | |||
@@ -1286,22 +1286,22 @@ static int alt_gpio_irq_type(struct irq_data *d, unsigned type) | |||
1286 | 1286 | ||
1287 | switch (type) { | 1287 | switch (type) { |
1288 | case IRQ_TYPE_EDGE_RISING: | 1288 | case IRQ_TYPE_EDGE_RISING: |
1289 | irq_set_handler(d->irq, handle_simple_irq); | 1289 | __irq_set_handler_locked(d->irq, handle_simple_irq); |
1290 | writel_relaxed(mask, pio + PIO_ESR); | 1290 | writel_relaxed(mask, pio + PIO_ESR); |
1291 | writel_relaxed(mask, pio + PIO_REHLSR); | 1291 | writel_relaxed(mask, pio + PIO_REHLSR); |
1292 | break; | 1292 | break; |
1293 | case IRQ_TYPE_EDGE_FALLING: | 1293 | case IRQ_TYPE_EDGE_FALLING: |
1294 | irq_set_handler(d->irq, handle_simple_irq); | 1294 | __irq_set_handler_locked(d->irq, handle_simple_irq); |
1295 | writel_relaxed(mask, pio + PIO_ESR); | 1295 | writel_relaxed(mask, pio + PIO_ESR); |
1296 | writel_relaxed(mask, pio + PIO_FELLSR); | 1296 | writel_relaxed(mask, pio + PIO_FELLSR); |
1297 | break; | 1297 | break; |
1298 | case IRQ_TYPE_LEVEL_LOW: | 1298 | case IRQ_TYPE_LEVEL_LOW: |
1299 | irq_set_handler(d->irq, handle_level_irq); | 1299 | __irq_set_handler_locked(d->irq, handle_level_irq); |
1300 | writel_relaxed(mask, pio + PIO_LSR); | 1300 | writel_relaxed(mask, pio + PIO_LSR); |
1301 | writel_relaxed(mask, pio + PIO_FELLSR); | 1301 | writel_relaxed(mask, pio + PIO_FELLSR); |
1302 | break; | 1302 | break; |
1303 | case IRQ_TYPE_LEVEL_HIGH: | 1303 | case IRQ_TYPE_LEVEL_HIGH: |
1304 | irq_set_handler(d->irq, handle_level_irq); | 1304 | __irq_set_handler_locked(d->irq, handle_level_irq); |
1305 | writel_relaxed(mask, pio + PIO_LSR); | 1305 | writel_relaxed(mask, pio + PIO_LSR); |
1306 | writel_relaxed(mask, pio + PIO_REHLSR); | 1306 | writel_relaxed(mask, pio + PIO_REHLSR); |
1307 | break; | 1307 | break; |
@@ -1310,7 +1310,7 @@ static int alt_gpio_irq_type(struct irq_data *d, unsigned type) | |||
1310 | * disable additional interrupt modes: | 1310 | * disable additional interrupt modes: |
1311 | * fall back to default behavior | 1311 | * fall back to default behavior |
1312 | */ | 1312 | */ |
1313 | irq_set_handler(d->irq, handle_simple_irq); | 1313 | __irq_set_handler_locked(d->irq, handle_simple_irq); |
1314 | writel_relaxed(mask, pio + PIO_AIMDR); | 1314 | writel_relaxed(mask, pio + PIO_AIMDR); |
1315 | return 0; | 1315 | return 0; |
1316 | case IRQ_TYPE_NONE: | 1316 | case IRQ_TYPE_NONE: |
diff --git a/drivers/pinctrl/pinctrl-capri.c b/drivers/pinctrl/pinctrl-capri.c index 4669c53f99b0..eb2500212147 100644 --- a/drivers/pinctrl/pinctrl-capri.c +++ b/drivers/pinctrl/pinctrl-capri.c | |||
@@ -1435,7 +1435,7 @@ int __init capri_pinctrl_probe(struct platform_device *pdev) | |||
1435 | } | 1435 | } |
1436 | 1436 | ||
1437 | static struct of_device_id capri_pinctrl_of_match[] = { | 1437 | static struct of_device_id capri_pinctrl_of_match[] = { |
1438 | { .compatible = "brcm,capri-pinctrl", }, | 1438 | { .compatible = "brcm,bcm11351-pinctrl", }, |
1439 | { }, | 1439 | { }, |
1440 | }; | 1440 | }; |
1441 | 1441 | ||
diff --git a/drivers/pinctrl/pinctrl-imx1-core.c b/drivers/pinctrl/pinctrl-imx1-core.c index 17aecde1b51d..815384b377b5 100644 --- a/drivers/pinctrl/pinctrl-imx1-core.c +++ b/drivers/pinctrl/pinctrl-imx1-core.c | |||
@@ -45,7 +45,7 @@ struct imx1_pinctrl { | |||
45 | #define MX1_DDIR 0x00 | 45 | #define MX1_DDIR 0x00 |
46 | #define MX1_OCR 0x04 | 46 | #define MX1_OCR 0x04 |
47 | #define MX1_ICONFA 0x0c | 47 | #define MX1_ICONFA 0x0c |
48 | #define MX1_ICONFB 0x10 | 48 | #define MX1_ICONFB 0x14 |
49 | #define MX1_GIUS 0x20 | 49 | #define MX1_GIUS 0x20 |
50 | #define MX1_GPR 0x38 | 50 | #define MX1_GPR 0x38 |
51 | #define MX1_PUEN 0x40 | 51 | #define MX1_PUEN 0x40 |
@@ -97,13 +97,13 @@ static void imx1_write_2bit(struct imx1_pinctrl *ipctl, unsigned int pin_id, | |||
97 | u32 old_val; | 97 | u32 old_val; |
98 | u32 new_val; | 98 | u32 new_val; |
99 | 99 | ||
100 | dev_dbg(ipctl->dev, "write: register 0x%p offset %d value 0x%x\n", | ||
101 | reg, offset, value); | ||
102 | |||
103 | /* Use the next register if the pin's port pin number is >=16 */ | 100 | /* Use the next register if the pin's port pin number is >=16 */ |
104 | if (pin_id % 32 >= 16) | 101 | if (pin_id % 32 >= 16) |
105 | reg += 0x04; | 102 | reg += 0x04; |
106 | 103 | ||
104 | dev_dbg(ipctl->dev, "write: register 0x%p offset %d value 0x%x\n", | ||
105 | reg, offset, value); | ||
106 | |||
107 | /* Get current state of pins */ | 107 | /* Get current state of pins */ |
108 | old_val = readl(reg); | 108 | old_val = readl(reg); |
109 | old_val &= mask; | 109 | old_val &= mask; |
@@ -139,7 +139,7 @@ static int imx1_read_2bit(struct imx1_pinctrl *ipctl, unsigned int pin_id, | |||
139 | u32 reg_offset) | 139 | u32 reg_offset) |
140 | { | 140 | { |
141 | void __iomem *reg = imx1_mem(ipctl, pin_id) + reg_offset; | 141 | void __iomem *reg = imx1_mem(ipctl, pin_id) + reg_offset; |
142 | int offset = pin_id % 16; | 142 | int offset = (pin_id % 16) * 2; |
143 | 143 | ||
144 | /* Use the next register if the pin's port pin number is >=16 */ | 144 | /* Use the next register if the pin's port pin number is >=16 */ |
145 | if (pin_id % 32 >= 16) | 145 | if (pin_id % 32 >= 16) |
diff --git a/drivers/pinctrl/pinctrl-sunxi.c b/drivers/pinctrl/pinctrl-sunxi.c index 9ccf681dad2f..f9fabe9bf47d 100644 --- a/drivers/pinctrl/pinctrl-sunxi.c +++ b/drivers/pinctrl/pinctrl-sunxi.c | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <linux/clk.h> | 14 | #include <linux/clk.h> |
15 | #include <linux/gpio.h> | 15 | #include <linux/gpio.h> |
16 | #include <linux/irqdomain.h> | 16 | #include <linux/irqdomain.h> |
17 | #include <linux/irqchip/chained_irq.h> | ||
17 | #include <linux/module.h> | 18 | #include <linux/module.h> |
18 | #include <linux/of.h> | 19 | #include <linux/of.h> |
19 | #include <linux/of_address.h> | 20 | #include <linux/of_address.h> |
@@ -584,7 +585,7 @@ static int sunxi_pinctrl_irq_set_type(struct irq_data *d, | |||
584 | spin_lock_irqsave(&pctl->lock, flags); | 585 | spin_lock_irqsave(&pctl->lock, flags); |
585 | 586 | ||
586 | regval = readl(pctl->membase + reg); | 587 | regval = readl(pctl->membase + reg); |
587 | regval &= ~IRQ_CFG_IRQ_MASK; | 588 | regval &= ~(IRQ_CFG_IRQ_MASK << index); |
588 | writel(regval | (mode << index), pctl->membase + reg); | 589 | writel(regval | (mode << index), pctl->membase + reg); |
589 | 590 | ||
590 | spin_unlock_irqrestore(&pctl->lock, flags); | 591 | spin_unlock_irqrestore(&pctl->lock, flags); |
@@ -665,6 +666,7 @@ static struct irq_chip sunxi_pinctrl_irq_chip = { | |||
665 | 666 | ||
666 | static void sunxi_pinctrl_irq_handler(unsigned irq, struct irq_desc *desc) | 667 | static void sunxi_pinctrl_irq_handler(unsigned irq, struct irq_desc *desc) |
667 | { | 668 | { |
669 | struct irq_chip *chip = irq_get_chip(irq); | ||
668 | struct sunxi_pinctrl *pctl = irq_get_handler_data(irq); | 670 | struct sunxi_pinctrl *pctl = irq_get_handler_data(irq); |
669 | const unsigned long reg = readl(pctl->membase + IRQ_STATUS_REG); | 671 | const unsigned long reg = readl(pctl->membase + IRQ_STATUS_REG); |
670 | 672 | ||
@@ -674,10 +676,12 @@ static void sunxi_pinctrl_irq_handler(unsigned irq, struct irq_desc *desc) | |||
674 | if (reg) { | 676 | if (reg) { |
675 | int irqoffset; | 677 | int irqoffset; |
676 | 678 | ||
679 | chained_irq_enter(chip, desc); | ||
677 | for_each_set_bit(irqoffset, ®, SUNXI_IRQ_NUMBER) { | 680 | for_each_set_bit(irqoffset, ®, SUNXI_IRQ_NUMBER) { |
678 | int pin_irq = irq_find_mapping(pctl->domain, irqoffset); | 681 | int pin_irq = irq_find_mapping(pctl->domain, irqoffset); |
679 | generic_handle_irq(pin_irq); | 682 | generic_handle_irq(pin_irq); |
680 | } | 683 | } |
684 | chained_irq_exit(chip, desc); | ||
681 | } | 685 | } |
682 | } | 686 | } |
683 | 687 | ||
diff --git a/drivers/pinctrl/pinctrl-sunxi.h b/drivers/pinctrl/pinctrl-sunxi.h index 01c494f8a14f..552b0e97077a 100644 --- a/drivers/pinctrl/pinctrl-sunxi.h +++ b/drivers/pinctrl/pinctrl-sunxi.h | |||
@@ -511,7 +511,7 @@ static inline u32 sunxi_pull_offset(u16 pin) | |||
511 | 511 | ||
512 | static inline u32 sunxi_irq_cfg_reg(u16 irq) | 512 | static inline u32 sunxi_irq_cfg_reg(u16 irq) |
513 | { | 513 | { |
514 | u8 reg = irq / IRQ_CFG_IRQ_PER_REG; | 514 | u8 reg = irq / IRQ_CFG_IRQ_PER_REG * 0x04; |
515 | return reg + IRQ_CFG_REG; | 515 | return reg + IRQ_CFG_REG; |
516 | } | 516 | } |
517 | 517 | ||
@@ -523,7 +523,7 @@ static inline u32 sunxi_irq_cfg_offset(u16 irq) | |||
523 | 523 | ||
524 | static inline u32 sunxi_irq_ctrl_reg(u16 irq) | 524 | static inline u32 sunxi_irq_ctrl_reg(u16 irq) |
525 | { | 525 | { |
526 | u8 reg = irq / IRQ_CTRL_IRQ_PER_REG; | 526 | u8 reg = irq / IRQ_CTRL_IRQ_PER_REG * 0x04; |
527 | return reg + IRQ_CTRL_REG; | 527 | return reg + IRQ_CTRL_REG; |
528 | } | 528 | } |
529 | 529 | ||
@@ -535,7 +535,7 @@ static inline u32 sunxi_irq_ctrl_offset(u16 irq) | |||
535 | 535 | ||
536 | static inline u32 sunxi_irq_status_reg(u16 irq) | 536 | static inline u32 sunxi_irq_status_reg(u16 irq) |
537 | { | 537 | { |
538 | u8 reg = irq / IRQ_STATUS_IRQ_PER_REG; | 538 | u8 reg = irq / IRQ_STATUS_IRQ_PER_REG * 0x04; |
539 | return reg + IRQ_STATUS_REG; | 539 | return reg + IRQ_STATUS_REG; |
540 | } | 540 | } |
541 | 541 | ||
diff --git a/drivers/pinctrl/pinctrl-tegra.c b/drivers/pinctrl/pinctrl-tegra.c index a2e93a2b5ff4..e767355ab0ad 100644 --- a/drivers/pinctrl/pinctrl-tegra.c +++ b/drivers/pinctrl/pinctrl-tegra.c | |||
@@ -645,7 +645,7 @@ int tegra_pinctrl_probe(struct platform_device *pdev, | |||
645 | GFP_KERNEL); | 645 | GFP_KERNEL); |
646 | if (!pmx->regs) { | 646 | if (!pmx->regs) { |
647 | dev_err(&pdev->dev, "Can't alloc regs pointer\n"); | 647 | dev_err(&pdev->dev, "Can't alloc regs pointer\n"); |
648 | return -ENODEV; | 648 | return -ENOMEM; |
649 | } | 649 | } |
650 | 650 | ||
651 | for (i = 0; i < pmx->nbanks; i++) { | 651 | for (i = 0; i < pmx->nbanks; i++) { |
diff --git a/drivers/pinctrl/sh-pfc/pfc-r8a7791.c b/drivers/pinctrl/sh-pfc/pfc-r8a7791.c index 77d103fe39d9..567d6918d50b 100644 --- a/drivers/pinctrl/sh-pfc/pfc-r8a7791.c +++ b/drivers/pinctrl/sh-pfc/pfc-r8a7791.c | |||
@@ -89,7 +89,8 @@ enum { | |||
89 | 89 | ||
90 | /* GPSR6 */ | 90 | /* GPSR6 */ |
91 | FN_IP13_10, FN_IP13_11, FN_IP13_12, FN_IP13_13, FN_IP13_14, | 91 | FN_IP13_10, FN_IP13_11, FN_IP13_12, FN_IP13_13, FN_IP13_14, |
92 | FN_IP13_15, FN_IP13_18_16, FN_IP13_21_19, FN_IP13_22, FN_IP13_24_23, | 92 | FN_IP13_15, FN_IP13_18_16, FN_IP13_21_19, |
93 | FN_IP13_22, FN_IP13_24_23, FN_SD1_CLK, | ||
93 | FN_IP13_25, FN_IP13_26, FN_IP13_27, FN_IP13_30_28, FN_IP14_1_0, | 94 | FN_IP13_25, FN_IP13_26, FN_IP13_27, FN_IP13_30_28, FN_IP14_1_0, |
94 | FN_IP14_2, FN_IP14_3, FN_IP14_4, FN_IP14_5, FN_IP14_6, FN_IP14_7, | 95 | FN_IP14_2, FN_IP14_3, FN_IP14_4, FN_IP14_5, FN_IP14_6, FN_IP14_7, |
95 | FN_IP14_10_8, FN_IP14_13_11, FN_IP14_16_14, FN_IP14_19_17, | 96 | FN_IP14_10_8, FN_IP14_13_11, FN_IP14_16_14, FN_IP14_19_17, |
@@ -788,6 +789,7 @@ static const u16 pinmux_data[] = { | |||
788 | PINMUX_DATA(USB1_PWEN_MARK, FN_USB1_PWEN), | 789 | PINMUX_DATA(USB1_PWEN_MARK, FN_USB1_PWEN), |
789 | PINMUX_DATA(USB1_OVC_MARK, FN_USB1_OVC), | 790 | PINMUX_DATA(USB1_OVC_MARK, FN_USB1_OVC), |
790 | PINMUX_DATA(DU0_DOTCLKIN_MARK, FN_DU0_DOTCLKIN), | 791 | PINMUX_DATA(DU0_DOTCLKIN_MARK, FN_DU0_DOTCLKIN), |
792 | PINMUX_DATA(SD1_CLK_MARK, FN_SD1_CLK), | ||
791 | 793 | ||
792 | /* IPSR0 */ | 794 | /* IPSR0 */ |
793 | PINMUX_IPSR_DATA(IP0_0, D0), | 795 | PINMUX_IPSR_DATA(IP0_0, D0), |
@@ -3825,7 +3827,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = { | |||
3825 | GP_6_11_FN, FN_IP13_25, | 3827 | GP_6_11_FN, FN_IP13_25, |
3826 | GP_6_10_FN, FN_IP13_24_23, | 3828 | GP_6_10_FN, FN_IP13_24_23, |
3827 | GP_6_9_FN, FN_IP13_22, | 3829 | GP_6_9_FN, FN_IP13_22, |
3828 | 0, 0, | 3830 | GP_6_8_FN, FN_SD1_CLK, |
3829 | GP_6_7_FN, FN_IP13_21_19, | 3831 | GP_6_7_FN, FN_IP13_21_19, |
3830 | GP_6_6_FN, FN_IP13_18_16, | 3832 | GP_6_6_FN, FN_IP13_18_16, |
3831 | GP_6_5_FN, FN_IP13_15, | 3833 | GP_6_5_FN, FN_IP13_15, |
diff --git a/drivers/pinctrl/sirf/pinctrl-prima2.c b/drivers/pinctrl/sirf/pinctrl-prima2.c index 37b42651d76a..dde0285544d6 100644 --- a/drivers/pinctrl/sirf/pinctrl-prima2.c +++ b/drivers/pinctrl/sirf/pinctrl-prima2.c | |||
@@ -413,7 +413,7 @@ static const struct sirfsoc_padmux ac97_padmux = { | |||
413 | .funcval = 0, | 413 | .funcval = 0, |
414 | }; | 414 | }; |
415 | 415 | ||
416 | static const unsigned ac97_pins[] = { 33, 34, 35, 36 }; | 416 | static const unsigned ac97_pins[] = { 43, 44, 45, 46 }; |
417 | 417 | ||
418 | static const struct sirfsoc_muxmask spi1_muxmask[] = { | 418 | static const struct sirfsoc_muxmask spi1_muxmask[] = { |
419 | { | 419 | { |
diff --git a/drivers/pinctrl/sirf/pinctrl-sirf.c b/drivers/pinctrl/sirf/pinctrl-sirf.c index a0d6152701cd..617a4916b50f 100644 --- a/drivers/pinctrl/sirf/pinctrl-sirf.c +++ b/drivers/pinctrl/sirf/pinctrl-sirf.c | |||
@@ -598,7 +598,7 @@ static unsigned int sirfsoc_gpio_irq_startup(struct irq_data *d) | |||
598 | { | 598 | { |
599 | struct sirfsoc_gpio_bank *bank = irq_data_get_irq_chip_data(d); | 599 | struct sirfsoc_gpio_bank *bank = irq_data_get_irq_chip_data(d); |
600 | 600 | ||
601 | if (gpio_lock_as_irq(&bank->chip.gc, d->hwirq)) | 601 | if (gpio_lock_as_irq(&bank->chip.gc, d->hwirq % SIRFSOC_GPIO_BANK_SIZE)) |
602 | dev_err(bank->chip.gc.dev, | 602 | dev_err(bank->chip.gc.dev, |
603 | "unable to lock HW IRQ %lu for IRQ\n", | 603 | "unable to lock HW IRQ %lu for IRQ\n", |
604 | d->hwirq); | 604 | d->hwirq); |
@@ -611,7 +611,7 @@ static void sirfsoc_gpio_irq_shutdown(struct irq_data *d) | |||
611 | struct sirfsoc_gpio_bank *bank = irq_data_get_irq_chip_data(d); | 611 | struct sirfsoc_gpio_bank *bank = irq_data_get_irq_chip_data(d); |
612 | 612 | ||
613 | sirfsoc_gpio_irq_mask(d); | 613 | sirfsoc_gpio_irq_mask(d); |
614 | gpio_unlock_as_irq(&bank->chip.gc, d->hwirq); | 614 | gpio_unlock_as_irq(&bank->chip.gc, d->hwirq % SIRFSOC_GPIO_BANK_SIZE); |
615 | } | 615 | } |
616 | 616 | ||
617 | static struct irq_chip sirfsoc_irq_chip = { | 617 | static struct irq_chip sirfsoc_irq_chip = { |
diff --git a/drivers/pinctrl/vt8500/pinctrl-wmt.c b/drivers/pinctrl/vt8500/pinctrl-wmt.c index b28d1af9c232..9802b67040cc 100644 --- a/drivers/pinctrl/vt8500/pinctrl-wmt.c +++ b/drivers/pinctrl/vt8500/pinctrl-wmt.c | |||
@@ -276,7 +276,20 @@ static int wmt_pctl_dt_node_to_map_pull(struct wmt_pinctrl_data *data, | |||
276 | if (!configs) | 276 | if (!configs) |
277 | return -ENOMEM; | 277 | return -ENOMEM; |
278 | 278 | ||
279 | configs[0] = pull; | 279 | switch (pull) { |
280 | case 0: | ||
281 | configs[0] = PIN_CONFIG_BIAS_DISABLE; | ||
282 | break; | ||
283 | case 1: | ||
284 | configs[0] = PIN_CONFIG_BIAS_PULL_DOWN; | ||
285 | break; | ||
286 | case 2: | ||
287 | configs[0] = PIN_CONFIG_BIAS_PULL_UP; | ||
288 | break; | ||
289 | default: | ||
290 | configs[0] = PIN_CONFIG_BIAS_DISABLE; | ||
291 | dev_err(data->dev, "invalid pull state %d - disabling\n", pull); | ||
292 | } | ||
280 | 293 | ||
281 | map->type = PIN_MAP_TYPE_CONFIGS_PIN; | 294 | map->type = PIN_MAP_TYPE_CONFIGS_PIN; |
282 | map->data.configs.group_or_pin = data->groups[group]; | 295 | map->data.configs.group_or_pin = data->groups[group]; |