Merge tag 'pwm/for-6.2-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/thierry...
[linux-2.6-microblaze.git] / drivers / leds / rgb / leds-qcom-lpg.c
index 02f51cc..67f48f2 100644 (file)
@@ -602,8 +602,8 @@ static void lpg_brightness_set(struct lpg_led *led, struct led_classdev *cdev,
                lpg_lut_sync(lpg, lut_mask);
 }
 
-static void lpg_brightness_single_set(struct led_classdev *cdev,
-                                     enum led_brightness value)
+static int lpg_brightness_single_set(struct led_classdev *cdev,
+                                    enum led_brightness value)
 {
        struct lpg_led *led = container_of(cdev, struct lpg_led, cdev);
        struct mc_subled info;
@@ -614,10 +614,12 @@ static void lpg_brightness_single_set(struct led_classdev *cdev,
        lpg_brightness_set(led, cdev, &info);
 
        mutex_unlock(&led->lpg->lock);
+
+       return 0;
 }
 
-static void lpg_brightness_mc_set(struct led_classdev *cdev,
-                                 enum led_brightness value)
+static int lpg_brightness_mc_set(struct led_classdev *cdev,
+                                enum led_brightness value)
 {
        struct led_classdev_mc *mc = lcdev_to_mccdev(cdev);
        struct lpg_led *led = container_of(mc, struct lpg_led, mcdev);
@@ -628,6 +630,8 @@ static void lpg_brightness_mc_set(struct led_classdev *cdev,
        lpg_brightness_set(led, cdev, mc->subled_info);
 
        mutex_unlock(&led->lpg->lock);
+
+       return 0;
 }
 
 static int lpg_blink_set(struct lpg_led *led,
@@ -968,8 +972,8 @@ out_unlock:
        return ret;
 }
 
-static void lpg_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
-                             struct pwm_state *state)
+static int lpg_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
+                            struct pwm_state *state)
 {
        struct lpg *lpg = container_of(chip, struct lpg, pwm);
        struct lpg_channel *chan = &lpg->channels[pwm->hwpwm];
@@ -982,20 +986,20 @@ static void lpg_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
 
        ret = regmap_read(lpg->map, chan->base + LPG_SIZE_CLK_REG, &val);
        if (ret)
-               return;
+               return ret;
 
        refclk = lpg_clk_rates[val & PWM_CLK_SELECT_MASK];
        if (refclk) {
                ret = regmap_read(lpg->map, chan->base + LPG_PREDIV_CLK_REG, &val);
                if (ret)
-                       return;
+                       return ret;
 
                pre_div = lpg_pre_divs[FIELD_GET(PWM_FREQ_PRE_DIV_MASK, val)];
                m = FIELD_GET(PWM_FREQ_EXP_MASK, val);
 
                ret = regmap_bulk_read(lpg->map, chan->base + PWM_VALUE_REG, &pwm_value, sizeof(pwm_value));
                if (ret)
-                       return;
+                       return ret;
 
                state->period = DIV_ROUND_UP_ULL((u64)NSEC_PER_SEC * LPG_RESOLUTION * pre_div * (1 << m), refclk);
                state->duty_cycle = DIV_ROUND_UP_ULL((u64)NSEC_PER_SEC * pwm_value * pre_div * (1 << m), refclk);
@@ -1006,13 +1010,15 @@ static void lpg_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
 
        ret = regmap_read(lpg->map, chan->base + PWM_ENABLE_CONTROL_REG, &val);
        if (ret)
-               return;
+               return ret;
 
        state->enabled = FIELD_GET(LPG_ENABLE_CONTROL_OUTPUT, val);
        state->polarity = PWM_POLARITY_NORMAL;
 
        if (state->duty_cycle > state->period)
                state->duty_cycle = state->period;
+
+       return 0;
 }
 
 static const struct pwm_ops lpg_pwm_ops = {
@@ -1118,7 +1124,7 @@ static int lpg_add_led(struct lpg *lpg, struct device_node *np)
                led->mcdev.num_colors = num_channels;
 
                cdev = &led->mcdev.led_cdev;
-               cdev->brightness_set = lpg_brightness_mc_set;
+               cdev->brightness_set_blocking = lpg_brightness_mc_set;
                cdev->blink_set = lpg_blink_mc_set;
 
                /* Register pattern accessors only if we have a LUT block */
@@ -1132,7 +1138,7 @@ static int lpg_add_led(struct lpg *lpg, struct device_node *np)
                        return ret;
 
                cdev = &led->cdev;
-               cdev->brightness_set = lpg_brightness_single_set;
+               cdev->brightness_set_blocking = lpg_brightness_single_set;
                cdev->blink_set = lpg_blink_single_set;
 
                /* Register pattern accessors only if we have a LUT block */
@@ -1151,7 +1157,7 @@ static int lpg_add_led(struct lpg *lpg, struct device_node *np)
        else
                cdev->brightness = LED_OFF;
 
-       cdev->brightness_set(cdev, cdev->brightness);
+       cdev->brightness_set_blocking(cdev, cdev->brightness);
 
        init_data.fwnode = of_fwnode_handle(np);