Merge tag 'pinctrl-v6.18-2' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl

Pull pin control fixes from Linus Walleij:

 - Fix register naming in the Mediatek mt8189 driver

 - Select REGMAP_MMIO for the Realtek RTD driver

 - Fix the number of items in groups in the Toshiba Visconti driver

 - Fix a memory leak in the Cirrus CS42L43 driver

 - Fix a deadlock (!) in Qualcomm pinmux configuration

 - Fix use of uninitialized memory and list initialization in the S32CC
   pin controller

* tag 'pinctrl-v6.18-2' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl:
  dt-bindings: pinctrl: xlnx,versal-pinctrl: Add missing unevaluatedProperties on '^conf' nodes
  pinctrl: s32cc: initialize gpio_pin_config::list after kmalloc()
  pinctrl: s32cc: fix uninitialized memory in s32_pinctrl_desc
  pinctrl: qcom: msm: Fix deadlock in pinmux configuration
  pinctrl: cirrus: Fix fwnode leak in cs42l43_pin_probe()
  dt-bindings: pinctrl: toshiba,visconti: Fix number of items in groups
  pinctrl: realtek: Select REGMAP_MMIO for RTD driver
  pinctrl: mediatek: mt8189: align register base names to dt-bindings ones
  pinctrl: mediatek: mt8196: align register base names to dt-bindings ones
This commit is contained in:
Linus Torvalds
2025-11-21 10:47:24 -08:00
8 changed files with 40 additions and 24 deletions

View File

@@ -50,7 +50,7 @@ patternProperties:
groups: groups:
description: description:
Name of the pin group to use for the functions. Name of the pin group to use for the functions.
$ref: /schemas/types.yaml#/definitions/string items:
enum: [i2c0_grp, i2c1_grp, i2c2_grp, i2c3_grp, i2c4_grp, enum: [i2c0_grp, i2c1_grp, i2c2_grp, i2c3_grp, i2c4_grp,
i2c5_grp, i2c6_grp, i2c7_grp, i2c8_grp, i2c5_grp, i2c6_grp, i2c7_grp, i2c8_grp,
spi0_grp, spi0_cs0_grp, spi0_cs1_grp, spi0_cs2_grp, spi0_grp, spi0_cs0_grp, spi0_cs1_grp, spi0_cs2_grp,
@@ -62,6 +62,8 @@ patternProperties:
pwm2_gpio10_grp, pwm2_gpio14_grp, pwm2_gpio18_grp, pwm2_gpio10_grp, pwm2_gpio14_grp, pwm2_gpio18_grp,
pwm3_gpio7_grp, pwm3_gpio11_grp, pwm3_gpio15_grp, pwm3_gpio7_grp, pwm3_gpio11_grp, pwm3_gpio15_grp,
pwm3_gpio19_grp, pcmif_out_grp, pcmif_in_grp] pwm3_gpio19_grp, pcmif_out_grp, pcmif_in_grp]
minItems: 1
maxItems: 8
drive-strength: drive-strength:
enum: [2, 4, 6, 8, 16, 24, 32] enum: [2, 4, 6, 8, 16, 24, 32]

View File

@@ -74,6 +74,7 @@ patternProperties:
'^conf': '^conf':
type: object type: object
unevaluatedProperties: false
description: description:
Pinctrl node's client devices use subnodes for pin configurations, Pinctrl node's client devices use subnodes for pin configurations,
which in turn use the standard properties below. which in turn use the standard properties below.

View File

