Skip to content

Commit fd50120

Browse files
committed
pwm: pwm-pio-rp1.c: Update driver
Update driver to match the rpi 6.13 linux repository analog driver. Since pwm interface was backported to this version, this driver was no longer matching the interface. Signed-off-by: Alisa-Dariana Roman <[email protected]>
1 parent e80bafa commit fd50120

File tree

1 file changed

+27
-25
lines changed

1 file changed

+27
-25
lines changed

drivers/pwm/pwm-pio-rp1.c

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ struct pwm_pio_rp1 {
3030
uint sm;
3131
uint offset;
3232
uint gpio;
33-
uint32_t period; /* In SM cycles */
34-
uint32_t duty_cycle; /* In SM cycles */
33+
uint32_t period; /* In SM cycles */
34+
uint32_t duty_cycle; /* In SM cycles */
3535
enum pwm_polarity polarity;
3636
bool enabled;
3737
};
@@ -42,15 +42,15 @@ struct pwm_pio_rp1 {
4242
#define pwm_loop_ticks 3
4343

4444
static const uint16_t pwm_program_instructions[] = {
45-
// .wrap_target
45+
// .wrap_target
4646
0x9080, // 0: pull noblock side 0
4747
0xa027, // 1: mov x, osr
4848
0xa046, // 2: mov y, isr
4949
0x00a5, // 3: jmp x != y, 5
5050
0x1806, // 4: jmp 6 side 1
5151
0xa042, // 5: nop
5252
0x0083, // 6: jmp y--, 3
53-
// .wrap
53+
// .wrap
5454
};
5555

5656
static const struct pio_program pwm_program = {
@@ -96,7 +96,7 @@ static void pio_pwm_set_level(PIO pio, uint sm, uint32_t level)
9696
}
9797

9898
static int pwm_pio_rp1_apply(struct pwm_chip *chip, struct pwm_device *pwm,
99-
const struct pwm_state *state)
99+
const struct pwm_state *state)
100100
{
101101
struct pwm_pio_rp1 *ppwm = container_of(chip, struct pwm_pio_rp1, chip);
102102
uint32_t new_duty_cycle;
@@ -131,8 +131,10 @@ static int pwm_pio_rp1_apply(struct pwm_chip *chip, struct pwm_device *pwm,
131131

132132
if (state->polarity != ppwm->polarity) {
133133
pio_gpio_set_outover(ppwm->pio, ppwm->gpio,
134-
(state->polarity == PWM_POLARITY_INVERSED) ?
135-
GPIO_OVERRIDE_INVERT : GPIO_OVERRIDE_NORMAL);
134+
(state->polarity ==
135+
PWM_POLARITY_INVERSED) ?
136+
GPIO_OVERRIDE_INVERT :
137+
GPIO_OVERRIDE_NORMAL);
136138
ppwm->polarity = state->polarity;
137139
}
138140

@@ -159,11 +161,11 @@ static int pwm_pio_rp1_probe(struct platform_device *pdev)
159161
struct pwm_chip *chip;
160162
bool is_rp1;
161163

162-
ppwm = devm_kzalloc(dev, sizeof(*ppwm), GFP_KERNEL);
163-
if (IS_ERR(ppwm))
164-
return PTR_ERR(ppwm);
164+
chip = devm_pwmchip_alloc(dev, 1, sizeof(*ppwm));
165+
if (IS_ERR(chip))
166+
return PTR_ERR(chip);
165167

166-
chip = &ppwm->chip;
168+
ppwm = pwmchip_get_drvdata(chip);
167169

168170
mutex_init(&ppwm->mutex);
169171

@@ -182,8 +184,7 @@ static int pwm_pio_rp1_probe(struct platform_device *pdev)
182184
is_rp1 = of_device_is_compatible(of_args.np, "raspberrypi,rp1-gpio");
183185
of_node_put(of_args.np);
184186
if (!is_rp1 || of_args.args_count != 2)
185-
return dev_err_probe(dev, -EINVAL,
186-
"not an RP1 gpio\n");
187+
return dev_err_probe(dev, -EINVAL, "not an RP1 gpio\n");
187188

188189
ppwm->gpio = of_args.args[0];
189190

@@ -196,8 +197,7 @@ static int pwm_pio_rp1_probe(struct platform_device *pdev)
196197
ppwm->sm = pio_claim_unused_sm(ppwm->pio, false);
197198
if ((int)ppwm->sm < 0) {
198199
pio_close(ppwm->pio);
199-
return dev_err_probe(dev, -EBUSY,
200-
"%pfw: no free PIO SM\n",
200+
return dev_err_probe(dev, -EBUSY, "%pfw: no free PIO SM\n",
201201
dev_fwnode(dev));
202202
}
203203

@@ -211,9 +211,9 @@ static int pwm_pio_rp1_probe(struct platform_device *pdev)
211211

212212
pwm_program_init(ppwm->pio, ppwm->sm, ppwm->offset, ppwm->gpio);
213213

214-
pwm_pio_resolution = (1000u * 1000 * 1000 * pwm_loop_ticks) / clock_get_hz(clk_sys);
214+
pwm_pio_resolution =
215+
(1000u * 1000 * 1000 * pwm_loop_ticks) / clock_get_hz(clk_sys);
215216

216-
chip->dev = dev;
217217
chip->ops = &pwm_pio_rp1_ops;
218218
chip->atomic = true;
219219
chip->npwm = 1;
@@ -223,11 +223,13 @@ static int pwm_pio_rp1_probe(struct platform_device *pdev)
223223
return devm_pwmchip_add(dev, chip);
224224
}
225225

226-
static void pwm_pio_rp1_remove(struct platform_device *pdev)
226+
static int pwm_pio_rp1_remove(struct platform_device *pdev)
227227
{
228228
struct pwm_pio_rp1 *ppwm = platform_get_drvdata(pdev);
229229

230230
pio_close(ppwm->pio);
231+
232+
return 0;
231233
}
232234

233235
static const struct of_device_id pwm_pio_rp1_dt_ids[] = {
@@ -237,13 +239,13 @@ static const struct of_device_id pwm_pio_rp1_dt_ids[] = {
237239
MODULE_DEVICE_TABLE(of, pwm_pio_rp1_dt_ids);
238240

239241
static struct platform_driver pwm_pio_rp1_driver = {
240-
.driver = {
241-
.name = "pwm-pio-rp1",
242-
.of_match_table = pwm_pio_rp1_dt_ids,
243-
},
244-
.probe = pwm_pio_rp1_probe,
245-
.remove_new = pwm_pio_rp1_remove,
246-
};
242+
.driver = {
243+
.name = "pwm-pio-rp1",
244+
.of_match_table = pwm_pio_rp1_dt_ids,
245+
},
246+
.probe = pwm_pio_rp1_probe,
247+
.remove = pwm_pio_rp1_remove,
248+
};
247249
module_platform_driver(pwm_pio_rp1_driver);
248250

249251
MODULE_DESCRIPTION("PWM PIO RP1 driver");

0 commit comments

Comments
 (0)