diff options
author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2017-01-19 16:52:49 -0500 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2017-01-22 03:26:36 -0500 |
commit | 2de8b4110c82c243530a68381a1c39a4fe05c14f (patch) | |
tree | 523add2ef629c3e70a7eb515aa18069ff1eea78c /drivers/input/misc/pwm-beeper.c | |
parent | 9e54924432783bfb21e905e0bf7042556bcb4b90 (diff) |
Input: pwm-beeper - switch to using "atomic" PWM API
The "atomic" API allows us to configure PWM period and duty cycle and
enable it in one call.
Reviewed-by: Thierry Reding <thierry.reding@gmail.com>
Tested-by: David Lechner <david@lechnology.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Diffstat (limited to 'drivers/input/misc/pwm-beeper.c')
-rw-r--r-- | drivers/input/misc/pwm-beeper.c | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/drivers/input/misc/pwm-beeper.c b/drivers/input/misc/pwm-beeper.c index ad9b231e8468..e53801dbd560 100644 --- a/drivers/input/misc/pwm-beeper.c +++ b/drivers/input/misc/pwm-beeper.c | |||
@@ -37,13 +37,16 @@ struct pwm_beeper { | |||
37 | 37 | ||
38 | static int pwm_beeper_on(struct pwm_beeper *beeper, unsigned long period) | 38 | static int pwm_beeper_on(struct pwm_beeper *beeper, unsigned long period) |
39 | { | 39 | { |
40 | struct pwm_state state; | ||
40 | int error; | 41 | int error; |
41 | 42 | ||
42 | error = pwm_config(beeper->pwm, period / 2, period); | 43 | pwm_get_state(beeper->pwm, &state); |
43 | if (error) | ||
44 | return error; | ||
45 | 44 | ||
46 | error = pwm_enable(beeper->pwm); | 45 | state.enabled = true; |
46 | state.period = period; | ||
47 | pwm_set_relative_duty_cycle(&state, 50, 100); | ||
48 | |||
49 | error = pwm_apply_state(beeper->pwm, &state); | ||
47 | if (error) | 50 | if (error) |
48 | return error; | 51 | return error; |
49 | 52 | ||
@@ -127,6 +130,7 @@ static int pwm_beeper_probe(struct platform_device *pdev) | |||
127 | { | 130 | { |
128 | struct device *dev = &pdev->dev; | 131 | struct device *dev = &pdev->dev; |
129 | struct pwm_beeper *beeper; | 132 | struct pwm_beeper *beeper; |
133 | struct pwm_state state; | ||
130 | int error; | 134 | int error; |
131 | 135 | ||
132 | beeper = devm_kzalloc(dev, sizeof(*beeper), GFP_KERNEL); | 136 | beeper = devm_kzalloc(dev, sizeof(*beeper), GFP_KERNEL); |
@@ -142,11 +146,15 @@ static int pwm_beeper_probe(struct platform_device *pdev) | |||
142 | return error; | 146 | return error; |
143 | } | 147 | } |
144 | 148 | ||
145 | /* | 149 | /* Sync up PWM state and ensure it is off. */ |
146 | * FIXME: pwm_apply_args() should be removed when switching to | 150 | pwm_init_state(beeper->pwm, &state); |
147 | * the atomic PWM API. | 151 | state.enabled = false; |
148 | */ | 152 | error = pwm_apply_state(beeper->pwm, &state); |
149 | pwm_apply_args(beeper->pwm); | 153 | if (error) { |
154 | dev_err(dev, "failed to apply initial PWM state: %d\n", | ||
155 | error); | ||
156 | return error; | ||
157 | } | ||
150 | 158 | ||
151 | beeper->amplifier = devm_regulator_get(dev, "amp"); | 159 | beeper->amplifier = devm_regulator_get(dev, "amp"); |
152 | if (IS_ERR(beeper->amplifier)) { | 160 | if (IS_ERR(beeper->amplifier)) { |