@@ -532,6 +532,11 @@ static int cs42l43_gpio_add_pin_ranges(struct gpio_chip *chip)
return ret; return ret;
} }
static void cs42l43_fwnode_put(void *data)
{
fwnode_handle_put(data);
}
static int cs42l43_pin_probe(struct platform_device *pdev) static int cs42l43_pin_probe(struct platform_device *pdev)
{ {
struct cs42l43 *cs42l43 = dev_get_drvdata(pdev->dev.parent); struct cs42l43 *cs42l43 = dev_get_drvdata(pdev->dev.parent);
@@ -563,10 +568,20 @@ static int cs42l43_pin_probe(struct platform_device *pdev)
priv->gpio_chip.ngpio = CS42L43_NUM_GPIOS; priv->gpio_chip.ngpio = CS42L43_NUM_GPIOS;
if (is_of_node(fwnode)) { if (is_of_node(fwnode)) {
fwnode = fwnode_get_named_child_node(fwnode, "pinctrl"); struct fwnode_handle *child;
if (fwnode && !fwnode->dev) child = fwnode_get_named_child_node(fwnode, "pinctrl");
fwnode->dev = priv->dev; if (child) {
ret = devm_add_action_or_reset(&pdev->dev,
cs42l43_fwnode_put, child);
if (ret) {
fwnode_handle_put(child);
return ret;
}
if (!child->dev)
child->dev = priv->dev;
fwnode = child;
}
} }
priv->gpio_chip.fwnode = fwnode; priv->gpio_chip.fwnode = fwnode;

View File

@@ -1642,9 +1642,7 @@ static const struct mtk_pin_reg_calc mt8189_reg_cals[PINCTRL_PIN_REG_MAX] = {
}; };
static const char * const mt8189_pinctrl_register_base_names[] = { static const char * const mt8189_pinctrl_register_base_names[] = {
"gpio_base", "iocfg_bm0_base", "iocfg_bm1_base", "iocfg_bm2_base", "iocfg_lm_base", "base", "lm", "rb0", "rb1", "bm0", "bm1", "bm2", "lt0", "lt1", "rt",
"iocfg_lt0_base", "iocfg_lt1_base", "iocfg_rb0_base", "iocfg_rb1_base",
"iocfg_rt_base"
}; };
static const struct mtk_eint_hw mt8189_eint_hw = { static const struct mtk_eint_hw mt8189_eint_hw = {

View File

@@ -1801,10 +1801,8 @@ static const struct mtk_pin_reg_calc mt8196_reg_cals[PINCTRL_PIN_REG_MAX] = {
}; };
static const char * const mt8196_pinctrl_register_base_names[] = { static const char * const mt8196_pinctrl_register_base_names[] = {
"iocfg0", "iocfg_rt", "iocfg_rm1", "iocfg_rm2", "base", "rt", "rm1", "rm2", "rb", "bm1", "bm2", "bm3",
"iocfg_rb", "iocfg_bm1", "iocfg_bm2", "iocfg_bm3", "lt", "lm1", "lm2", "lb1", "lb2", "tm1", "tm2", "tm3",
"iocfg_lt", "iocfg_lm1", "iocfg_lm2", "iocfg_lb1",
"iocfg_lb2", "iocfg_tm1", "iocfg_tm2", "iocfg_tm3",
}; };
static const struct mtk_eint_hw mt8196_eint_hw = { static const struct mtk_eint_hw mt8196_eint_hw = {

View File

@@ -392,6 +392,7 @@ static int s32_pmx_gpio_request_enable(struct pinctrl_dev *pctldev,
gpio_pin->pin_id = offset; gpio_pin->pin_id = offset;
gpio_pin->config = config; gpio_pin->config = config;
INIT_LIST_HEAD(&gpio_pin->list);
spin_lock_irqsave(&ipctl->gpio_configs_lock, flags); spin_lock_irqsave(&ipctl->gpio_configs_lock, flags);
list_add(&gpio_pin->list, &ipctl->gpio_configs); list_add(&gpio_pin->list, &ipctl->gpio_configs);
@@ -951,7 +952,7 @@ int s32_pinctrl_probe(struct platform_device *pdev,
spin_lock_init(&ipctl->gpio_configs_lock); spin_lock_init(&ipctl->gpio_configs_lock);
s32_pinctrl_desc = s32_pinctrl_desc =
devm_kmalloc(&pdev->dev, sizeof(*s32_pinctrl_desc), GFP_KERNEL); devm_kzalloc(&pdev->dev, sizeof(*s32_pinctrl_desc), GFP_KERNEL);
if (!s32_pinctrl_desc) if (!s32_pinctrl_desc)
return -ENOMEM; return -ENOMEM;

View File

@@ -189,7 +189,7 @@ static int msm_pinmux_set_mux(struct pinctrl_dev *pctldev,
*/ */
if (d && i != gpio_func && if (d && i != gpio_func &&
!test_and_set_bit(d->hwirq, pctrl->disabled_for_mux)) !test_and_set_bit(d->hwirq, pctrl->disabled_for_mux))
disable_irq(irq); disable_irq_nosync(irq);
raw_spin_lock_irqsave(&pctrl->lock, flags); raw_spin_lock_irqsave(&pctrl->lock, flags);

View File

@@ -6,6 +6,7 @@ config PINCTRL_RTD
default y default y
select PINMUX select PINMUX
select GENERIC_PINCONF select GENERIC_PINCONF
select REGMAP_MMIO
config PINCTRL_RTD1619B config PINCTRL_RTD1619B
tristate "Realtek DHC 1619B pin controller driver" tristate "Realtek DHC 1619B pin controller driver"