Skip to content

Commit 40d3f62

Browse files
committed
Merge tag 'pinctrl-v7.0-2' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl
Pull pin control fixes from Linus Walleij: "All of these are driver fixes except a memory leak in the pinconf_generic_parse_dt_config() helper which is the most important fix. - Rename and fix up the Intel Equilibrium immutable interrupt chip - Handle the Qualcomm QCS615 dual edge GPIO IRQ by adding the right flag - Fix a memory leak in the widely used pinconf_generic_parse_dt_config() and a more local leak in aml_dt_node_to_map_pinmux() - Fix double put in the Cirrus cs42l43_pin_probe() - Staticize amdisp_pinctrl_ops, Qualcomm SDM660 groups and functions - Unexport CIX sky1_pinctrl_pm_ops - Fix configuration of deferred pin in the Rockchip driver - Implement .get_direction() in the Sunxi driver squelching a dmesg warning message - Fix a readout of the last bank of registers in the Cypress CY8C95x0 driver" * tag 'pinctrl-v7.0-2' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl: pinctrl: cy8c95x0: Don't miss reading the last bank registers pinctrl: sunxi: Implement gpiochip::get_direction() pinctrl: rockchip: Fix configuring a deferred pin pinctrl: cirrus: cs42l43: Fix double-put in cs42l43_pin_probe() pinctrl: meson: amlogic-a4: Fix device node reference leak in aml_dt_node_to_map_pinmux() pinctrl: qcom: sdm660-lpass-lpi: Make groups and functions variables static pinctrl: cix: sky1: Unexport sky1_pinctrl_pm_ops pinctrl: amdisp: Make amdisp_pinctrl_ops variable static pinctrl: pinconf-generic: Fix memory leak in pinconf_generic_parse_dt_config() pinctrl: qcom: qcs615: Add missing dual edge GPIO IRQ errata flag pinctrl: equilibrium: fix warning trace on load pinctrl: equilibrium: rename irq_chip function callbacks
2 parents 0031c06 + b6c3af4 commit 40d3f62

11 files changed

Lines changed: 86 additions & 34 deletions

drivers/pinctrl/cirrus/pinctrl-cs42l43.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -574,10 +574,9 @@ static int cs42l43_pin_probe(struct platform_device *pdev)
574574
if (child) {
575575
ret = devm_add_action_or_reset(&pdev->dev,
576576
cs42l43_fwnode_put, child);
577-
if (ret) {
578-
fwnode_handle_put(child);
577+
if (ret)
579578
return ret;
580-
}
579+
581580
if (!child->dev)
582581
child->dev = priv->dev;
583582
fwnode = child;

drivers/pinctrl/cix/pinctrl-sky1.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -522,11 +522,10 @@ static int __maybe_unused sky1_pinctrl_resume(struct device *dev)
522522
return pinctrl_force_default(spctl->pctl);
523523
}
524524

525-
const struct dev_pm_ops sky1_pinctrl_pm_ops = {
525+
static const struct dev_pm_ops sky1_pinctrl_pm_ops = {
526526
SET_LATE_SYSTEM_SLEEP_PM_OPS(sky1_pinctrl_suspend,
527527
sky1_pinctrl_resume)
528528
};
529-
EXPORT_SYMBOL_GPL(sky1_pinctrl_pm_ops);
530529

531530
static int sky1_pinctrl_probe(struct platform_device *pdev)
532531
{

drivers/pinctrl/meson/pinctrl-amlogic-a4.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -679,7 +679,6 @@ static int aml_dt_node_to_map_pinmux(struct pinctrl_dev *pctldev,
679679
unsigned int *num_maps)
680680
{
681681
struct device *dev = pctldev->dev;
682-
struct device_node *pnode;
683682
unsigned long *configs = NULL;
684683
unsigned int num_configs = 0;
685684
struct property *prop;
@@ -693,7 +692,7 @@ static int aml_dt_node_to_map_pinmux(struct pinctrl_dev *pctldev,
693692
return -ENOENT;
694693
}
695694

696-
pnode = of_get_parent(np);
695+
struct device_node *pnode __free(device_node) = of_get_parent(np);
697696
if (!pnode) {
698697
dev_info(dev, "Missing function node\n");
699698
return -EINVAL;

drivers/pinctrl/pinconf-generic.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -351,13 +351,13 @@ int pinconf_generic_parse_dt_config(struct device_node *np,
351351

352352
ret = parse_dt_cfg(np, dt_params, ARRAY_SIZE(dt_params), cfg, &ncfg);
353353
if (ret)
354-
return ret;
354+
goto out;
355355
if (pctldev && pctldev->desc->num_custom_params &&
356356
pctldev->desc->custom_params) {
357357
ret = parse_dt_cfg(np, pctldev->desc->custom_params,
358358
pctldev->desc->num_custom_params, cfg, &ncfg);
359359
if (ret)
360-
return ret;
360+
goto out;
361361
}
362362

363363
/* no configs found at all */

drivers/pinctrl/pinctrl-amdisp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ static int amdisp_get_group_pins(struct pinctrl_dev *pctldev,
8080
return 0;
8181
}
8282

83-
const struct pinctrl_ops amdisp_pinctrl_ops = {
83+
static const struct pinctrl_ops amdisp_pinctrl_ops = {
8484
.get_groups_count = amdisp_get_groups_count,
8585
.get_group_name = amdisp_get_group_name,
8686
.get_group_pins = amdisp_get_group_pins,

drivers/pinctrl/pinctrl-cy8c95x0.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -627,7 +627,7 @@ static int cy8c95x0_write_regs_mask(struct cy8c95x0_pinctrl *chip, int reg,
627627
bitmap_scatter(tmask, mask, chip->map, MAX_LINE);
628628
bitmap_scatter(tval, val, chip->map, MAX_LINE);
629629

630-
for_each_set_clump8(offset, bits, tmask, chip->tpin) {
630+
for_each_set_clump8(offset, bits, tmask, chip->nport * BANK_SZ) {
631631
unsigned int i = offset / 8;
632632

633633
write_val = bitmap_get_value8(tval, offset);
@@ -655,7 +655,7 @@ static int cy8c95x0_read_regs_mask(struct cy8c95x0_pinctrl *chip, int reg,
655655
bitmap_scatter(tmask, mask, chip->map, MAX_LINE);
656656
bitmap_scatter(tval, val, chip->map, MAX_LINE);
657657

658-
for_each_set_clump8(offset, bits, tmask, chip->tpin) {
658+
for_each_set_clump8(offset, bits, tmask, chip->nport * BANK_SZ) {
659659
unsigned int i = offset / 8;
660660

661661
ret = cy8c95x0_regmap_read_bits(chip, reg, i, bits, &read_val);

drivers/pinctrl/pinctrl-equilibrium.c

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
#define PIN_NAME_LEN 10
2424
#define PAD_REG_OFF 0x100
2525

26-
static void eqbr_gpio_disable_irq(struct irq_data *d)
26+
static void eqbr_irq_mask(struct irq_data *d)
2727
{
2828
struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
2929
struct eqbr_gpio_ctrl *gctrl = gpiochip_get_data(gc);
@@ -36,7 +36,7 @@ static void eqbr_gpio_disable_irq(struct irq_data *d)
3636
gpiochip_disable_irq(gc, offset);
3737
}
3838

39-
static void eqbr_gpio_enable_irq(struct irq_data *d)
39+
static void eqbr_irq_unmask(struct irq_data *d)
4040
{
4141
struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
4242
struct eqbr_gpio_ctrl *gctrl = gpiochip_get_data(gc);
@@ -50,7 +50,7 @@ static void eqbr_gpio_enable_irq(struct irq_data *d)
5050
raw_spin_unlock_irqrestore(&gctrl->lock, flags);
5151
}
5252

53-
static void eqbr_gpio_ack_irq(struct irq_data *d)
53+
static void eqbr_irq_ack(struct irq_data *d)
5454
{
5555
struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
5656
struct eqbr_gpio_ctrl *gctrl = gpiochip_get_data(gc);
@@ -62,10 +62,17 @@ static void eqbr_gpio_ack_irq(struct irq_data *d)
6262
raw_spin_unlock_irqrestore(&gctrl->lock, flags);
6363
}
6464

65-
static void eqbr_gpio_mask_ack_irq(struct irq_data *d)
65+
static void eqbr_irq_mask_ack(struct irq_data *d)
6666
{
67-
eqbr_gpio_disable_irq(d);
68-
eqbr_gpio_ack_irq(d);
67+
struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
68+
struct eqbr_gpio_ctrl *gctrl = gpiochip_get_data(gc);
69+
unsigned int offset = irqd_to_hwirq(d);
70+
unsigned long flags;
71+
72+
raw_spin_lock_irqsave(&gctrl->lock, flags);
73+
writel(BIT(offset), gctrl->membase + GPIO_IRNENCLR);
74+
writel(BIT(offset), gctrl->membase + GPIO_IRNCR);
75+
raw_spin_unlock_irqrestore(&gctrl->lock, flags);
6976
}
7077

7178
static inline void eqbr_cfg_bit(void __iomem *addr,
@@ -92,7 +99,7 @@ static int eqbr_irq_type_cfg(struct gpio_irq_type *type,
9299
return 0;
93100
}
94101

95-
static int eqbr_gpio_set_irq_type(struct irq_data *d, unsigned int type)
102+
static int eqbr_irq_set_type(struct irq_data *d, unsigned int type)
96103
{
97104
struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
98105
struct eqbr_gpio_ctrl *gctrl = gpiochip_get_data(gc);
@@ -166,11 +173,11 @@ static void eqbr_irq_handler(struct irq_desc *desc)
166173

167174
static const struct irq_chip eqbr_irq_chip = {
168175
.name = "gpio_irq",
169-
.irq_mask = eqbr_gpio_disable_irq,
170-
.irq_unmask = eqbr_gpio_enable_irq,
171-
.irq_ack = eqbr_gpio_ack_irq,
172-
.irq_mask_ack = eqbr_gpio_mask_ack_irq,
173-
.irq_set_type = eqbr_gpio_set_irq_type,
176+
.irq_ack = eqbr_irq_ack,
177+
.irq_mask = eqbr_irq_mask,
178+
.irq_mask_ack = eqbr_irq_mask_ack,
179+
.irq_unmask = eqbr_irq_unmask,
180+
.irq_set_type = eqbr_irq_set_type,
174181
.flags = IRQCHIP_IMMUTABLE,
175182
GPIOCHIP_IRQ_RESOURCE_HELPERS,
176183
};

drivers/pinctrl/pinctrl-rockchip.c

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3640,14 +3640,10 @@ static int rockchip_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
36403640
* or the gpio driver hasn't probed yet.
36413641
*/
36423642
scoped_guard(mutex, &bank->deferred_lock) {
3643-
if (!gpio || !gpio->direction_output) {
3644-
rc = rockchip_pinconf_defer_pin(bank,
3645-
pin - bank->pin_base,
3646-
param, arg);
3647-
if (rc)
3648-
return rc;
3649-
break;
3650-
}
3643+
if (!gpio || !gpio->direction_output)
3644+
return rockchip_pinconf_defer_pin(bank,
3645+
pin - bank->pin_base,
3646+
param, arg);
36513647
}
36523648
}
36533649

drivers/pinctrl/qcom/pinctrl-qcs615.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1067,6 +1067,7 @@ static const struct msm_pinctrl_soc_data qcs615_tlmm = {
10671067
.ntiles = ARRAY_SIZE(qcs615_tiles),
10681068
.wakeirq_map = qcs615_pdc_map,
10691069
.nwakeirq_map = ARRAY_SIZE(qcs615_pdc_map),
1070+
.wakeirq_dual_edge_errata = true,
10701071
};
10711072

10721073
static const struct of_device_id qcs615_tlmm_of_match[] = {

drivers/pinctrl/qcom/pinctrl-sdm660-lpass-lpi.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ static const char * const pdm_clk_groups[] = { "gpio18" };
7676
static const char * const pdm_rx_groups[] = { "gpio21", "gpio23", "gpio25" };
7777
static const char * const pdm_sync_groups[] = { "gpio19" };
7878

79-
const struct lpi_pingroup sdm660_lpi_pinctrl_groups[] = {
79+
static const struct lpi_pingroup sdm660_lpi_pinctrl_groups[] = {
8080
LPI_PINGROUP_OFFSET(0, LPI_NO_SLEW, _, _, _, _, 0x0000),
8181
LPI_PINGROUP_OFFSET(1, LPI_NO_SLEW, _, _, _, _, 0x1000),
8282
LPI_PINGROUP_OFFSET(2, LPI_NO_SLEW, _, _, _, _, 0x2000),
@@ -113,7 +113,7 @@ const struct lpi_pingroup sdm660_lpi_pinctrl_groups[] = {
113113
LPI_PINGROUP_OFFSET(31, LPI_NO_SLEW, _, _, _, _, 0xb010),
114114
};
115115

116-
const struct lpi_function sdm660_lpi_pinctrl_functions[] = {
116+
static const struct lpi_function sdm660_lpi_pinctrl_functions[] = {
117117
LPI_FUNCTION(comp_rx),
118118
LPI_FUNCTION(dmic1_clk),
119119
LPI_FUNCTION(dmic1_data),

0 commit comments

Comments
 (0)