Skip to content

Commit 4aae44f

Browse files
vzapolskiythierryreding
authored andcommitted
pwm: lpc32xx: Remove handling of PWM channels
Because LPC32xx PWM controllers have only a single output which is registered as the only PWM device/channel per controller, it is known in advance that pwm->hwpwm value is always 0. On basis of this fact simplify the code by removing operations with pwm->hwpwm, there is no controls which require channel number as input. Even though I wasn't aware at the time when I forward ported that patch, this fixes a null pointer dereference as lpc32xx->chip.pwms is NULL before devm_pwmchip_add() is called. Reported-by: Dan Carpenter <dan.carpenter@linaro.org> Signed-off-by: Vladimir Zapolskiy <vz@mleia.com> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Fixes: 3d2813f ("pwm: lpc32xx: Don't modify HW state in .probe() after the PWM chip was registered") Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
1 parent b22bb0d commit 4aae44f

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

drivers/pwm/pwm-lpc32xx.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,10 @@ static int lpc32xx_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,
5151
if (duty_cycles > 255)
5252
duty_cycles = 255;
5353

54-
val = readl(lpc32xx->base + (pwm->hwpwm << 2));
54+
val = readl(lpc32xx->base);
5555
val &= ~0xFFFF;
5656
val |= (period_cycles << 8) | duty_cycles;
57-
writel(val, lpc32xx->base + (pwm->hwpwm << 2));
57+
writel(val, lpc32xx->base);
5858

5959
return 0;
6060
}
@@ -69,9 +69,9 @@ static int lpc32xx_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm)
6969
if (ret)
7070
return ret;
7171

72-
val = readl(lpc32xx->base + (pwm->hwpwm << 2));
72+
val = readl(lpc32xx->base);
7373
val |= PWM_ENABLE;
74-
writel(val, lpc32xx->base + (pwm->hwpwm << 2));
74+
writel(val, lpc32xx->base);
7575

7676
return 0;
7777
}
@@ -81,9 +81,9 @@ static void lpc32xx_pwm_disable(struct pwm_chip *chip, struct pwm_device *pwm)
8181
struct lpc32xx_pwm_chip *lpc32xx = to_lpc32xx_pwm_chip(chip);
8282
u32 val;
8383

84-
val = readl(lpc32xx->base + (pwm->hwpwm << 2));
84+
val = readl(lpc32xx->base);
8585
val &= ~PWM_ENABLE;
86-
writel(val, lpc32xx->base + (pwm->hwpwm << 2));
86+
writel(val, lpc32xx->base);
8787

8888
clk_disable_unprepare(lpc32xx->clk);
8989
}
@@ -141,9 +141,9 @@ static int lpc32xx_pwm_probe(struct platform_device *pdev)
141141
lpc32xx->chip.npwm = 1;
142142

143143
/* If PWM is disabled, configure the output to the default value */
144-
val = readl(lpc32xx->base + (lpc32xx->chip.pwms[0].hwpwm << 2));
144+
val = readl(lpc32xx->base);
145145
val &= ~PWM_PIN_LEVEL;
146-
writel(val, lpc32xx->base + (lpc32xx->chip.pwms[0].hwpwm << 2));
146+
writel(val, lpc32xx->base);
147147

148148
ret = devm_pwmchip_add(&pdev->dev, &lpc32xx->chip);
149149
if (ret < 0) {

0 commit comments

Comments
 (0)