Commit 85951e19 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull pin control fixes from Linus Walleij:

 - Fix potential NULL dereference in the i.MX driver

 - Fix the pull up/down resistor values in the Meson driver

 - Fix the mapping of the PHY LED pins in the Airhoa driver

 - Fix EINT interrupts on older controllers and a debounce value issue
   in the Mediatek driver

 - Fix an erronoeus PINGROUP define in the Qualcomm driver

* tag 'pinctrl-v6.15-2' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl:
  pinctrl: qcom: Fix PINGROUP definition for sm8750
  pinctrl: mediatek: common-v1: Fix error checking in mtk_eint_init()
  pinctrl: mediatek: Fix new design debounce issue
  pinctrl: mediatek: common-v1: Fix EINT breakage on older controllers
  pinctrl: airoha: fix wrong PHY LED mapping and PHY2 LED defines
  pinctrl: meson: define the pull up/down resistor value as 60 kOhm
  pinctrl: imx: Return NULL if no group is matched and found
parents 81648517 12b8a672
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -37,16 +37,16 @@ static inline const struct group_desc *imx_pinctrl_find_group_by_name(
				struct pinctrl_dev *pctldev,
				const char *name)
{
	const struct group_desc *grp = NULL;
	const struct group_desc *grp;
	int i;

	for (i = 0; i < pctldev->num_groups; i++) {
		grp = pinctrl_generic_get_group(pctldev, i);
		if (grp && !strcmp(grp->grp.name, name))
			break;
			return grp;
	}

	return grp;
	return NULL;
}

static void imx_pin_dbg_show(struct pinctrl_dev *pctldev, struct seq_file *s,
+1 −1
Original line number Diff line number Diff line
@@ -449,7 +449,7 @@ int mtk_eint_set_debounce(struct mtk_eint *eint, unsigned long eint_num,
		return -EOPNOTSUPP;

	virq = irq_find_mapping(eint->domain, eint_num);
	eint_offset = (eint_num % 4) * 8;
	eint_offset = (idx % 4) * 8;
	d = irq_get_irq_data(virq);

	set_offset = (idx / 4) * 4 + eint->regs->dbnc_set;
+70 −89
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@
 */

#include <dt-bindings/pinctrl/mt65xx.h>
#include <linux/bitfield.h>
#include <linux/bits.h>
#include <linux/cleanup.h>
#include <linux/gpio/driver.h>
@@ -112,39 +113,19 @@
#define REG_LAN_LED1_MAPPING			0x0280

#define LAN4_LED_MAPPING_MASK			GENMASK(18, 16)
#define LAN4_PHY4_LED_MAP			BIT(18)
#define LAN4_PHY2_LED_MAP			BIT(17)
#define LAN4_PHY1_LED_MAP			BIT(16)
#define LAN4_PHY0_LED_MAP			0
#define LAN4_PHY3_LED_MAP			GENMASK(17, 16)
#define LAN4_PHY_LED_MAP(_n)			FIELD_PREP_CONST(LAN4_LED_MAPPING_MASK, (_n))

#define LAN3_LED_MAPPING_MASK			GENMASK(14, 12)
#define LAN3_PHY4_LED_MAP			BIT(14)
#define LAN3_PHY2_LED_MAP			BIT(13)
#define LAN3_PHY1_LED_MAP			BIT(12)
#define LAN3_PHY0_LED_MAP			0
#define LAN3_PHY3_LED_MAP			GENMASK(13, 12)
#define LAN3_PHY_LED_MAP(_n)			FIELD_PREP_CONST(LAN3_LED_MAPPING_MASK, (_n))

#define LAN2_LED_MAPPING_MASK			GENMASK(10, 8)
#define LAN2_PHY4_LED_MAP			BIT(12)
#define LAN2_PHY2_LED_MAP			BIT(11)
#define LAN2_PHY1_LED_MAP			BIT(10)
#define LAN2_PHY0_LED_MAP			0
#define LAN2_PHY3_LED_MAP			GENMASK(11, 10)
#define LAN2_PHY_LED_MAP(_n)			FIELD_PREP_CONST(LAN2_LED_MAPPING_MASK, (_n))

#define LAN1_LED_MAPPING_MASK			GENMASK(6, 4)
#define LAN1_PHY4_LED_MAP			BIT(6)
#define LAN1_PHY2_LED_MAP			BIT(5)
#define LAN1_PHY1_LED_MAP			BIT(4)
#define LAN1_PHY0_LED_MAP			0
#define LAN1_PHY3_LED_MAP			GENMASK(5, 4)
#define LAN1_PHY_LED_MAP(_n)			FIELD_PREP_CONST(LAN1_LED_MAPPING_MASK, (_n))

#define LAN0_LED_MAPPING_MASK			GENMASK(2, 0)
#define LAN0_PHY4_LED_MAP			BIT(3)
#define LAN0_PHY2_LED_MAP			BIT(2)
#define LAN0_PHY1_LED_MAP			BIT(1)
#define LAN0_PHY0_LED_MAP			0
#define LAN0_PHY3_LED_MAP			GENMASK(2, 1)
#define LAN0_PHY_LED_MAP(_n)			FIELD_PREP_CONST(LAN0_LED_MAPPING_MASK, (_n))

/* CONF */
#define REG_I2C_SDA_E2				0x001c
@@ -1476,8 +1457,8 @@ static const struct airoha_pinctrl_func_group phy1_led0_func_group[] = {
		.regmap[1] = {
			AIROHA_FUNC_MUX,
			REG_LAN_LED0_MAPPING,
			LAN1_LED_MAPPING_MASK,
			LAN1_PHY1_LED_MAP
			LAN0_LED_MAPPING_MASK,
			LAN0_PHY_LED_MAP(0)
		},
		.regmap_size = 2,
	}, {
@@ -1491,8 +1472,8 @@ static const struct airoha_pinctrl_func_group phy1_led0_func_group[] = {
		.regmap[1] = {
			AIROHA_FUNC_MUX,
			REG_LAN_LED0_MAPPING,
			LAN2_LED_MAPPING_MASK,
			LAN2_PHY1_LED_MAP
			LAN1_LED_MAPPING_MASK,
			LAN1_PHY_LED_MAP(0)
		},
		.regmap_size = 2,
	}, {
@@ -1506,8 +1487,8 @@ static const struct airoha_pinctrl_func_group phy1_led0_func_group[] = {
		.regmap[1] = {
			AIROHA_FUNC_MUX,
			REG_LAN_LED0_MAPPING,
			LAN3_LED_MAPPING_MASK,
			LAN3_PHY1_LED_MAP
			LAN2_LED_MAPPING_MASK,
			LAN2_PHY_LED_MAP(0)
		},
		.regmap_size = 2,
	}, {
@@ -1521,8 +1502,8 @@ static const struct airoha_pinctrl_func_group phy1_led0_func_group[] = {
		.regmap[1] = {
			AIROHA_FUNC_MUX,
			REG_LAN_LED0_MAPPING,
			LAN4_LED_MAPPING_MASK,
			LAN4_PHY1_LED_MAP
			LAN3_LED_MAPPING_MASK,
			LAN3_PHY_LED_MAP(0)
		},
		.regmap_size = 2,
	},
@@ -1540,8 +1521,8 @@ static const struct airoha_pinctrl_func_group phy2_led0_func_group[] = {
		.regmap[1] = {
			AIROHA_FUNC_MUX,
			REG_LAN_LED0_MAPPING,
			LAN1_LED_MAPPING_MASK,
			LAN1_PHY2_LED_MAP
			LAN0_LED_MAPPING_MASK,
			LAN0_PHY_LED_MAP(1)
		},
		.regmap_size = 2,
	}, {
@@ -1555,8 +1536,8 @@ static const struct airoha_pinctrl_func_group phy2_led0_func_group[] = {
		.regmap[1] = {
			AIROHA_FUNC_MUX,
			REG_LAN_LED0_MAPPING,
			LAN2_LED_MAPPING_MASK,
			LAN2_PHY2_LED_MAP
			LAN1_LED_MAPPING_MASK,
			LAN1_PHY_LED_MAP(1)
		},
		.regmap_size = 2,
	}, {
@@ -1570,8 +1551,8 @@ static const struct airoha_pinctrl_func_group phy2_led0_func_group[] = {
		.regmap[1] = {
			AIROHA_FUNC_MUX,
			REG_LAN_LED0_MAPPING,
			LAN3_LED_MAPPING_MASK,
			LAN3_PHY2_LED_MAP
			LAN2_LED_MAPPING_MASK,
			LAN2_PHY_LED_MAP(1)
		},
		.regmap_size = 2,
	}, {
@@ -1585,8 +1566,8 @@ static const struct airoha_pinctrl_func_group phy2_led0_func_group[] = {
		.regmap[1] = {
			AIROHA_FUNC_MUX,
			REG_LAN_LED0_MAPPING,
			LAN4_LED_MAPPING_MASK,
			LAN4_PHY2_LED_MAP
			LAN3_LED_MAPPING_MASK,
			LAN3_PHY_LED_MAP(1)
		},
		.regmap_size = 2,
	},
@@ -1604,8 +1585,8 @@ static const struct airoha_pinctrl_func_group phy3_led0_func_group[] = {
		.regmap[1] = {
			AIROHA_FUNC_MUX,
			REG_LAN_LED0_MAPPING,
			LAN1_LED_MAPPING_MASK,
			LAN1_PHY3_LED_MAP
			LAN0_LED_MAPPING_MASK,
			LAN0_PHY_LED_MAP(2)
		},
		.regmap_size = 2,
	}, {
@@ -1619,8 +1600,8 @@ static const struct airoha_pinctrl_func_group phy3_led0_func_group[] = {
		.regmap[1] = {
			AIROHA_FUNC_MUX,
			REG_LAN_LED0_MAPPING,
			LAN2_LED_MAPPING_MASK,
			LAN2_PHY3_LED_MAP
			LAN1_LED_MAPPING_MASK,
			LAN1_PHY_LED_MAP(2)
		},
		.regmap_size = 2,
	}, {
@@ -1634,8 +1615,8 @@ static const struct airoha_pinctrl_func_group phy3_led0_func_group[] = {
		.regmap[1] = {
			AIROHA_FUNC_MUX,
			REG_LAN_LED0_MAPPING,
			LAN3_LED_MAPPING_MASK,
			LAN3_PHY3_LED_MAP
			LAN2_LED_MAPPING_MASK,
			LAN2_PHY_LED_MAP(2)
		},
		.regmap_size = 2,
	}, {
@@ -1649,8 +1630,8 @@ static const struct airoha_pinctrl_func_group phy3_led0_func_group[] = {
		.regmap[1] = {
			AIROHA_FUNC_MUX,
			REG_LAN_LED0_MAPPING,
			LAN4_LED_MAPPING_MASK,
			LAN4_PHY3_LED_MAP
			LAN3_LED_MAPPING_MASK,
			LAN3_PHY_LED_MAP(2)
		},
		.regmap_size = 2,
	},
@@ -1668,8 +1649,8 @@ static const struct airoha_pinctrl_func_group phy4_led0_func_group[] = {
		.regmap[1] = {
			AIROHA_FUNC_MUX,
			REG_LAN_LED0_MAPPING,
			LAN1_LED_MAPPING_MASK,
			LAN1_PHY4_LED_MAP
			LAN0_LED_MAPPING_MASK,
			LAN0_PHY_LED_MAP(3)
		},
		.regmap_size = 2,
	}, {
@@ -1683,8 +1664,8 @@ static const struct airoha_pinctrl_func_group phy4_led0_func_group[] = {
		.regmap[1] = {
			AIROHA_FUNC_MUX,
			REG_LAN_LED0_MAPPING,
			LAN2_LED_MAPPING_MASK,
			LAN2_PHY4_LED_MAP
			LAN1_LED_MAPPING_MASK,
			LAN1_PHY_LED_MAP(3)
		},
		.regmap_size = 2,
	}, {
@@ -1698,8 +1679,8 @@ static const struct airoha_pinctrl_func_group phy4_led0_func_group[] = {
		.regmap[1] = {
			AIROHA_FUNC_MUX,
			REG_LAN_LED0_MAPPING,
			LAN3_LED_MAPPING_MASK,
			LAN3_PHY4_LED_MAP
			LAN2_LED_MAPPING_MASK,
			LAN2_PHY_LED_MAP(3)
		},
		.regmap_size = 2,
	}, {
@@ -1713,8 +1694,8 @@ static const struct airoha_pinctrl_func_group phy4_led0_func_group[] = {
		.regmap[1] = {
			AIROHA_FUNC_MUX,
			REG_LAN_LED0_MAPPING,
			LAN4_LED_MAPPING_MASK,
			LAN4_PHY4_LED_MAP
			LAN3_LED_MAPPING_MASK,
			LAN3_PHY_LED_MAP(3)
		},
		.regmap_size = 2,
	},
@@ -1732,8 +1713,8 @@ static const struct airoha_pinctrl_func_group phy1_led1_func_group[] = {
		.regmap[1] = {
			AIROHA_FUNC_MUX,
			REG_LAN_LED1_MAPPING,
			LAN1_LED_MAPPING_MASK,
			LAN1_PHY1_LED_MAP
			LAN0_LED_MAPPING_MASK,
			LAN0_PHY_LED_MAP(0)
		},
		.regmap_size = 2,
	}, {
@@ -1747,8 +1728,8 @@ static const struct airoha_pinctrl_func_group phy1_led1_func_group[] = {
		.regmap[1] = {
			AIROHA_FUNC_MUX,
			REG_LAN_LED1_MAPPING,
			LAN2_LED_MAPPING_MASK,
			LAN2_PHY1_LED_MAP
			LAN1_LED_MAPPING_MASK,
			LAN1_PHY_LED_MAP(0)
		},
		.regmap_size = 2,
	}, {
@@ -1762,8 +1743,8 @@ static const struct airoha_pinctrl_func_group phy1_led1_func_group[] = {
		.regmap[1] = {
			AIROHA_FUNC_MUX,
			REG_LAN_LED1_MAPPING,
			LAN3_LED_MAPPING_MASK,
			LAN3_PHY1_LED_MAP
			LAN2_LED_MAPPING_MASK,
			LAN2_PHY_LED_MAP(0)
		},
		.regmap_size = 2,
	}, {
@@ -1777,8 +1758,8 @@ static const struct airoha_pinctrl_func_group phy1_led1_func_group[] = {
		.regmap[1] = {
			AIROHA_FUNC_MUX,
			REG_LAN_LED1_MAPPING,
			LAN4_LED_MAPPING_MASK,
			LAN4_PHY1_LED_MAP
			LAN3_LED_MAPPING_MASK,
			LAN3_PHY_LED_MAP(0)
		},
		.regmap_size = 2,
	},
@@ -1796,8 +1777,8 @@ static const struct airoha_pinctrl_func_group phy2_led1_func_group[] = {
		.regmap[1] = {
			AIROHA_FUNC_MUX,
			REG_LAN_LED1_MAPPING,
			LAN1_LED_MAPPING_MASK,
			LAN1_PHY2_LED_MAP
			LAN0_LED_MAPPING_MASK,
			LAN0_PHY_LED_MAP(1)
		},
		.regmap_size = 2,
	}, {
@@ -1811,8 +1792,8 @@ static const struct airoha_pinctrl_func_group phy2_led1_func_group[] = {
		.regmap[1] = {
			AIROHA_FUNC_MUX,
			REG_LAN_LED1_MAPPING,
			LAN2_LED_MAPPING_MASK,
			LAN2_PHY2_LED_MAP
			LAN1_LED_MAPPING_MASK,
			LAN1_PHY_LED_MAP(1)
		},
		.regmap_size = 2,
	}, {
@@ -1826,8 +1807,8 @@ static const struct airoha_pinctrl_func_group phy2_led1_func_group[] = {
		.regmap[1] = {
			AIROHA_FUNC_MUX,
			REG_LAN_LED1_MAPPING,
			LAN3_LED_MAPPING_MASK,
			LAN3_PHY2_LED_MAP
			LAN2_LED_MAPPING_MASK,
			LAN2_PHY_LED_MAP(1)
		},
		.regmap_size = 2,
	}, {
@@ -1841,8 +1822,8 @@ static const struct airoha_pinctrl_func_group phy2_led1_func_group[] = {
		.regmap[1] = {
			AIROHA_FUNC_MUX,
			REG_LAN_LED1_MAPPING,
			LAN4_LED_MAPPING_MASK,
			LAN4_PHY2_LED_MAP
			LAN3_LED_MAPPING_MASK,
			LAN3_PHY_LED_MAP(1)
		},
		.regmap_size = 2,
	},
@@ -1860,8 +1841,8 @@ static const struct airoha_pinctrl_func_group phy3_led1_func_group[] = {
		.regmap[1] = {
			AIROHA_FUNC_MUX,
			REG_LAN_LED1_MAPPING,
			LAN1_LED_MAPPING_MASK,
			LAN1_PHY3_LED_MAP
			LAN0_LED_MAPPING_MASK,
			LAN0_PHY_LED_MAP(2)
		},
		.regmap_size = 2,
	}, {
@@ -1875,8 +1856,8 @@ static const struct airoha_pinctrl_func_group phy3_led1_func_group[] = {
		.regmap[1] = {
			AIROHA_FUNC_MUX,
			REG_LAN_LED1_MAPPING,
			LAN2_LED_MAPPING_MASK,
			LAN2_PHY3_LED_MAP
			LAN1_LED_MAPPING_MASK,
			LAN1_PHY_LED_MAP(2)
		},
		.regmap_size = 2,
	}, {
@@ -1890,8 +1871,8 @@ static const struct airoha_pinctrl_func_group phy3_led1_func_group[] = {
		.regmap[1] = {
			AIROHA_FUNC_MUX,
			REG_LAN_LED1_MAPPING,
			LAN3_LED_MAPPING_MASK,
			LAN3_PHY3_LED_MAP
			LAN2_LED_MAPPING_MASK,
			LAN2_PHY_LED_MAP(2)
		},
		.regmap_size = 2,
	}, {
@@ -1905,8 +1886,8 @@ static const struct airoha_pinctrl_func_group phy3_led1_func_group[] = {
		.regmap[1] = {
			AIROHA_FUNC_MUX,
			REG_LAN_LED1_MAPPING,
			LAN4_LED_MAPPING_MASK,
			LAN4_PHY3_LED_MAP
			LAN3_LED_MAPPING_MASK,
			LAN3_PHY_LED_MAP(2)
		},
		.regmap_size = 2,
	},
@@ -1924,8 +1905,8 @@ static const struct airoha_pinctrl_func_group phy4_led1_func_group[] = {
		.regmap[1] = {
			AIROHA_FUNC_MUX,
			REG_LAN_LED1_MAPPING,
			LAN1_LED_MAPPING_MASK,
			LAN1_PHY4_LED_MAP
			LAN0_LED_MAPPING_MASK,
			LAN0_PHY_LED_MAP(3)
		},
		.regmap_size = 2,
	}, {
@@ -1939,8 +1920,8 @@ static const struct airoha_pinctrl_func_group phy4_led1_func_group[] = {
		.regmap[1] = {
			AIROHA_FUNC_MUX,
			REG_LAN_LED1_MAPPING,
			LAN2_LED_MAPPING_MASK,
			LAN2_PHY4_LED_MAP
			LAN1_LED_MAPPING_MASK,
			LAN1_PHY_LED_MAP(3)
		},
		.regmap_size = 2,
	}, {
@@ -1954,8 +1935,8 @@ static const struct airoha_pinctrl_func_group phy4_led1_func_group[] = {
		.regmap[1] = {
			AIROHA_FUNC_MUX,
			REG_LAN_LED1_MAPPING,
			LAN3_LED_MAPPING_MASK,
			LAN3_PHY4_LED_MAP
			LAN2_LED_MAPPING_MASK,
			LAN2_PHY_LED_MAP(3)
		},
		.regmap_size = 2,
	}, {
@@ -1969,8 +1950,8 @@ static const struct airoha_pinctrl_func_group phy4_led1_func_group[] = {
		.regmap[1] = {
			AIROHA_FUNC_MUX,
			REG_LAN_LED1_MAPPING,
			LAN4_LED_MAPPING_MASK,
			LAN4_PHY4_LED_MAP
			LAN3_LED_MAPPING_MASK,
			LAN3_PHY_LED_MAP(3)
		},
		.regmap_size = 2,
	},
+9 −3
Original line number Diff line number Diff line
@@ -1015,9 +1015,15 @@ static int mtk_eint_init(struct mtk_pinctrl *pctl, struct platform_device *pdev)
	if (!pctl->eint)
		return -ENOMEM;

	pctl->eint->base = devm_platform_ioremap_resource(pdev, 0);
	if (IS_ERR(pctl->eint->base))
		return PTR_ERR(pctl->eint->base);
	pctl->eint->nbase = 1;
	/* mtk-eint expects an array */
	pctl->eint->base = devm_kzalloc(pctl->dev, sizeof(pctl->eint->base), GFP_KERNEL);
	if (!pctl->eint->base)
		return -ENOMEM;

	pctl->eint->base[0] = devm_platform_ioremap_resource(pdev, 0);
	if (IS_ERR(pctl->eint->base[0]))
		return PTR_ERR(pctl->eint->base[0]);

	pctl->eint->irq = irq_of_parse_and_map(np, 0);
	if (!pctl->eint->irq)
+1 −1
Original line number Diff line number Diff line
@@ -487,7 +487,7 @@ static int meson_pinconf_get(struct pinctrl_dev *pcdev, unsigned int pin,
	case PIN_CONFIG_BIAS_PULL_DOWN:
	case PIN_CONFIG_BIAS_PULL_UP:
		if (meson_pinconf_get_pull(pc, pin) == param)
			arg = 1;
			arg = 60000;
		else
			return -EINVAL;
		break;
Loading