Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5cbf8ce1 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "pinctrl: msm: add range of reserved gpio for lagoon"

parents 6a4f63d4 51ca7da5
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -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),
@@ -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,
};

+18 −0
Original line number Diff line number Diff line
@@ -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)
@@ -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;
}

+1 −0
Original line number Diff line number Diff line
@@ -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,