pinctrl: cherryview: add option to set open-drain pin config
On some CHV platforms, we need an option to configure the open-drain setting for these pins. This adds support for the PIN_CONFIG_DRIVE_PUSH_PULL and PIN_CONFIG_DRIVE_OPEN_DRAIN to disable/enable open-drain mode for a specific pin. Signed-off-by: Dan O'Donovan <dan@emutex.com> Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
0bd50d719b
commit
ccdf81d08d
1 changed files with 33 additions and 0 deletions
|
@ -1108,6 +1108,27 @@ static int chv_config_set_pull(struct chv_pinctrl *pctrl, unsigned pin,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int chv_config_set_oden(struct chv_pinctrl *pctrl, unsigned int pin,
|
||||||
|
bool enable)
|
||||||
|
{
|
||||||
|
void __iomem *reg = chv_padreg(pctrl, pin, CHV_PADCTRL1);
|
||||||
|
unsigned long flags;
|
||||||
|
u32 ctrl1;
|
||||||
|
|
||||||
|
raw_spin_lock_irqsave(&chv_lock, flags);
|
||||||
|
ctrl1 = readl(reg);
|
||||||
|
|
||||||
|
if (enable)
|
||||||
|
ctrl1 |= CHV_PADCTRL1_ODEN;
|
||||||
|
else
|
||||||
|
ctrl1 &= ~CHV_PADCTRL1_ODEN;
|
||||||
|
|
||||||
|
chv_writel(ctrl1, reg);
|
||||||
|
raw_spin_unlock_irqrestore(&chv_lock, flags);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int chv_config_set(struct pinctrl_dev *pctldev, unsigned pin,
|
static int chv_config_set(struct pinctrl_dev *pctldev, unsigned pin,
|
||||||
unsigned long *configs, unsigned nconfigs)
|
unsigned long *configs, unsigned nconfigs)
|
||||||
{
|
{
|
||||||
|
@ -1132,6 +1153,18 @@ static int chv_config_set(struct pinctrl_dev *pctldev, unsigned pin,
|
||||||
return ret;
|
return ret;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PIN_CONFIG_DRIVE_PUSH_PULL:
|
||||||
|
ret = chv_config_set_oden(pctrl, pin, false);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PIN_CONFIG_DRIVE_OPEN_DRAIN:
|
||||||
|
ret = chv_config_set_oden(pctrl, pin, true);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return -ENOTSUPP;
|
return -ENOTSUPP;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue