Commit bef873da authored by Linus Walleij's avatar Linus Walleij

Merge tag 'renesas-pinctrl-for-v5.17-tag1' of...

Merge tag 'renesas-pinctrl-for-v5.17-tag1' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers into devel

pinctrl: renesas: Updates for v5.17

  - Add generic support for output impedance,
  - Add drive strength and output impedance support for the RZ/G2L SoC,
  - Miscellaneous fixes and improvements.
parents c09acbc4 7c50a407
...@@ -114,6 +114,9 @@ properties: ...@@ -114,6 +114,9 @@ properties:
description: enable output on a pin without actively driving it description: enable output on a pin without actively driving it
(such as enabling an output buffer) (such as enabling an output buffer)
output-impedance-ohms:
description: set the output impedance of a pin to at most X ohms
output-low: output-low:
type: boolean type: boolean
description: set the pin to output mode with low level description: set the pin to output mode with low level
......
...@@ -73,6 +73,8 @@ additionalProperties: ...@@ -73,6 +73,8 @@ additionalProperties:
pins: true pins: true
drive-strength: drive-strength:
enum: [ 2, 4, 8, 12 ] enum: [ 2, 4, 8, 12 ]
output-impedance-ohms:
enum: [ 33, 50, 66, 100 ]
power-source: power-source:
enum: [ 1800, 2500, 3300 ] enum: [ 1800, 2500, 3300 ]
slew-rate: true slew-rate: true
......
...@@ -46,6 +46,7 @@ static const struct pin_config_item conf_items[] = { ...@@ -46,6 +46,7 @@ static const struct pin_config_item conf_items[] = {
PCONFDUMP(PIN_CONFIG_MODE_LOW_POWER, "pin low power", "mode", true), PCONFDUMP(PIN_CONFIG_MODE_LOW_POWER, "pin low power", "mode", true),
PCONFDUMP(PIN_CONFIG_OUTPUT_ENABLE, "output enabled", NULL, false), PCONFDUMP(PIN_CONFIG_OUTPUT_ENABLE, "output enabled", NULL, false),
PCONFDUMP(PIN_CONFIG_OUTPUT, "pin output", "level", true), PCONFDUMP(PIN_CONFIG_OUTPUT, "pin output", "level", true),
PCONFDUMP(PIN_CONFIG_OUTPUT_IMPEDANCE_OHMS, "output impedance", "ohms", true),
PCONFDUMP(PIN_CONFIG_POWER_SOURCE, "pin power source", "selector", true), PCONFDUMP(PIN_CONFIG_POWER_SOURCE, "pin power source", "selector", true),
PCONFDUMP(PIN_CONFIG_SLEEP_HARDWARE_STATE, "sleep hardware state", NULL, false), PCONFDUMP(PIN_CONFIG_SLEEP_HARDWARE_STATE, "sleep hardware state", NULL, false),
PCONFDUMP(PIN_CONFIG_SLEW_RATE, "slew rate", NULL, true), PCONFDUMP(PIN_CONFIG_SLEW_RATE, "slew rate", NULL, true),
...@@ -179,6 +180,7 @@ static const struct pinconf_generic_params dt_params[] = { ...@@ -179,6 +180,7 @@ static const struct pinconf_generic_params dt_params[] = {
{ "output-disable", PIN_CONFIG_OUTPUT_ENABLE, 0 }, { "output-disable", PIN_CONFIG_OUTPUT_ENABLE, 0 },
{ "output-enable", PIN_CONFIG_OUTPUT_ENABLE, 1 }, { "output-enable", PIN_CONFIG_OUTPUT_ENABLE, 1 },
{ "output-high", PIN_CONFIG_OUTPUT, 1, }, { "output-high", PIN_CONFIG_OUTPUT, 1, },
{ "output-impedance-ohms", PIN_CONFIG_OUTPUT_IMPEDANCE_OHMS, 0 },
{ "output-low", PIN_CONFIG_OUTPUT, 0, }, { "output-low", PIN_CONFIG_OUTPUT, 0, },
{ "power-source", PIN_CONFIG_POWER_SOURCE, 0 }, { "power-source", PIN_CONFIG_POWER_SOURCE, 0 },
{ "sleep-hardware-state", PIN_CONFIG_SLEEP_HARDWARE_STATE, 0 }, { "sleep-hardware-state", PIN_CONFIG_SLEEP_HARDWARE_STATE, 0 },
......
...@@ -757,9 +757,9 @@ static int rza1_gpio_request(struct gpio_chip *chip, unsigned int gpio) ...@@ -757,9 +757,9 @@ static int rza1_gpio_request(struct gpio_chip *chip, unsigned int gpio)
} }
/** /**
* rza1_gpio_disable_free() - reset a pin * rza1_gpio_free() - reset a pin
* *
* Surprisingly, disable_free a gpio, is equivalent to request it. * Surprisingly, freeing a gpio is equivalent to requesting it.
* Reset pin to port mode, with input buffer disabled. This overwrites all * Reset pin to port mode, with input buffer disabled. This overwrites all
* port direction settings applied with set_direction * port direction settings applied with set_direction
* *
...@@ -875,7 +875,7 @@ static int rza1_dt_node_pin_count(struct device_node *np) ...@@ -875,7 +875,7 @@ static int rza1_dt_node_pin_count(struct device_node *np)
} }
/** /**
* rza1_parse_pmx_function() - parse a pin mux sub-node * rza1_parse_pinmux_node() - parse a pin mux sub-node
* *
* @rza1_pctl: RZ/A1 pin controller device * @rza1_pctl: RZ/A1 pin controller device
* @np: of pmx sub-node * @np: of pmx sub-node
......
This diff is collapsed.
...@@ -504,7 +504,6 @@ static u32 sh_pfc_pinconf_find_drive_strength_reg(struct sh_pfc *pfc, ...@@ -504,7 +504,6 @@ static u32 sh_pfc_pinconf_find_drive_strength_reg(struct sh_pfc *pfc,
static int sh_pfc_pinconf_get_drive_strength(struct sh_pfc *pfc, static int sh_pfc_pinconf_get_drive_strength(struct sh_pfc *pfc,
unsigned int pin) unsigned int pin)
{ {
unsigned long flags;
unsigned int offset; unsigned int offset;
unsigned int size; unsigned int size;
u32 reg; u32 reg;
...@@ -514,11 +513,7 @@ static int sh_pfc_pinconf_get_drive_strength(struct sh_pfc *pfc, ...@@ -514,11 +513,7 @@ static int sh_pfc_pinconf_get_drive_strength(struct sh_pfc *pfc,
if (!reg) if (!reg)
return -EINVAL; return -EINVAL;
spin_lock_irqsave(&pfc->lock, flags); val = (sh_pfc_read(pfc, reg) >> offset) & GENMASK(size - 1, 0);
val = sh_pfc_read(pfc, reg);
spin_unlock_irqrestore(&pfc->lock, flags);
val = (val >> offset) & GENMASK(size - 1, 0);
/* Convert the value to mA based on a full drive strength value of 24mA. /* Convert the value to mA based on a full drive strength value of 24mA.
* We can make the full value configurable later if needed. * We can make the full value configurable later if needed.
...@@ -648,9 +643,7 @@ static int sh_pfc_pinconf_get(struct pinctrl_dev *pctldev, unsigned _pin, ...@@ -648,9 +643,7 @@ static int sh_pfc_pinconf_get(struct pinctrl_dev *pctldev, unsigned _pin,
if (WARN(bit < 0, "invalid pin %#x", _pin)) if (WARN(bit < 0, "invalid pin %#x", _pin))
return bit; return bit;
spin_lock_irqsave(&pfc->lock, flags);
val = sh_pfc_read(pfc, pocctrl); val = sh_pfc_read(pfc, pocctrl);
spin_unlock_irqrestore(&pfc->lock, flags);
lower_voltage = (pin->configs & SH_PFC_PIN_VOLTAGE_25_33) ? lower_voltage = (pin->configs & SH_PFC_PIN_VOLTAGE_25_33) ?
2500 : 1800; 2500 : 1800;
......
...@@ -91,6 +91,8 @@ struct pinctrl_map; ...@@ -91,6 +91,8 @@ struct pinctrl_map;
* configuration (eg. the currently selected mux function) drive values on * configuration (eg. the currently selected mux function) drive values on
* the line. Use argument 1 to enable output mode, argument 0 to disable * the line. Use argument 1 to enable output mode, argument 0 to disable
* it. * it.
* @PIN_CONFIG_OUTPUT_IMPEDANCE_OHMS: this will configure the output impedance
* of the pin with the value passed as argument. The argument is in ohms.
* @PIN_CONFIG_PERSIST_STATE: retain pin state across sleep or controller reset * @PIN_CONFIG_PERSIST_STATE: retain pin state across sleep or controller reset
* @PIN_CONFIG_POWER_SOURCE: if the pin can select between different power * @PIN_CONFIG_POWER_SOURCE: if the pin can select between different power
* supplies, the argument to this parameter (on a custom format) tells * supplies, the argument to this parameter (on a custom format) tells
...@@ -129,6 +131,7 @@ enum pin_config_param { ...@@ -129,6 +131,7 @@ enum pin_config_param {
PIN_CONFIG_MODE_PWM, PIN_CONFIG_MODE_PWM,
PIN_CONFIG_OUTPUT, PIN_CONFIG_OUTPUT,
PIN_CONFIG_OUTPUT_ENABLE, PIN_CONFIG_OUTPUT_ENABLE,
PIN_CONFIG_OUTPUT_IMPEDANCE_OHMS,
PIN_CONFIG_PERSIST_STATE, PIN_CONFIG_PERSIST_STATE,
PIN_CONFIG_POWER_SOURCE, PIN_CONFIG_POWER_SOURCE,
PIN_CONFIG_SKEW_DELAY, PIN_CONFIG_SKEW_DELAY,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment