Loading drivers/pinctrl/pinctrl-msm.c +26 −50 Original line number Original line Diff line number Diff line Loading @@ -57,7 +57,7 @@ struct msm_pinctrl { struct pinctrl_dev *pctrl; struct pinctrl_dev *pctrl; struct irq_domain *domain; struct irq_domain *domain; struct gpio_chip chip; struct gpio_chip chip; unsigned irq; int irq; spinlock_t lock; spinlock_t lock; Loading Loading @@ -201,7 +201,7 @@ static const struct pinmux_ops msm_pinmux_ops = { static int msm_config_reg(struct msm_pinctrl *pctrl, static int msm_config_reg(struct msm_pinctrl *pctrl, const struct msm_pingroup *g, const struct msm_pingroup *g, unsigned param, unsigned param, unsigned *reg, s16 *reg, unsigned *mask, unsigned *mask, unsigned *bit) unsigned *bit) { { Loading Loading @@ -272,7 +272,7 @@ static int msm_config_group_get(struct pinctrl_dev *pctldev, unsigned mask; unsigned mask; unsigned arg; unsigned arg; unsigned bit; unsigned bit; unsigned reg; s16 reg; int ret; int ret; u32 val; u32 val; Loading Loading @@ -322,7 +322,7 @@ static int msm_config_group_set(struct pinctrl_dev *pctldev, unsigned mask; unsigned mask; unsigned arg; unsigned arg; unsigned bit; unsigned bit; unsigned reg; s16 reg; int ret; int ret; u32 val; u32 val; int i; int i; Loading Loading @@ -350,7 +350,7 @@ static int msm_config_group_set(struct pinctrl_dev *pctldev, break; break; case PIN_CONFIG_DRIVE_STRENGTH: case PIN_CONFIG_DRIVE_STRENGTH: /* Check for invalid values */ /* Check for invalid values */ if (arg > ARRAY_SIZE(msm_drive_to_regval)) if (arg >= ARRAY_SIZE(msm_drive_to_regval)) arg = -1; arg = -1; else else arg = msm_drive_to_regval[arg]; arg = msm_drive_to_regval[arg]; Loading Loading @@ -399,12 +399,8 @@ static int msm_gpio_direction_input(struct gpio_chip *chip, unsigned offset) unsigned long flags; unsigned long flags; u32 val; u32 val; if (WARN_ON(offset >= pctrl->soc->ngroups)) return -EINVAL; g = &pctrl->soc->groups[offset]; g = &pctrl->soc->groups[offset]; if (WARN_ON(g->io_reg < 0)) if (WARN_ON(g->oe_bit < 0)) return -EINVAL; return -EINVAL; spin_lock_irqsave(&pctrl->lock, flags); spin_lock_irqsave(&pctrl->lock, flags); Loading @@ -425,12 +421,8 @@ static int msm_gpio_direction_output(struct gpio_chip *chip, unsigned offset, in unsigned long flags; unsigned long flags; u32 val; u32 val; if (WARN_ON(offset >= pctrl->soc->ngroups)) return -EINVAL; g = &pctrl->soc->groups[offset]; g = &pctrl->soc->groups[offset]; if (WARN_ON(g->io_reg < 0)) if (WARN_ON(g->oe_bit < 0)) return -EINVAL; return -EINVAL; spin_lock_irqsave(&pctrl->lock, flags); spin_lock_irqsave(&pctrl->lock, flags); Loading @@ -452,10 +444,9 @@ static int msm_gpio_get(struct gpio_chip *chip, unsigned offset) struct msm_pinctrl *pctrl = container_of(chip, struct msm_pinctrl, chip); struct msm_pinctrl *pctrl = container_of(chip, struct msm_pinctrl, chip); u32 val; u32 val; if (WARN_ON(offset >= pctrl->soc->ngroups)) return -EINVAL; g = &pctrl->soc->groups[offset]; g = &pctrl->soc->groups[offset]; if (WARN_ON(g->io_reg < 0)) return -EINVAL; val = readl(pctrl->regs + g->io_reg); val = readl(pctrl->regs + g->io_reg); return !!(val & BIT(g->in_bit)); return !!(val & BIT(g->in_bit)); Loading @@ -468,10 +459,9 @@ static void msm_gpio_set(struct gpio_chip *chip, unsigned offset, int value) unsigned long flags; unsigned long flags; u32 val; u32 val; if (WARN_ON(offset >= pctrl->soc->ngroups)) return; g = &pctrl->soc->groups[offset]; g = &pctrl->soc->groups[offset]; if (WARN_ON(g->io_reg < 0)) return; spin_lock_irqsave(&pctrl->lock, flags); spin_lock_irqsave(&pctrl->lock, flags); Loading Loading @@ -616,13 +606,9 @@ static void msm_gpio_irq_mask(struct irq_data *d) u32 val; u32 val; pctrl = irq_data_get_irq_chip_data(d); pctrl = irq_data_get_irq_chip_data(d); if (!pctrl) return; if (WARN_ON(d->hwirq >= pctrl->soc->ngroups)) return; g = &pctrl->soc->groups[d->hwirq]; g = &pctrl->soc->groups[d->hwirq]; if (WARN_ON(g->intr_cfg_reg < 0)) return; spin_lock_irqsave(&pctrl->lock, flags); spin_lock_irqsave(&pctrl->lock, flags); Loading @@ -643,13 +629,9 @@ static void msm_gpio_irq_unmask(struct irq_data *d) u32 val; u32 val; pctrl = irq_data_get_irq_chip_data(d); pctrl = irq_data_get_irq_chip_data(d); if (!pctrl) return; if (WARN_ON(d->hwirq >= pctrl->soc->ngroups)) return; g = &pctrl->soc->groups[d->hwirq]; g = &pctrl->soc->groups[d->hwirq]; if (WARN_ON(g->intr_status_reg < 0)) return; spin_lock_irqsave(&pctrl->lock, flags); spin_lock_irqsave(&pctrl->lock, flags); Loading @@ -674,13 +656,9 @@ static void msm_gpio_irq_ack(struct irq_data *d) u32 val; u32 val; pctrl = irq_data_get_irq_chip_data(d); pctrl = irq_data_get_irq_chip_data(d); if (!pctrl) return; if (WARN_ON(d->hwirq >= pctrl->soc->ngroups)) return; g = &pctrl->soc->groups[d->hwirq]; g = &pctrl->soc->groups[d->hwirq]; if (WARN_ON(g->intr_status_reg < 0)) return; spin_lock_irqsave(&pctrl->lock, flags); spin_lock_irqsave(&pctrl->lock, flags); Loading @@ -704,13 +682,9 @@ static int msm_gpio_irq_set_type(struct irq_data *d, unsigned int type) u32 val; u32 val; pctrl = irq_data_get_irq_chip_data(d); pctrl = irq_data_get_irq_chip_data(d); if (!pctrl) return -EINVAL; if (WARN_ON(d->hwirq >= pctrl->soc->ngroups)) return -EINVAL; g = &pctrl->soc->groups[d->hwirq]; g = &pctrl->soc->groups[d->hwirq]; if (WARN_ON(g->intr_cfg_reg < 0)) return -EINVAL; spin_lock_irqsave(&pctrl->lock, flags); spin_lock_irqsave(&pctrl->lock, flags); Loading Loading @@ -802,9 +776,6 @@ static int msm_gpio_irq_set_wake(struct irq_data *d, unsigned int on) unsigned ngpio; unsigned ngpio; pctrl = irq_data_get_irq_chip_data(d); pctrl = irq_data_get_irq_chip_data(d); if (!pctrl) return -EINVAL; ngpio = pctrl->chip.ngpio; ngpio = pctrl->chip.ngpio; spin_lock_irqsave(&pctrl->lock, flags); spin_lock_irqsave(&pctrl->lock, flags); Loading Loading @@ -983,7 +954,7 @@ int msm_pinctrl_probe(struct platform_device *pdev, if (IS_ERR(pctrl->regs)) if (IS_ERR(pctrl->regs)) return PTR_ERR(pctrl->regs); return PTR_ERR(pctrl->regs); pctrl->irq = irq_of_parse_and_map(pdev->dev.of_node, 0); pctrl->irq = platform_get_irq(pdev, 0); if (pctrl->irq < 0) { if (pctrl->irq < 0) { dev_err(&pdev->dev, "No interrupt defined for msmgpio\n"); dev_err(&pdev->dev, "No interrupt defined for msmgpio\n"); return pctrl->irq; return pctrl->irq; Loading Loading @@ -1017,9 +988,14 @@ int msm_pinctrl_remove(struct platform_device *pdev) struct msm_pinctrl *pctrl = platform_get_drvdata(pdev); struct msm_pinctrl *pctrl = platform_get_drvdata(pdev); int ret; int ret; ret = gpiochip_remove(&pctrl->chip); if (ret) { dev_err(&pdev->dev, "Failed to remove gpiochip\n"); return ret; } irq_set_chained_handler(pctrl->irq, NULL); irq_set_chained_handler(pctrl->irq, NULL); irq_domain_remove(pctrl->domain); irq_domain_remove(pctrl->domain); ret = gpiochip_remove(&pctrl->chip); pinctrl_unregister(pctrl->pctrl); pinctrl_unregister(pctrl->pctrl); return 0; return 0; Loading Loading
drivers/pinctrl/pinctrl-msm.c +26 −50 Original line number Original line Diff line number Diff line Loading @@ -57,7 +57,7 @@ struct msm_pinctrl { struct pinctrl_dev *pctrl; struct pinctrl_dev *pctrl; struct irq_domain *domain; struct irq_domain *domain; struct gpio_chip chip; struct gpio_chip chip; unsigned irq; int irq; spinlock_t lock; spinlock_t lock; Loading Loading @@ -201,7 +201,7 @@ static const struct pinmux_ops msm_pinmux_ops = { static int msm_config_reg(struct msm_pinctrl *pctrl, static int msm_config_reg(struct msm_pinctrl *pctrl, const struct msm_pingroup *g, const struct msm_pingroup *g, unsigned param, unsigned param, unsigned *reg, s16 *reg, unsigned *mask, unsigned *mask, unsigned *bit) unsigned *bit) { { Loading Loading @@ -272,7 +272,7 @@ static int msm_config_group_get(struct pinctrl_dev *pctldev, unsigned mask; unsigned mask; unsigned arg; unsigned arg; unsigned bit; unsigned bit; unsigned reg; s16 reg; int ret; int ret; u32 val; u32 val; Loading Loading @@ -322,7 +322,7 @@ static int msm_config_group_set(struct pinctrl_dev *pctldev, unsigned mask; unsigned mask; unsigned arg; unsigned arg; unsigned bit; unsigned bit; unsigned reg; s16 reg; int ret; int ret; u32 val; u32 val; int i; int i; Loading Loading @@ -350,7 +350,7 @@ static int msm_config_group_set(struct pinctrl_dev *pctldev, break; break; case PIN_CONFIG_DRIVE_STRENGTH: case PIN_CONFIG_DRIVE_STRENGTH: /* Check for invalid values */ /* Check for invalid values */ if (arg > ARRAY_SIZE(msm_drive_to_regval)) if (arg >= ARRAY_SIZE(msm_drive_to_regval)) arg = -1; arg = -1; else else arg = msm_drive_to_regval[arg]; arg = msm_drive_to_regval[arg]; Loading Loading @@ -399,12 +399,8 @@ static int msm_gpio_direction_input(struct gpio_chip *chip, unsigned offset) unsigned long flags; unsigned long flags; u32 val; u32 val; if (WARN_ON(offset >= pctrl->soc->ngroups)) return -EINVAL; g = &pctrl->soc->groups[offset]; g = &pctrl->soc->groups[offset]; if (WARN_ON(g->io_reg < 0)) if (WARN_ON(g->oe_bit < 0)) return -EINVAL; return -EINVAL; spin_lock_irqsave(&pctrl->lock, flags); spin_lock_irqsave(&pctrl->lock, flags); Loading @@ -425,12 +421,8 @@ static int msm_gpio_direction_output(struct gpio_chip *chip, unsigned offset, in unsigned long flags; unsigned long flags; u32 val; u32 val; if (WARN_ON(offset >= pctrl->soc->ngroups)) return -EINVAL; g = &pctrl->soc->groups[offset]; g = &pctrl->soc->groups[offset]; if (WARN_ON(g->io_reg < 0)) if (WARN_ON(g->oe_bit < 0)) return -EINVAL; return -EINVAL; spin_lock_irqsave(&pctrl->lock, flags); spin_lock_irqsave(&pctrl->lock, flags); Loading @@ -452,10 +444,9 @@ static int msm_gpio_get(struct gpio_chip *chip, unsigned offset) struct msm_pinctrl *pctrl = container_of(chip, struct msm_pinctrl, chip); struct msm_pinctrl *pctrl = container_of(chip, struct msm_pinctrl, chip); u32 val; u32 val; if (WARN_ON(offset >= pctrl->soc->ngroups)) return -EINVAL; g = &pctrl->soc->groups[offset]; g = &pctrl->soc->groups[offset]; if (WARN_ON(g->io_reg < 0)) return -EINVAL; val = readl(pctrl->regs + g->io_reg); val = readl(pctrl->regs + g->io_reg); return !!(val & BIT(g->in_bit)); return !!(val & BIT(g->in_bit)); Loading @@ -468,10 +459,9 @@ static void msm_gpio_set(struct gpio_chip *chip, unsigned offset, int value) unsigned long flags; unsigned long flags; u32 val; u32 val; if (WARN_ON(offset >= pctrl->soc->ngroups)) return; g = &pctrl->soc->groups[offset]; g = &pctrl->soc->groups[offset]; if (WARN_ON(g->io_reg < 0)) return; spin_lock_irqsave(&pctrl->lock, flags); spin_lock_irqsave(&pctrl->lock, flags); Loading Loading @@ -616,13 +606,9 @@ static void msm_gpio_irq_mask(struct irq_data *d) u32 val; u32 val; pctrl = irq_data_get_irq_chip_data(d); pctrl = irq_data_get_irq_chip_data(d); if (!pctrl) return; if (WARN_ON(d->hwirq >= pctrl->soc->ngroups)) return; g = &pctrl->soc->groups[d->hwirq]; g = &pctrl->soc->groups[d->hwirq]; if (WARN_ON(g->intr_cfg_reg < 0)) return; spin_lock_irqsave(&pctrl->lock, flags); spin_lock_irqsave(&pctrl->lock, flags); Loading @@ -643,13 +629,9 @@ static void msm_gpio_irq_unmask(struct irq_data *d) u32 val; u32 val; pctrl = irq_data_get_irq_chip_data(d); pctrl = irq_data_get_irq_chip_data(d); if (!pctrl) return; if (WARN_ON(d->hwirq >= pctrl->soc->ngroups)) return; g = &pctrl->soc->groups[d->hwirq]; g = &pctrl->soc->groups[d->hwirq]; if (WARN_ON(g->intr_status_reg < 0)) return; spin_lock_irqsave(&pctrl->lock, flags); spin_lock_irqsave(&pctrl->lock, flags); Loading @@ -674,13 +656,9 @@ static void msm_gpio_irq_ack(struct irq_data *d) u32 val; u32 val; pctrl = irq_data_get_irq_chip_data(d); pctrl = irq_data_get_irq_chip_data(d); if (!pctrl) return; if (WARN_ON(d->hwirq >= pctrl->soc->ngroups)) return; g = &pctrl->soc->groups[d->hwirq]; g = &pctrl->soc->groups[d->hwirq]; if (WARN_ON(g->intr_status_reg < 0)) return; spin_lock_irqsave(&pctrl->lock, flags); spin_lock_irqsave(&pctrl->lock, flags); Loading @@ -704,13 +682,9 @@ static int msm_gpio_irq_set_type(struct irq_data *d, unsigned int type) u32 val; u32 val; pctrl = irq_data_get_irq_chip_data(d); pctrl = irq_data_get_irq_chip_data(d); if (!pctrl) return -EINVAL; if (WARN_ON(d->hwirq >= pctrl->soc->ngroups)) return -EINVAL; g = &pctrl->soc->groups[d->hwirq]; g = &pctrl->soc->groups[d->hwirq]; if (WARN_ON(g->intr_cfg_reg < 0)) return -EINVAL; spin_lock_irqsave(&pctrl->lock, flags); spin_lock_irqsave(&pctrl->lock, flags); Loading Loading @@ -802,9 +776,6 @@ static int msm_gpio_irq_set_wake(struct irq_data *d, unsigned int on) unsigned ngpio; unsigned ngpio; pctrl = irq_data_get_irq_chip_data(d); pctrl = irq_data_get_irq_chip_data(d); if (!pctrl) return -EINVAL; ngpio = pctrl->chip.ngpio; ngpio = pctrl->chip.ngpio; spin_lock_irqsave(&pctrl->lock, flags); spin_lock_irqsave(&pctrl->lock, flags); Loading Loading @@ -983,7 +954,7 @@ int msm_pinctrl_probe(struct platform_device *pdev, if (IS_ERR(pctrl->regs)) if (IS_ERR(pctrl->regs)) return PTR_ERR(pctrl->regs); return PTR_ERR(pctrl->regs); pctrl->irq = irq_of_parse_and_map(pdev->dev.of_node, 0); pctrl->irq = platform_get_irq(pdev, 0); if (pctrl->irq < 0) { if (pctrl->irq < 0) { dev_err(&pdev->dev, "No interrupt defined for msmgpio\n"); dev_err(&pdev->dev, "No interrupt defined for msmgpio\n"); return pctrl->irq; return pctrl->irq; Loading Loading @@ -1017,9 +988,14 @@ int msm_pinctrl_remove(struct platform_device *pdev) struct msm_pinctrl *pctrl = platform_get_drvdata(pdev); struct msm_pinctrl *pctrl = platform_get_drvdata(pdev); int ret; int ret; ret = gpiochip_remove(&pctrl->chip); if (ret) { dev_err(&pdev->dev, "Failed to remove gpiochip\n"); return ret; } irq_set_chained_handler(pctrl->irq, NULL); irq_set_chained_handler(pctrl->irq, NULL); irq_domain_remove(pctrl->domain); irq_domain_remove(pctrl->domain); ret = gpiochip_remove(&pctrl->chip); pinctrl_unregister(pctrl->pctrl); pinctrl_unregister(pctrl->pctrl); return 0; return 0; Loading