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

Commit 403fbdee authored by Joachim Eastwood's avatar Joachim Eastwood Committed by Linus Walleij
Browse files

pinctrl: lpc18xx: create pin cap lookup helper



Both pconf_get_pin and pconf_set_pin needs to lookup pin cap based
on the pin number. Create a common helper function that both
functions can use that also handles the case where no pin number is
found in the pins array.

This also fixes a small bug in pconf_get_pin where pconf_get_i2c0
would use the pins array index rather than the pin number.

Signed-off-by: default avatarJoachim Eastwood <manabian@gmail.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent e8e36d2f
Loading
Loading
Loading
Loading
+18 −11
Original line number Original line Diff line number Diff line
@@ -729,6 +729,18 @@ static int lpc18xx_pconf_get_pin(enum pin_config_param param, int *arg, u32 reg,
	return 0;
	return 0;
}
}


static struct lpc18xx_pin_caps *lpc18xx_get_pin_caps(unsigned pin)
{
	int i;

	for (i = 0; i < ARRAY_SIZE(lpc18xx_pins); i++) {
		if (lpc18xx_pins[i].number == pin)
			return lpc18xx_pins[i].drv_data;
	}

	return NULL;
}

static int lpc18xx_pconf_get(struct pinctrl_dev *pctldev, unsigned pin,
static int lpc18xx_pconf_get(struct pinctrl_dev *pctldev, unsigned pin,
			     unsigned long *config)
			     unsigned long *config)
{
{
@@ -737,14 +749,11 @@ static int lpc18xx_pconf_get(struct pinctrl_dev *pctldev, unsigned pin,
	struct lpc18xx_pin_caps *pin_cap;
	struct lpc18xx_pin_caps *pin_cap;
	int ret, arg = 0;
	int ret, arg = 0;
	u32 reg;
	u32 reg;
	int i;


	for (i = 0; i < ARRAY_SIZE(lpc18xx_pins); i++) {
	pin_cap = lpc18xx_get_pin_caps(pin);
		if (lpc18xx_pins[i].number == pin)
	if (!pin_cap)
			pin = i;
		return -EINVAL;
	}


	pin_cap = lpc18xx_pins[pin].drv_data;
	reg = readl(scu->base + pin_cap->offset);
	reg = readl(scu->base + pin_cap->offset);


	if (pin_cap->type == TYPE_I2C0)
	if (pin_cap->type == TYPE_I2C0)
@@ -905,12 +914,10 @@ static int lpc18xx_pconf_set(struct pinctrl_dev *pctldev, unsigned pin,
	int ret;
	int ret;
	int i;
	int i;


	for (i = 0; i < ARRAY_SIZE(lpc18xx_pins); i++) {
	pin_cap = lpc18xx_get_pin_caps(pin);
		if (lpc18xx_pins[i].number == pin)
	if (!pin_cap)
			break;
		return -EINVAL;
	}


	pin_cap = lpc18xx_pins[i].drv_data;
	reg = readl(scu->base + pin_cap->offset);
	reg = readl(scu->base + pin_cap->offset);


	for (i = 0; i < num_configs; i++) {
	for (i = 0; i < num_configs; i++) {