diff options
| -rw-r--r-- | drivers/pinctrl/qcom/pinctrl-msm.c | 27 | 
1 files changed, 13 insertions, 14 deletions
diff --git a/drivers/pinctrl/qcom/pinctrl-msm.c b/drivers/pinctrl/qcom/pinctrl-msm.c index 7f35c196bb3e..73062e329f6f 100644 --- a/drivers/pinctrl/qcom/pinctrl-msm.c +++ b/drivers/pinctrl/qcom/pinctrl-msm.c @@ -1002,6 +1002,7 @@ static bool msm_gpio_needs_valid_mask(struct msm_pinctrl *pctrl)  static int msm_gpio_init(struct msm_pinctrl *pctrl)  {  	struct gpio_chip *chip; +	struct gpio_irq_chip *girq;  	int ret;  	unsigned ngpio = pctrl->soc->ngpios; @@ -1027,6 +1028,18 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl)  	pctrl->irq_chip.irq_request_resources = msm_gpio_irq_reqres;  	pctrl->irq_chip.irq_release_resources = msm_gpio_irq_relres; +	girq = &chip->irq; +	girq->chip = &pctrl->irq_chip; +	girq->parent_handler = msm_gpio_irq_handler; +	girq->num_parents = 1; +	girq->parents = devm_kcalloc(pctrl->dev, 1, sizeof(*girq->parents), +				     GFP_KERNEL); +	if (!girq->parents) +		return -ENOMEM; +	girq->default_type = IRQ_TYPE_NONE; +	girq->handler = handle_bad_irq; +	girq->parents[0] = pctrl->irq; +  	ret = gpiochip_add_data(&pctrl->chip, pctrl);  	if (ret) {  		dev_err(pctrl->dev, "Failed register gpiochip\n"); @@ -1053,20 +1066,6 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl)  		}  	} -	ret = gpiochip_irqchip_add(chip, -				   &pctrl->irq_chip, -				   0, -				   handle_edge_irq, -				   IRQ_TYPE_NONE); -	if (ret) { -		dev_err(pctrl->dev, "Failed to add irqchip to gpiochip\n"); -		gpiochip_remove(&pctrl->chip); -		return -ENOSYS; -	} - -	gpiochip_set_chained_irqchip(chip, &pctrl->irq_chip, pctrl->irq, -				     msm_gpio_irq_handler); -  	return 0;  }  | 
