pinctrl: renesas: Add I/O voltage level flag
This patch adds config macros describing the voltage levels available on a pin. The current default (3.3V/1.8V) maps to zero to avoid having to change existing PFC implementations. Signed-off-by: Ulrich Hecht <uli+renesas@fpond.eu> Tested-by: Wolfram Sang <wsa+renesas@sang-engineering.com> Link: https://lore.kernel.org/r/20210112165912.30876-3-uli+renesas@fpond.eu Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
This commit is contained in:
parent
e127ef2ed0
commit
537db25ca3
|
@ -634,6 +634,9 @@ static int sh_pfc_pinconf_get(struct pinctrl_dev *pctldev, unsigned _pin,
|
|||
}
|
||||
|
||||
case PIN_CONFIG_POWER_SOURCE: {
|
||||
int idx = sh_pfc_get_pin_index(pfc, _pin);
|
||||
const struct sh_pfc_pin *pin = &pfc->info->pins[idx];
|
||||
unsigned int lower_voltage;
|
||||
u32 pocctrl, val;
|
||||
int bit;
|
||||
|
||||
|
@ -648,7 +651,10 @@ static int sh_pfc_pinconf_get(struct pinctrl_dev *pctldev, unsigned _pin,
|
|||
val = sh_pfc_read(pfc, pocctrl);
|
||||
spin_unlock_irqrestore(&pfc->lock, flags);
|
||||
|
||||
arg = (val & BIT(bit)) ? 3300 : 1800;
|
||||
lower_voltage = (pin->configs & SH_PFC_PIN_VOLTAGE_25_33) ?
|
||||
2500 : 1800;
|
||||
|
||||
arg = (val & BIT(bit)) ? 3300 : lower_voltage;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -702,6 +708,9 @@ static int sh_pfc_pinconf_set(struct pinctrl_dev *pctldev, unsigned _pin,
|
|||
|
||||
case PIN_CONFIG_POWER_SOURCE: {
|
||||
unsigned int mV = pinconf_to_config_argument(configs[i]);
|
||||
int idx = sh_pfc_get_pin_index(pfc, _pin);
|
||||
const struct sh_pfc_pin *pin = &pfc->info->pins[idx];
|
||||
unsigned int lower_voltage;
|
||||
u32 pocctrl, val;
|
||||
int bit;
|
||||
|
||||
|
@ -712,7 +721,10 @@ static int sh_pfc_pinconf_set(struct pinctrl_dev *pctldev, unsigned _pin,
|
|||
if (WARN(bit < 0, "invalid pin %#x", _pin))
|
||||
return bit;
|
||||
|
||||
if (mV != 1800 && mV != 3300)
|
||||
lower_voltage = (pin->configs & SH_PFC_PIN_VOLTAGE_25_33) ?
|
||||
2500 : 1800;
|
||||
|
||||
if (mV != lower_voltage && mV != 3300)
|
||||
return -EINVAL;
|
||||
|
||||
spin_lock_irqsave(&pfc->lock, flags);
|
||||
|
|
|
@ -31,6 +31,15 @@ enum {
|
|||
SH_PFC_PIN_CFG_PULL_DOWN)
|
||||
#define SH_PFC_PIN_CFG_IO_VOLTAGE (1 << 4)
|
||||
#define SH_PFC_PIN_CFG_DRIVE_STRENGTH (1 << 5)
|
||||
|
||||
#define SH_PFC_PIN_VOLTAGE_18_33 (0 << 6)
|
||||
#define SH_PFC_PIN_VOLTAGE_25_33 (1 << 6)
|
||||
|
||||
#define SH_PFC_PIN_CFG_IO_VOLTAGE_18_33 (SH_PFC_PIN_CFG_IO_VOLTAGE | \
|
||||
SH_PFC_PIN_VOLTAGE_18_33)
|
||||
#define SH_PFC_PIN_CFG_IO_VOLTAGE_25_33 (SH_PFC_PIN_CFG_IO_VOLTAGE | \
|
||||
SH_PFC_PIN_VOLTAGE_25_33)
|
||||
|
||||
#define SH_PFC_PIN_CFG_NO_GPIO (1 << 31)
|
||||
|
||||
struct sh_pfc_pin {
|
||||
|
|
Loading…
Reference in New Issue