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
|
@ -1108,6 +1108,27 @@ static int chv_config_set_pull(struct chv_pinctrl *pctrl, unsigned pin,
|
|||
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,
|
||||
unsigned long *configs, unsigned nconfigs)
|
||||
{
|
||||
|
@ -1132,6 +1153,18 @@ static int chv_config_set(struct pinctrl_dev *pctldev, unsigned pin,
|
|||
return ret;
|
||||
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:
|
||||
return -ENOTSUPP;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue