diff options
| -rw-r--r-- | drivers/pinctrl/pinctrl-rockchip.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-rockchip.c index df155f9b2432..efca1165e955 100644 --- a/drivers/pinctrl/pinctrl-rockchip.c +++ b/drivers/pinctrl/pinctrl-rockchip.c | |||
| @@ -62,6 +62,10 @@ enum rockchip_pinctrl_type { | |||
| 62 | RK3188, | 62 | RK3188, |
| 63 | }; | 63 | }; |
| 64 | 64 | ||
| 65 | enum rockchip_pin_bank_type { | ||
| 66 | COMMON_BANK, | ||
| 67 | }; | ||
| 68 | |||
| 65 | /** | 69 | /** |
| 66 | * @reg_base: register base of the gpio bank | 70 | * @reg_base: register base of the gpio bank |
| 67 | * @clk: clock of the gpio bank | 71 | * @clk: clock of the gpio bank |
| @@ -86,6 +90,7 @@ struct rockchip_pin_bank { | |||
| 86 | u8 nr_pins; | 90 | u8 nr_pins; |
| 87 | char *name; | 91 | char *name; |
| 88 | u8 bank_num; | 92 | u8 bank_num; |
| 93 | enum rockchip_pin_bank_type bank_type; | ||
| 89 | bool valid; | 94 | bool valid; |
| 90 | struct device_node *of_node; | 95 | struct device_node *of_node; |
| 91 | struct rockchip_pinctrl *drvdata; | 96 | struct rockchip_pinctrl *drvdata; |
| @@ -668,7 +673,10 @@ static const struct pinconf_ops rockchip_pinconf_ops = { | |||
| 668 | .pin_config_set = rockchip_pinconf_set, | 673 | .pin_config_set = rockchip_pinconf_set, |
| 669 | }; | 674 | }; |
| 670 | 675 | ||
| 671 | static const char *gpio_compat = "rockchip,gpio-bank"; | 676 | static const struct of_device_id rockchip_bank_match[] = { |
| 677 | { .compatible = "rockchip,gpio-bank" }, | ||
| 678 | {}, | ||
| 679 | }; | ||
| 672 | 680 | ||
| 673 | static void rockchip_pinctrl_child_count(struct rockchip_pinctrl *info, | 681 | static void rockchip_pinctrl_child_count(struct rockchip_pinctrl *info, |
| 674 | struct device_node *np) | 682 | struct device_node *np) |
| @@ -676,7 +684,7 @@ static void rockchip_pinctrl_child_count(struct rockchip_pinctrl *info, | |||
| 676 | struct device_node *child; | 684 | struct device_node *child; |
| 677 | 685 | ||
| 678 | for_each_child_of_node(np, child) { | 686 | for_each_child_of_node(np, child) { |
| 679 | if (of_device_is_compatible(child, gpio_compat)) | 687 | if (of_match_node(rockchip_bank_match, child)) |
| 680 | continue; | 688 | continue; |
| 681 | 689 | ||
| 682 | info->nfunctions++; | 690 | info->nfunctions++; |
| @@ -819,8 +827,9 @@ static int rockchip_pinctrl_parse_dt(struct platform_device *pdev, | |||
| 819 | i = 0; | 827 | i = 0; |
| 820 | 828 | ||
| 821 | for_each_child_of_node(np, child) { | 829 | for_each_child_of_node(np, child) { |
| 822 | if (of_device_is_compatible(child, gpio_compat)) | 830 | if (of_match_node(rockchip_bank_match, child)) |
| 823 | continue; | 831 | continue; |
| 832 | |||
| 824 | ret = rockchip_pinctrl_parse_functions(child, info, i++); | 833 | ret = rockchip_pinctrl_parse_functions(child, info, i++); |
| 825 | if (ret) { | 834 | if (ret) { |
| 826 | dev_err(&pdev->dev, "failed to parse function\n"); | 835 | dev_err(&pdev->dev, "failed to parse function\n"); |
| @@ -1217,6 +1226,8 @@ static int rockchip_get_bank_data(struct rockchip_pin_bank *bank, | |||
| 1217 | if (IS_ERR(bank->reg_base)) | 1226 | if (IS_ERR(bank->reg_base)) |
| 1218 | return PTR_ERR(bank->reg_base); | 1227 | return PTR_ERR(bank->reg_base); |
| 1219 | 1228 | ||
| 1229 | bank->bank_type = COMMON_BANK; | ||
| 1230 | |||
| 1220 | bank->irq = irq_of_parse_and_map(bank->of_node, 0); | 1231 | bank->irq = irq_of_parse_and_map(bank->of_node, 0); |
| 1221 | 1232 | ||
| 1222 | bank->clk = of_clk_get(bank->of_node, 0); | 1233 | bank->clk = of_clk_get(bank->of_node, 0); |
