pwm: Let pwm_get_state() return the last implemented state
authorUwe Kleine-König <uwe@kleine-koenig.org>
Sat, 24 Aug 2019 15:37:03 +0000 (17:37 +0200)
committerThierry Reding <thierry.reding@gmail.com>
Fri, 20 Sep 2019 23:48:54 +0000 (01:48 +0200)
When pwm_apply_state() is called the lowlevel driver usually has to
apply some rounding because the hardware doesn't support nanosecond
resolution. So let pwm_get_state() return the actually implemented state
instead of the last applied one if possible.

Signed-off-by: Uwe Kleine-König <uwe@kleine-koenig.org>
Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
drivers/pwm/core.c

index 4ab683a..449ba16 100644 (file)
@@ -474,7 +474,14 @@ int pwm_apply_state(struct pwm_device *pwm, struct pwm_state *state)
                if (err)
                        return err;
 
-               pwm->state = *state;
+               /*
+                * .apply might have to round some values in *state, if possible
+                * read the actually implemented value back.
+                */
+               if (chip->ops->get_state)
+                       chip->ops->get_state(chip, pwm, &pwm->state);
+               else
+                       pwm->state = *state;
        } else {
                /*
                 * FIXME: restore the initial state in case of error.