Calling pinctrl_register() means that the driver is fully initialized and might accept pinmux/pinconf requests, so pin groups must be parsed before. This patch fixes this problem by moving device tree parsing before call to pinctrl_register(). In addition, this fixes support for hogs on pin controllers handled by pinctrl-samsung driver.
Unified · Split
| @@ -767,6 +767,10 @@ static int samsung_pinctrl_register(struct platform_device *pdev, · 766 unmodified lines | |||
| 767 | } | 767 | } |
| 768 | } | 768 | } |
| 769 | 769 | ||
| 770 | ret = samsung_pinctrl_parse_dt(pdev, drvdata); | ||
| 771 | if (ret) | ||
| 772 | return ret; | ||
| 773 | |||
| 770 | drvdata->pctl_dev = pinctrl_register(ctrldesc, &pdev->dev, drvdata); | 774 | drvdata->pctl_dev = pinctrl_register(ctrldesc, &pdev->dev, drvdata); |
| 771 | if (!drvdata->pctl_dev) { | 775 | if (!drvdata->pctl_dev) { |
| 772 | dev_err(&pdev->dev, "could not register pinctrl driver\n"); | 776 | dev_err(&pdev->dev, "could not register pinctrl driver\n"); |
| @@ -784,12 +788,6 @@ static int samsung_pinctrl_register(struct platform_device *pdev, · 11 unmodified lines | |||
| 784 | pinctrl_add_gpio_range(drvdata->pctl_dev, &pin_bank->grange); | 788 | pinctrl_add_gpio_range(drvdata->pctl_dev, &pin_bank->grange); |
| 785 | } | 789 | } |
| 786 | 790 | ||
| 787 | ret = samsung_pinctrl_parse_dt(pdev, drvdata); | ||
| 788 | if (ret) { | ||
| 789 | pinctrl_unregister(drvdata->pctl_dev); | ||
| 790 | return ret; | ||
| 791 | } | ||
| 792 | |||
| 793 | return 0; | 791 | return 0; |
| 794 | } | 792 | } |
| 795 | 793 | ||