UPSTREAM: pwm: Introduce the pwm_args concept
[firefly-linux-kernel-4.4.55.git] / drivers / pwm / core.c
index ec84ff8ad1b4a59ebbd9c93ea62edb2f714460f6..cac3a05277c930a23bb709467cc16fdef75d212c 100644 (file)
@@ -128,6 +128,13 @@ static int pwm_device_request(struct pwm_device *pwm, const char *label)
        set_bit(PWMF_REQUESTED, &pwm->flags);
        pwm->label = label;
 
+       /*
+        * FIXME: This should be removed once all PWM users properly make use
+        * of struct pwm_args to initialize the PWM device. As long as this is
+        * here, the PWM state and hardware state can get out of sync.
+        */
+       pwm_apply_args(pwm);
+
        return 0;
 }
 
@@ -146,12 +153,12 @@ of_pwm_xlate_with_flags(struct pwm_chip *pc, const struct of_phandle_args *args)
        if (IS_ERR(pwm))
                return pwm;
 
-       pwm_set_period(pwm, args->args[1]);
+       pwm->args.period = args->args[1];
 
        if (args->args[2] & PWM_POLARITY_INVERTED)
-               pwm_set_polarity(pwm, PWM_POLARITY_INVERSED);
+               pwm->args.polarity = PWM_POLARITY_INVERSED;
        else
-               pwm_set_polarity(pwm, PWM_POLARITY_NORMAL);
+               pwm->args.polarity = PWM_POLARITY_NORMAL;
 
        return pwm;
 }
@@ -172,7 +179,7 @@ of_pwm_simple_xlate(struct pwm_chip *pc, const struct of_phandle_args *args)
        if (IS_ERR(pwm))
                return pwm;
 
-       pwm_set_period(pwm, args->args[1]);
+       pwm->args.period = args->args[1];
 
        return pwm;
 }
@@ -749,13 +756,13 @@ struct pwm_device *pwm_get(struct device *dev, const char *con_id)
        if (!chip)
                goto out;
 
+       pwm->args.period = chosen->period;
+       pwm->args.polarity = chosen->polarity;
+
        pwm = pwm_request_from_chip(chip, chosen->index, con_id ?: dev_id);
        if (IS_ERR(pwm))
                goto out;
 
-       pwm_set_period(pwm, chosen->period);
-       pwm_set_polarity(pwm, chosen->polarity);
-
 out:
        mutex_unlock(&pwm_lookup_lock);
        return pwm;