ARM: s3c24xx: Switch to atomic pwm API in rx1950
authorUwe Kleine-König <uwe@kleine-koenig.org>
Mon, 20 Jan 2020 19:33:28 +0000 (20:33 +0100)
committerKrzysztof Kozlowski <krzk@kernel.org>
Tue, 21 Jan 2020 19:56:47 +0000 (20:56 +0100)
Stop using the legacy PWM API which only still exists because there are
some users left.

Note this change make use of the fact that the value of struct
pwm_state::duty_cycle doesn't matter for a disabled PWM and so its value
can stay constant simplifying the code a bit.

A side effect of the conversion is that the pwm isn't stopped in
rx1950_backlight_init() by the call to pwm_apply_args() just before
reenabling it when rx1950_lcd_power(1) is called.

Signed-off-by: Uwe Kleine-König <uwe@kleine-koenig.org>
Reviewed-by: Vasily Khoruzhick <anarsoul@gmail.com>
Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
arch/arm/mach-s3c24xx/mach-rx1950.c

index 29f9b34..03d8f27 100644 (file)
@@ -377,6 +377,7 @@ static struct pwm_lookup rx1950_pwm_lookup[] = {
 };
 
 static struct pwm_device *lcd_pwm;
+static struct pwm_state lcd_pwm_state;
 
 static void rx1950_lcd_power(int enable)
 {
@@ -429,15 +430,16 @@ static void rx1950_lcd_power(int enable)
 
                /* GPB1->OUTPUT, GPB1->0 */
                gpio_direction_output(S3C2410_GPB(1), 0);
-               pwm_config(lcd_pwm, 0, LCD_PWM_PERIOD);
-               pwm_disable(lcd_pwm);
+
+               lcd_pwm_state.enabled = false;
+               pwm_apply_state(lcd_pwm, &lcd_pwm_state);
 
                /* GPC0->0, GPC10->0 */
                gpio_direction_output(S3C2410_GPC(0), 0);
                gpio_direction_output(S3C2410_GPC(10), 0);
        } else {
-               pwm_config(lcd_pwm, LCD_PWM_DUTY, LCD_PWM_PERIOD);
-               pwm_enable(lcd_pwm);
+               lcd_pwm_state.enabled = true;
+               pwm_apply_state(lcd_pwm, &lcd_pwm_state);
 
                gpio_direction_output(S3C2410_GPC(0), 1);
                gpio_direction_output(S3C2410_GPC(5), 1);
@@ -493,10 +495,13 @@ static int rx1950_backlight_init(struct device *dev)
        }
 
        /*
-        * FIXME: pwm_apply_args() should be removed when switching to
-        * the atomic PWM API.
+        * This is only required to initialize .polarity; all other values are
+        * fixed in this driver.
         */
-       pwm_apply_args(lcd_pwm);
+       pwm_init_state(lcd_pwm, &lcd_pwm_state);
+
+       lcd_pwm_state.period = LCD_PWM_PERIOD;
+       lcd_pwm_state.duty_cycle = LCD_PWM_DUTY;
 
        rx1950_lcd_power(1);
        rx1950_bl_power(1);