@@ -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
4444static 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
5656static 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
9898static 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
233235static 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[] = {
237239MODULE_DEVICE_TABLE (of , pwm_pio_rp1_dt_ids );
238240
239241static 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+ };
247249module_platform_driver (pwm_pio_rp1_driver );
248250
249251MODULE_DESCRIPTION ("PWM PIO RP1 driver" );
0 commit comments