Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

pinctrl: armada-37xx: Correct PWM pins definitions

The PWM pins on North Bridge on Armada 37xx can be configured into PWM
or GPIO functions. When in PWM function, each pin can also be configured
to drive low on 0 and tri-state on 1 (LED mode).

The current definitions handle this by declaring two pin groups for each
pin:
- group "pwmN" with functions "pwm" and "gpio"
- group "ledN_od" ("od" for open drain) with functions "led" and "gpio"

This is semantically incorrect. The correct definition for each pin
should be one group with three functions: "pwm", "led" and "gpio".

Change the "pwmN" groups to support "led" function.

Remove "ledN_od" groups. This cannot break backwards compatibility with
older device trees: no device tree uses it since there is no PWM driver
for this SOC yet. Also "ledN_od" groups are not even documented.

Fixes: b835d6953009 ("pinctrl: armada-37xx: swap polarity on LED group")
Signed-off-by: Marek Behún <kabel@kernel.org>
Acked-by: Rob Herring <robh@kernel.org>
Link: https://lore.kernel.org/r/20210719112938.27594-1-kabel@kernel.org
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>

authored by

Marek Behún and committed by
Linus Walleij
baf8d689 29d45a64

+12 -12
+4 -4
Documentation/devicetree/bindings/pinctrl/marvell,armada-37xx-pinctrl.txt
··· 43 43 44 44 group pwm0 45 45 - pin 11 (GPIO1-11) 46 - - functions pwm, gpio 46 + - functions pwm, led, gpio 47 47 48 48 group pwm1 49 49 - pin 12 50 - - functions pwm, gpio 50 + - functions pwm, led, gpio 51 51 52 52 group pwm2 53 53 - pin 13 54 - - functions pwm, gpio 54 + - functions pwm, led, gpio 55 55 56 56 group pwm3 57 57 - pin 14 58 - - functions pwm, gpio 58 + - functions pwm, led, gpio 59 59 60 60 group pmic1 61 61 - pin 7
+8 -8
drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
··· 167 167 PIN_GRP_GPIO("jtag", 20, 5, BIT(0), "jtag"), 168 168 PIN_GRP_GPIO("sdio0", 8, 3, BIT(1), "sdio"), 169 169 PIN_GRP_GPIO("emmc_nb", 27, 9, BIT(2), "emmc"), 170 - PIN_GRP_GPIO("pwm0", 11, 1, BIT(3), "pwm"), 171 - PIN_GRP_GPIO("pwm1", 12, 1, BIT(4), "pwm"), 172 - PIN_GRP_GPIO("pwm2", 13, 1, BIT(5), "pwm"), 173 - PIN_GRP_GPIO("pwm3", 14, 1, BIT(6), "pwm"), 170 + PIN_GRP_GPIO_3("pwm0", 11, 1, BIT(3) | BIT(20), 0, BIT(20), BIT(3), 171 + "pwm", "led"), 172 + PIN_GRP_GPIO_3("pwm1", 12, 1, BIT(4) | BIT(21), 0, BIT(21), BIT(4), 173 + "pwm", "led"), 174 + PIN_GRP_GPIO_3("pwm2", 13, 1, BIT(5) | BIT(22), 0, BIT(22), BIT(5), 175 + "pwm", "led"), 176 + PIN_GRP_GPIO_3("pwm3", 14, 1, BIT(6) | BIT(23), 0, BIT(23), BIT(6), 177 + "pwm", "led"), 174 178 PIN_GRP_GPIO("pmic1", 7, 1, BIT(7), "pmic"), 175 179 PIN_GRP_GPIO("pmic0", 6, 1, BIT(8), "pmic"), 176 180 PIN_GRP_GPIO("i2c2", 2, 2, BIT(9), "i2c"), ··· 188 184 PIN_GRP_EXTRA("uart2", 9, 2, BIT(1) | BIT(13) | BIT(14) | BIT(19), 189 185 BIT(1) | BIT(13) | BIT(14), BIT(1) | BIT(19), 190 186 18, 2, "gpio", "uart"), 191 - PIN_GRP_GPIO_2("led0_od", 11, 1, BIT(20), BIT(20), 0, "led"), 192 - PIN_GRP_GPIO_2("led1_od", 12, 1, BIT(21), BIT(21), 0, "led"), 193 - PIN_GRP_GPIO_2("led2_od", 13, 1, BIT(22), BIT(22), 0, "led"), 194 - PIN_GRP_GPIO_2("led3_od", 14, 1, BIT(23), BIT(23), 0, "led"), 195 187 }; 196 188 197 189 static struct armada_37xx_pin_group armada_37xx_sb_groups[] = {