mirror of https://gitee.com/openkylin/linux.git
pinctrl: meson: Rework enable/disable bias part
rework bias enable/disable part to prepare drive-strength integration no functional changes Signed-off-by: Guillaume La Roque <glaroque@baylibre.com> Reviewed-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com> Tested-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
013786c043
commit
9959d9a747
|
@ -174,62 +174,75 @@ int meson_pmx_get_groups(struct pinctrl_dev *pcdev, unsigned selector,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int meson_pinconf_set(struct pinctrl_dev *pcdev, unsigned int pin,
|
static int meson_pinconf_disable_bias(struct meson_pinctrl *pc,
|
||||||
unsigned long *configs, unsigned num_configs)
|
unsigned int pin)
|
||||||
{
|
{
|
||||||
struct meson_pinctrl *pc = pinctrl_dev_get_drvdata(pcdev);
|
|
||||||
struct meson_bank *bank;
|
struct meson_bank *bank;
|
||||||
enum pin_config_param param;
|
unsigned int reg, bit = 0;
|
||||||
unsigned int reg, bit;
|
int ret;
|
||||||
int i, ret;
|
|
||||||
|
|
||||||
ret = meson_get_bank(pc, pin, &bank);
|
ret = meson_get_bank(pc, pin, &bank);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
meson_calc_reg_and_bit(bank, pin, REG_PULLEN, ®, &bit);
|
||||||
|
ret = regmap_update_bits(pc->reg_pullen, reg, BIT(bit), 0);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int meson_pinconf_enable_bias(struct meson_pinctrl *pc, unsigned int pin,
|
||||||
|
bool pull_up)
|
||||||
|
{
|
||||||
|
struct meson_bank *bank;
|
||||||
|
unsigned int reg, bit, val = 0;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = meson_get_bank(pc, pin, &bank);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
meson_calc_reg_and_bit(bank, pin, REG_PULL, ®, &bit);
|
||||||
|
if (pull_up)
|
||||||
|
val = BIT(bit);
|
||||||
|
|
||||||
|
ret = regmap_update_bits(pc->reg_pull, reg, BIT(bit), val);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
meson_calc_reg_and_bit(bank, pin, REG_PULLEN, ®, &bit);
|
||||||
|
ret = regmap_update_bits(pc->reg_pullen, reg, BIT(bit), BIT(bit));
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int meson_pinconf_set(struct pinctrl_dev *pcdev, unsigned int pin,
|
||||||
|
unsigned long *configs, unsigned num_configs)
|
||||||
|
{
|
||||||
|
struct meson_pinctrl *pc = pinctrl_dev_get_drvdata(pcdev);
|
||||||
|
enum pin_config_param param;
|
||||||
|
int i, ret;
|
||||||
|
|
||||||
for (i = 0; i < num_configs; i++) {
|
for (i = 0; i < num_configs; i++) {
|
||||||
param = pinconf_to_config_param(configs[i]);
|
param = pinconf_to_config_param(configs[i]);
|
||||||
|
|
||||||
switch (param) {
|
switch (param) {
|
||||||
case PIN_CONFIG_BIAS_DISABLE:
|
case PIN_CONFIG_BIAS_DISABLE:
|
||||||
dev_dbg(pc->dev, "pin %u: disable bias\n", pin);
|
ret = meson_pinconf_disable_bias(pc, pin);
|
||||||
|
|
||||||
meson_calc_reg_and_bit(bank, pin, REG_PULLEN, ®,
|
|
||||||
&bit);
|
|
||||||
ret = regmap_update_bits(pc->reg_pullen, reg,
|
|
||||||
BIT(bit), 0);
|
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
break;
|
break;
|
||||||
case PIN_CONFIG_BIAS_PULL_UP:
|
case PIN_CONFIG_BIAS_PULL_UP:
|
||||||
dev_dbg(pc->dev, "pin %u: enable pull-up\n", pin);
|
ret = meson_pinconf_enable_bias(pc, pin, true);
|
||||||
|
|
||||||
meson_calc_reg_and_bit(bank, pin, REG_PULLEN,
|
|
||||||
®, &bit);
|
|
||||||
ret = regmap_update_bits(pc->reg_pullen, reg,
|
|
||||||
BIT(bit), BIT(bit));
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
meson_calc_reg_and_bit(bank, pin, REG_PULL, ®, &bit);
|
|
||||||
ret = regmap_update_bits(pc->reg_pull, reg,
|
|
||||||
BIT(bit), BIT(bit));
|
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
break;
|
break;
|
||||||
case PIN_CONFIG_BIAS_PULL_DOWN:
|
case PIN_CONFIG_BIAS_PULL_DOWN:
|
||||||
dev_dbg(pc->dev, "pin %u: enable pull-down\n", pin);
|
ret = meson_pinconf_enable_bias(pc, pin, false);
|
||||||
|
|
||||||
meson_calc_reg_and_bit(bank, pin, REG_PULLEN,
|
|
||||||
®, &bit);
|
|
||||||
ret = regmap_update_bits(pc->reg_pullen, reg,
|
|
||||||
BIT(bit), BIT(bit));
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
meson_calc_reg_and_bit(bank, pin, REG_PULL, ®, &bit);
|
|
||||||
ret = regmap_update_bits(pc->reg_pull, reg,
|
|
||||||
BIT(bit), 0);
|
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue