|
|
@@ -663,28 +663,20 @@ int mvebu_pinctrl_probe(struct platform_device *pdev)
|
|
|
/* assign mpp modes to groups */
|
|
|
for (n = 0; n < soc->nmodes; n++) {
|
|
|
struct mvebu_mpp_mode *mode = &soc->modes[n];
|
|
|
- struct mvebu_pinctrl_group *grp =
|
|
|
- mvebu_pinctrl_find_group_by_pid(pctl, mode->pid);
|
|
|
+ struct mvebu_mpp_ctrl_setting *set = &mode->settings[0];
|
|
|
+ struct mvebu_pinctrl_group *grp;
|
|
|
unsigned num_settings;
|
|
|
|
|
|
- if (!grp) {
|
|
|
- dev_warn(&pdev->dev, "unknown pinctrl group %d\n",
|
|
|
- mode->pid);
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- for (num_settings = 0; ;) {
|
|
|
- struct mvebu_mpp_ctrl_setting *set =
|
|
|
- &mode->settings[num_settings];
|
|
|
-
|
|
|
+ for (num_settings = 0; ; set++) {
|
|
|
if (!set->name)
|
|
|
break;
|
|
|
- num_settings++;
|
|
|
|
|
|
/* skip unsupported settings for this variant */
|
|
|
if (pctl->variant && !(pctl->variant & set->variant))
|
|
|
continue;
|
|
|
|
|
|
+ num_settings++;
|
|
|
+
|
|
|
/* find gpio/gpo/gpi settings */
|
|
|
if (strcmp(set->name, "gpio") == 0)
|
|
|
set->flags = MVEBU_SETTING_GPI |
|
|
|
@@ -695,6 +687,17 @@ int mvebu_pinctrl_probe(struct platform_device *pdev)
|
|
|
set->flags = MVEBU_SETTING_GPI;
|
|
|
}
|
|
|
|
|
|
+ /* skip modes with no settings for this variant */
|
|
|
+ if (!num_settings)
|
|
|
+ continue;
|
|
|
+
|
|
|
+ grp = mvebu_pinctrl_find_group_by_pid(pctl, mode->pid);
|
|
|
+ if (!grp) {
|
|
|
+ dev_warn(&pdev->dev, "unknown pinctrl group %d\n",
|
|
|
+ mode->pid);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
grp->settings = mode->settings;
|
|
|
grp->num_settings = num_settings;
|
|
|
}
|