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 | 774 | drvdata->pctl_dev = pinctrl_register(ctrldesc, &pdev->dev, drvdata); |
| 771 | 775 | if (!drvdata->pctl_dev) { |
| 772 | 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 | 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 | 791 | return 0; |
| 794 | 792 | } |
| 795 | 793 | |