pinctrl: uniphier: support per-pin input enable for new SoCs

Upcoming new pinctrl drivers for PH1-LD11 and PH-LD20 support input
signal gating for each pin.  (While, existing ones only support it
per pin-group.)  This commit prepares the core part for that.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
master
Masahiro Yamada 8 years ago
parent 8cc92b996d
commit 3b05b5f0e4
  1. 28
      drivers/pinctrl/uniphier/pinctrl-uniphier-core.c
  2. 1
      drivers/pinctrl/uniphier/pinctrl-uniphier.h

@ -44,7 +44,23 @@ static const char *uniphier_pinmux_get_function_name(struct udevice *dev,
return priv->socdata->functions[selector];
}
static void uniphier_pinconf_input_enable(struct udevice *dev, unsigned pin)
static void uniphier_pinconf_input_enable_perpin(struct udevice *dev,
unsigned pin)
{
struct uniphier_pinctrl_priv *priv = dev_get_priv(dev);
unsigned reg;
u32 mask, tmp;
reg = UNIPHIER_PINCTRL_IECTRL + pin / 32 * 4;
mask = BIT(pin % 32);
tmp = readl(priv->base + reg);
tmp |= mask;
writel(tmp, priv->base + reg);
}
static void uniphier_pinconf_input_enable_legacy(struct udevice *dev,
unsigned pin)
{
struct uniphier_pinctrl_priv *priv = dev_get_priv(dev);
int pins_count = priv->socdata->pins_count;
@ -64,6 +80,16 @@ static void uniphier_pinconf_input_enable(struct udevice *dev, unsigned pin)
}
}
static void uniphier_pinconf_input_enable(struct udevice *dev, unsigned pin)
{
struct uniphier_pinctrl_priv *priv = dev_get_priv(dev);
if (priv->socdata->caps & UNIPHIER_PINCTRL_CAPS_PERPIN_IECTRL)
uniphier_pinconf_input_enable_perpin(dev, pin);
else
uniphier_pinconf_input_enable_legacy(dev, pin);
}
static void uniphier_pinmux_set_one(struct udevice *dev, unsigned pin,
unsigned muxval)
{

@ -70,6 +70,7 @@ struct uniphier_pinctrl_socdata {
const char * const *functions;
int functions_count;
unsigned caps;
#define UNIPHIER_PINCTRL_CAPS_PERPIN_IECTRL BIT(1)
#define UNIPHIER_PINCTRL_CAPS_DBGMUX_SEPARATE BIT(0)
};

Loading…
Cancel
Save