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

Commit 362ba3cf authored by John Crispin's avatar John Crispin Committed by Linus Walleij
Browse files

pinctrl/lantiq: pinconf uses port instead of pin



The XWAY pinctrl driver invalidly uses the port and not the pin
number to work out the registers and bits to be set for the
opendrain and pullup/down resistors.

Signed-off-by: default avatarJohn Crispin <blogic@openwrt.org>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent d41e35c3
Loading
Loading
Loading
Loading
+14 −14
Original line number Diff line number Diff line
@@ -441,17 +441,17 @@ static int xway_pinconf_get(struct pinctrl_dev *pctldev,
		if (port == PORT3)
			reg = GPIO3_OD;
		else
			reg = GPIO_OD(port);
			reg = GPIO_OD(pin);
		*config = LTQ_PINCONF_PACK(param,
			!!gpio_getbit(info->membase[0], reg, PORT_PIN(port)));
			!!gpio_getbit(info->membase[0], reg, PORT_PIN(pin)));
		break;

	case LTQ_PINCONF_PARAM_PULL:
		if (port == PORT3)
			reg = GPIO3_PUDEN;
		else
			reg = GPIO_PUDEN(port);
		if (!gpio_getbit(info->membase[0], reg, PORT_PIN(port))) {
			reg = GPIO_PUDEN(pin);
		if (!gpio_getbit(info->membase[0], reg, PORT_PIN(pin))) {
			*config = LTQ_PINCONF_PACK(param, 0);
			break;
		}
@@ -459,8 +459,8 @@ static int xway_pinconf_get(struct pinctrl_dev *pctldev,
		if (port == PORT3)
			reg = GPIO3_PUDSEL;
		else
			reg = GPIO_PUDSEL(port);
		if (!gpio_getbit(info->membase[0], reg, PORT_PIN(port)))
			reg = GPIO_PUDSEL(pin);
		if (!gpio_getbit(info->membase[0], reg, PORT_PIN(pin)))
			*config = LTQ_PINCONF_PACK(param, 2);
		else
			*config = LTQ_PINCONF_PACK(param, 1);
@@ -488,29 +488,29 @@ static int xway_pinconf_set(struct pinctrl_dev *pctldev,
		if (port == PORT3)
			reg = GPIO3_OD;
		else
			reg = GPIO_OD(port);
		gpio_setbit(info->membase[0], reg, PORT_PIN(port));
			reg = GPIO_OD(pin);
		gpio_setbit(info->membase[0], reg, PORT_PIN(pin));
		break;

	case LTQ_PINCONF_PARAM_PULL:
		if (port == PORT3)
			reg = GPIO3_PUDEN;
		else
			reg = GPIO_PUDEN(port);
			reg = GPIO_PUDEN(pin);
		if (arg == 0) {
			gpio_clearbit(info->membase[0], reg, PORT_PIN(port));
			gpio_clearbit(info->membase[0], reg, PORT_PIN(pin));
			break;
		}
		gpio_setbit(info->membase[0], reg, PORT_PIN(port));
		gpio_setbit(info->membase[0], reg, PORT_PIN(pin));

		if (port == PORT3)
			reg = GPIO3_PUDSEL;
		else
			reg = GPIO_PUDSEL(port);
			reg = GPIO_PUDSEL(pin);
		if (arg == 1)
			gpio_clearbit(info->membase[0], reg, PORT_PIN(port));
			gpio_clearbit(info->membase[0], reg, PORT_PIN(pin));
		else if (arg == 2)
			gpio_setbit(info->membase[0], reg, PORT_PIN(port));
			gpio_setbit(info->membase[0], reg, PORT_PIN(pin));
		else
			dev_err(pctldev->dev, "Invalid pull value %d\n", arg);
		break;