Loading drivers/pinctrl/qcom/pinctrl-lagoon.c +5 −0 Original line number Diff line number Diff line Loading @@ -1614,6 +1614,10 @@ static const struct msm_pingroup lagoon_groups[] = { [163] = UFS_RESET(ufs_reset, 0x1ae000), }; static const int lagoon_reserved_gpios[] = { 13, 14, 15, 16, 45, 46, 56, 57, -1 }; static const struct msm_pinctrl_soc_data lagoon_pinctrl = { .pins = lagoon_pins, .npins = ARRAY_SIZE(lagoon_pins), Loading @@ -1621,6 +1625,7 @@ static const struct msm_pinctrl_soc_data lagoon_pinctrl = { .nfunctions = ARRAY_SIZE(lagoon_functions), .groups = lagoon_groups, .ngroups = ARRAY_SIZE(lagoon_groups), .reserved_gpios = lagoon_reserved_gpios, .ngpios = 156, }; Loading drivers/pinctrl/qcom/pinctrl-msm.c +18 −0 Original line number Diff line number Diff line Loading @@ -988,8 +988,23 @@ static int msm_gpio_init_valid_mask(struct gpio_chip *chip, int ret; unsigned int len, i; unsigned int max_gpios = pctrl->soc->ngpios; const int *reserved = pctrl->soc->reserved_gpios; u16 *tmp; /* Driver provided reserved list overrides */ if (reserved) { bitmap_fill(chip->valid_mask, max_gpios); for (i = 0; reserved[i] >= 0; i++) { if (i >= max_gpios || reserved[i] >= max_gpios) { dev_err(pctrl->dev, "invalid list of reserved" "GPIOs\n"); return -EINVAL; } clear_bit(reserved[i], chip->valid_mask); } return 0; } /* The number of GPIOs in the ACPI tables */ len = ret = device_property_read_u16_array(pctrl->dev, "gpios", NULL, 0); if (ret < 0) Loading Loading @@ -1019,6 +1034,9 @@ static int msm_gpio_init_valid_mask(struct gpio_chip *chip, static bool msm_gpio_needs_valid_mask(struct msm_pinctrl *pctrl) { if (pctrl->soc->reserved_gpios) return true; return device_property_read_u16_array(pctrl->dev, "gpios", NULL, 0) > 0; } Loading drivers/pinctrl/qcom/pinctrl-msm.h +1 −0 Original line number Diff line number Diff line Loading @@ -138,6 +138,7 @@ struct msm_pinctrl_soc_data { bool pull_no_keeper; struct pinctrl_qup *qup_regs; unsigned int nqup_regs; const int *reserved_gpios; }; int msm_pinctrl_probe(struct platform_device *pdev, Loading Loading
drivers/pinctrl/qcom/pinctrl-lagoon.c +5 −0 Original line number Diff line number Diff line Loading @@ -1614,6 +1614,10 @@ static const struct msm_pingroup lagoon_groups[] = { [163] = UFS_RESET(ufs_reset, 0x1ae000), }; static const int lagoon_reserved_gpios[] = { 13, 14, 15, 16, 45, 46, 56, 57, -1 }; static const struct msm_pinctrl_soc_data lagoon_pinctrl = { .pins = lagoon_pins, .npins = ARRAY_SIZE(lagoon_pins), Loading @@ -1621,6 +1625,7 @@ static const struct msm_pinctrl_soc_data lagoon_pinctrl = { .nfunctions = ARRAY_SIZE(lagoon_functions), .groups = lagoon_groups, .ngroups = ARRAY_SIZE(lagoon_groups), .reserved_gpios = lagoon_reserved_gpios, .ngpios = 156, }; Loading
drivers/pinctrl/qcom/pinctrl-msm.c +18 −0 Original line number Diff line number Diff line Loading @@ -988,8 +988,23 @@ static int msm_gpio_init_valid_mask(struct gpio_chip *chip, int ret; unsigned int len, i; unsigned int max_gpios = pctrl->soc->ngpios; const int *reserved = pctrl->soc->reserved_gpios; u16 *tmp; /* Driver provided reserved list overrides */ if (reserved) { bitmap_fill(chip->valid_mask, max_gpios); for (i = 0; reserved[i] >= 0; i++) { if (i >= max_gpios || reserved[i] >= max_gpios) { dev_err(pctrl->dev, "invalid list of reserved" "GPIOs\n"); return -EINVAL; } clear_bit(reserved[i], chip->valid_mask); } return 0; } /* The number of GPIOs in the ACPI tables */ len = ret = device_property_read_u16_array(pctrl->dev, "gpios", NULL, 0); if (ret < 0) Loading Loading @@ -1019,6 +1034,9 @@ static int msm_gpio_init_valid_mask(struct gpio_chip *chip, static bool msm_gpio_needs_valid_mask(struct msm_pinctrl *pctrl) { if (pctrl->soc->reserved_gpios) return true; return device_property_read_u16_array(pctrl->dev, "gpios", NULL, 0) > 0; } Loading
drivers/pinctrl/qcom/pinctrl-msm.h +1 −0 Original line number Diff line number Diff line Loading @@ -138,6 +138,7 @@ struct msm_pinctrl_soc_data { bool pull_no_keeper; struct pinctrl_qup *qup_regs; unsigned int nqup_regs; const int *reserved_gpios; }; int msm_pinctrl_probe(struct platform_device *pdev, Loading