Loading Documentation/devicetree/bindings/pinctrl/meson,pinctrl.txt +5 −5 Original line number Diff line number Diff line Loading @@ -23,11 +23,11 @@ The GPIO bank for the controller is represented as a sub-node and it acts as a GPIO controller. Required properties for sub-nodes are: - reg: should contain address and size for mux, pull-enable, pull and gpio register sets - reg-names: an array of strings describing the "reg" entries. Must contain "mux", "pull" and "gpio". "pull-enable" is optional and when it is missing the "pull" registers are used instead - reg: should contain a list of address and size, one tuple for each entry in reg-names. - reg-names: an array of strings describing the "reg" entries. Must contain "mux" and "gpio". May contain "pull", "pull-enable" and "ds" when appropriate. - gpio-controller: identifies the node as a gpio controller - #gpio-cells: must be 2 Loading drivers/pinctrl/meson/pinctrl-meson.c +16 −8 Original line number Diff line number Diff line Loading @@ -31,6 +31,9 @@ * In some cases the register ranges for pull enable and pull * direction are the same and thus there are only 3 register ranges. * * Since Meson G12A SoC, the ao register ranges for gpio, pull enable * and pull direction are the same, so there are only 2 register ranges. * * For the pull and GPIO configuration every bank uses a contiguous * set of bits in the register sets described above; the same register * can be shared by more banks with different offsets. Loading Loading @@ -488,21 +491,26 @@ static int meson_pinctrl_parse_dt(struct meson_pinctrl *pc, return PTR_ERR(pc->reg_mux); } pc->reg_pull = meson_map_resource(pc, gpio_np, "pull"); if (IS_ERR(pc->reg_pull)) { dev_err(pc->dev, "pull registers not found\n"); return PTR_ERR(pc->reg_pull); pc->reg_gpio = meson_map_resource(pc, gpio_np, "gpio"); if (IS_ERR(pc->reg_gpio)) { dev_err(pc->dev, "gpio registers not found\n"); return PTR_ERR(pc->reg_gpio); } pc->reg_pull = meson_map_resource(pc, gpio_np, "pull"); /* Use gpio region if pull one is not present */ if (IS_ERR(pc->reg_pull)) pc->reg_pull = pc->reg_gpio; pc->reg_pullen = meson_map_resource(pc, gpio_np, "pull-enable"); /* Use pull region if pull-enable one is not present */ if (IS_ERR(pc->reg_pullen)) pc->reg_pullen = pc->reg_pull; pc->reg_gpio = meson_map_resource(pc, gpio_np, "gpio"); if (IS_ERR(pc->reg_gpio)) { dev_err(pc->dev, "gpio registers not found\n"); return PTR_ERR(pc->reg_gpio); pc->reg_ds = meson_map_resource(pc, gpio_np, "ds"); if (IS_ERR(pc->reg_ds)) { dev_dbg(pc->dev, "ds registers not found - skipping\n"); pc->reg_ds = NULL; } return 0; Loading drivers/pinctrl/meson/pinctrl-meson.h +1 −0 Original line number Diff line number Diff line Loading @@ -120,6 +120,7 @@ struct meson_pinctrl { struct regmap *reg_pullen; struct regmap *reg_pull; struct regmap *reg_gpio; struct regmap *reg_ds; struct gpio_chip chip; struct device_node *of_node; }; Loading Loading
Documentation/devicetree/bindings/pinctrl/meson,pinctrl.txt +5 −5 Original line number Diff line number Diff line Loading @@ -23,11 +23,11 @@ The GPIO bank for the controller is represented as a sub-node and it acts as a GPIO controller. Required properties for sub-nodes are: - reg: should contain address and size for mux, pull-enable, pull and gpio register sets - reg-names: an array of strings describing the "reg" entries. Must contain "mux", "pull" and "gpio". "pull-enable" is optional and when it is missing the "pull" registers are used instead - reg: should contain a list of address and size, one tuple for each entry in reg-names. - reg-names: an array of strings describing the "reg" entries. Must contain "mux" and "gpio". May contain "pull", "pull-enable" and "ds" when appropriate. - gpio-controller: identifies the node as a gpio controller - #gpio-cells: must be 2 Loading
drivers/pinctrl/meson/pinctrl-meson.c +16 −8 Original line number Diff line number Diff line Loading @@ -31,6 +31,9 @@ * In some cases the register ranges for pull enable and pull * direction are the same and thus there are only 3 register ranges. * * Since Meson G12A SoC, the ao register ranges for gpio, pull enable * and pull direction are the same, so there are only 2 register ranges. * * For the pull and GPIO configuration every bank uses a contiguous * set of bits in the register sets described above; the same register * can be shared by more banks with different offsets. Loading Loading @@ -488,21 +491,26 @@ static int meson_pinctrl_parse_dt(struct meson_pinctrl *pc, return PTR_ERR(pc->reg_mux); } pc->reg_pull = meson_map_resource(pc, gpio_np, "pull"); if (IS_ERR(pc->reg_pull)) { dev_err(pc->dev, "pull registers not found\n"); return PTR_ERR(pc->reg_pull); pc->reg_gpio = meson_map_resource(pc, gpio_np, "gpio"); if (IS_ERR(pc->reg_gpio)) { dev_err(pc->dev, "gpio registers not found\n"); return PTR_ERR(pc->reg_gpio); } pc->reg_pull = meson_map_resource(pc, gpio_np, "pull"); /* Use gpio region if pull one is not present */ if (IS_ERR(pc->reg_pull)) pc->reg_pull = pc->reg_gpio; pc->reg_pullen = meson_map_resource(pc, gpio_np, "pull-enable"); /* Use pull region if pull-enable one is not present */ if (IS_ERR(pc->reg_pullen)) pc->reg_pullen = pc->reg_pull; pc->reg_gpio = meson_map_resource(pc, gpio_np, "gpio"); if (IS_ERR(pc->reg_gpio)) { dev_err(pc->dev, "gpio registers not found\n"); return PTR_ERR(pc->reg_gpio); pc->reg_ds = meson_map_resource(pc, gpio_np, "ds"); if (IS_ERR(pc->reg_ds)) { dev_dbg(pc->dev, "ds registers not found - skipping\n"); pc->reg_ds = NULL; } return 0; Loading
drivers/pinctrl/meson/pinctrl-meson.h +1 −0 Original line number Diff line number Diff line Loading @@ -120,6 +120,7 @@ struct meson_pinctrl { struct regmap *reg_pullen; struct regmap *reg_pull; struct regmap *reg_gpio; struct regmap *reg_ds; struct gpio_chip chip; struct device_node *of_node; }; Loading