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

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

pinctrl: lpc18xx: add support for usb1 pinconf



The dedicated USB1 pins can be configured with pull-down and
for low power mode (suspend). Add support for this in the
pinctrl driver.

Signed-off-by: default avatarJoachim Eastwood <manabian@gmail.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent d96310ae
Loading
Loading
Loading
Loading
+50 −4
Original line number Diff line number Diff line
@@ -37,6 +37,9 @@
#define LPC18XX_SCU_PIN_EHD_MASK	0x300
#define LPC18XX_SCU_PIN_EHD_POS		8

#define LPC18XX_SCU_USB1_EPD		BIT(2)
#define LPC18XX_SCU_USB1_EPWR		BIT(4)

#define LPC18XX_SCU_I2C0_EFP		BIT(0)
#define LPC18XX_SCU_I2C0_EHD		BIT(2)
#define LPC18XX_SCU_I2C0_EZI		BIT(3)
@@ -617,10 +620,33 @@ static const struct pinctrl_pin_desc lpc18xx_pins[] = {

static int lpc18xx_pconf_get_usb1(enum pin_config_param param, int *arg, u32 reg)
{
	/* TODO */
	switch (param) {
	case PIN_CONFIG_LOW_POWER_MODE:
		if (reg & LPC18XX_SCU_USB1_EPWR)
			*arg = 0;
		else
			*arg = 1;
		break;

	case PIN_CONFIG_BIAS_DISABLE:
		if (reg & LPC18XX_SCU_USB1_EPD)
			return -EINVAL;
		break;

	case PIN_CONFIG_BIAS_PULL_DOWN:
		if (reg & LPC18XX_SCU_USB1_EPD)
			*arg = 1;
		else
			return -EINVAL;
		break;

	default:
		return -ENOTSUPP;
	}

	return 0;
}

static int lpc18xx_pconf_get_i2c0(enum pin_config_param param, int *arg, u32 reg,
				  unsigned pin)
{
@@ -782,10 +808,30 @@ static int lpc18xx_pconf_set_usb1(struct pinctrl_dev *pctldev,
				  enum pin_config_param param,
				  u16 param_val, u32 *reg)
{
	/* TODO */
	switch (param) {
	case PIN_CONFIG_LOW_POWER_MODE:
		if (param_val)
			*reg &= ~LPC18XX_SCU_USB1_EPWR;
		else
			*reg |= LPC18XX_SCU_USB1_EPWR;
		break;

	case PIN_CONFIG_BIAS_DISABLE:
		*reg &= ~LPC18XX_SCU_USB1_EPD;
		break;

	case PIN_CONFIG_BIAS_PULL_DOWN:
		*reg |= LPC18XX_SCU_USB1_EPD;
		break;

	default:
		dev_err(pctldev->dev, "Property not supported\n");
		return -ENOTSUPP;
	}

	return 0;
}

static int lpc18xx_pconf_set_i2c0(struct pinctrl_dev *pctldev,
				  enum pin_config_param param,
				  u16 param_val, u32 *reg,