Message ID | 20230427-hammerhead-vibra-v1-0-e87eeb94da51@z3ntu.xyz |
---|---|
Headers | show |
Series | Add haptics support to Nexus 5 using pwm-vibra driver | expand |
On Thu, Apr 27, 2023 at 10:34:28PM +0200, Luca Weiss wrote: > Some pwm vibrators have a dedicated enable GPIO that needs to be set > high so that the vibrator works. Add support for that optionally. > > Signed-off-by: Luca Weiss <luca@z3ntu.xyz> Hi Luca, Thank you for picking up this work! > + vibrator->enable_gpio = devm_gpiod_get_optional(&pdev->dev, "enable", > + GPIOD_OUT_LOW); > + err = PTR_ERR_OR_ZERO(vibrator->enable_gpio); > + if (err) { > + if (err != -EPROBE_DEFER) > + dev_err(&pdev->dev, "Failed to request enable gpio: %d\n", > + err); > + return err; > + } > + Take a look at dev_err_probe() to remove the -EPROBE_DEFER check. With that fixed: Reviewed-by: Brian Masney <bmasney@redhat.com>
On 27/04/2023 21:34, Luca Weiss wrote: > Some pwm vibrators have a dedicated enable GPIO that needs to be set > high so that the vibrator works. Document that. > > Signed-off-by: Luca Weiss <luca@z3ntu.xyz> Reviewed-by: Caleb Connolly <caleb.connolly@linaro.org> > --- > Documentation/devicetree/bindings/input/pwm-vibrator.yaml | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/Documentation/devicetree/bindings/input/pwm-vibrator.yaml b/Documentation/devicetree/bindings/input/pwm-vibrator.yaml > index d32716c604fe..6398534b43c3 100644 > --- a/Documentation/devicetree/bindings/input/pwm-vibrator.yaml > +++ b/Documentation/devicetree/bindings/input/pwm-vibrator.yaml > @@ -32,6 +32,8 @@ properties: > minItems: 1 > maxItems: 2 > > + enable-gpios: true > + > vcc-supply: true > > direction-duty-cycle-ns: >
On 27/04/2023 21:34, Luca Weiss wrote: > Some pwm vibrators have a dedicated enable GPIO that needs to be set > high so that the vibrator works. Add support for that optionally. > > Signed-off-by: Luca Weiss <luca@z3ntu.xyz> Reviewed-by: Caleb Connolly <caleb.connolly@linaro.org> > --- > drivers/input/misc/pwm-vibra.c | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/drivers/input/misc/pwm-vibra.c b/drivers/input/misc/pwm-vibra.c > index c08971c97ad6..2ba035299db8 100644 > --- a/drivers/input/misc/pwm-vibra.c > +++ b/drivers/input/misc/pwm-vibra.c > @@ -11,6 +11,7 @@ > * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de> > */ > > +#include <linux/gpio/consumer.h> > #include <linux/input.h> > #include <linux/kernel.h> > #include <linux/module.h> > @@ -23,6 +24,7 @@ > > struct pwm_vibrator { > struct input_dev *input; > + struct gpio_desc *enable_gpio; > struct pwm_device *pwm; > struct pwm_device *pwm_dir; > struct regulator *vcc; > @@ -48,6 +50,8 @@ static int pwm_vibrator_start(struct pwm_vibrator *vibrator) > vibrator->vcc_on = true; > } > > + gpiod_set_value_cansleep(vibrator->enable_gpio, 1); > + > pwm_get_state(vibrator->pwm, &state); > pwm_set_relative_duty_cycle(&state, vibrator->level, 0xffff); > state.enabled = true; > @@ -80,6 +84,8 @@ static void pwm_vibrator_stop(struct pwm_vibrator *vibrator) > pwm_disable(vibrator->pwm_dir); > pwm_disable(vibrator->pwm); > > + gpiod_set_value_cansleep(vibrator->enable_gpio, 0); > + > if (vibrator->vcc_on) { > regulator_disable(vibrator->vcc); > vibrator->vcc_on = false; > @@ -142,6 +148,16 @@ static int pwm_vibrator_probe(struct platform_device *pdev) > return err; > } > > + vibrator->enable_gpio = devm_gpiod_get_optional(&pdev->dev, "enable", > + GPIOD_OUT_LOW); > + err = PTR_ERR_OR_ZERO(vibrator->enable_gpio); > + if (err) { > + if (err != -EPROBE_DEFER) > + dev_err(&pdev->dev, "Failed to request enable gpio: %d\n", > + err); > + return err; > + } > + > vibrator->pwm = devm_pwm_get(&pdev->dev, "enable"); > err = PTR_ERR_OR_ZERO(vibrator->pwm); > if (err) { >
On Freitag, 28. April 2023 01:29:27 CEST Brian Masney wrote: > On Thu, Apr 27, 2023 at 10:34:28PM +0200, Luca Weiss wrote: > > Some pwm vibrators have a dedicated enable GPIO that needs to be set > > high so that the vibrator works. Add support for that optionally. > > > > Signed-off-by: Luca Weiss <luca@z3ntu.xyz> > > Hi Luca, > > Thank you for picking up this work! > > > + vibrator->enable_gpio = devm_gpiod_get_optional(&pdev->dev, "enable", > > + GPIOD_OUT_LOW); > > + err = PTR_ERR_OR_ZERO(vibrator->enable_gpio); > > + if (err) { > > + if (err != -EPROBE_DEFER) > > + dev_err(&pdev->dev, "Failed to request enable gpio: %d\n", > > + err); > > + return err; > > + } > > + > > Take a look at dev_err_probe() to remove the -EPROBE_DEFER check. The input subsystem doesn't like dev_err_probe for some reason, you should quickly find examples of that being rejected on the mailing list (or see "git grep dev_err_probe drivers/input/") > > With that fixed: > > Reviewed-by: Brian Masney <bmasney@redhat.com> Thanks for the reviews!
On Fri, Apr 28, 2023 at 06:06:20PM +0200, Luca Weiss wrote: > On Freitag, 28. April 2023 01:29:27 CEST Brian Masney wrote: > > Take a look at dev_err_probe() to remove the -EPROBE_DEFER check. > > The input subsystem doesn't like dev_err_probe for some reason, you should > quickly find examples of that being rejected on the mailing list (or see > "git grep dev_err_probe drivers/input/") OK, that's fine then. Feel free to include my Reviewed-by. Brian
On 28.04.2023 18:06, Luca Weiss wrote: > On Freitag, 28. April 2023 01:29:27 CEST Brian Masney wrote: >> On Thu, Apr 27, 2023 at 10:34:28PM +0200, Luca Weiss wrote: >>> Some pwm vibrators have a dedicated enable GPIO that needs to be set >>> high so that the vibrator works. Add support for that optionally. >>> >>> Signed-off-by: Luca Weiss <luca@z3ntu.xyz> >> >> Hi Luca, >> >> Thank you for picking up this work! >> >>> + vibrator->enable_gpio = devm_gpiod_get_optional(&pdev->dev, > "enable", >>> + > GPIOD_OUT_LOW); >>> + err = PTR_ERR_OR_ZERO(vibrator->enable_gpio); >>> + if (err) { >>> + if (err != -EPROBE_DEFER) >>> + dev_err(&pdev->dev, "Failed to request enable > gpio: %d\n", >>> + err); >>> + return err; >>> + } >>> + >> Looks like your email client messes with the replies.. perhaps it tries to round them to n characters forcefully? Konrad >> Take a look at dev_err_probe() to remove the -EPROBE_DEFER check. > > The input subsystem doesn't like dev_err_probe for some reason, you should > quickly find examples of that being rejected on the mailing list (or see > "git grep dev_err_probe drivers/input/") > >> >> With that fixed: >> >> Reviewed-by: Brian Masney <bmasney@redhat.com> > > Thanks for the reviews! > >
On Dienstag, 2. Mai 2023 12:39:10 CEST Konrad Dybcio wrote: > On 28.04.2023 18:06, Luca Weiss wrote: > > On Freitag, 28. April 2023 01:29:27 CEST Brian Masney wrote: > >> On Thu, Apr 27, 2023 at 10:34:28PM +0200, Luca Weiss wrote: > >>> Some pwm vibrators have a dedicated enable GPIO that needs to be set > >>> high so that the vibrator works. Add support for that optionally. > >>> > >>> Signed-off-by: Luca Weiss <luca@z3ntu.xyz> > >> > >> Hi Luca, > >> > >> Thank you for picking up this work! > >> > >>> + vibrator->enable_gpio = devm_gpiod_get_optional(&pdev->dev, > > > > "enable", > > > >>> + > > > > GPIOD_OUT_LOW); > > > >>> + err = PTR_ERR_OR_ZERO(vibrator->enable_gpio); > >>> + if (err) { > >>> + if (err != -EPROBE_DEFER) > >>> + dev_err(&pdev->dev, "Failed to request enable > > > > gpio: %d\n", > > > >>> + err); > >>> + return err; > >>> + } > >>> + > > Looks like your email client messes with the replies.. perhaps it tries > to round them to n characters forcefully? Quite possible, I'm using KMail with Options -> Wordwrap turned on, otherwise I have to manually wrap everything but with this on there doesn't seem to be a way to get over that limit, even when posting links etc - or when quoting existing text. Regards Luca > > Konrad > > >> Take a look at dev_err_probe() to remove the -EPROBE_DEFER check. > > > > The input subsystem doesn't like dev_err_probe for some reason, you should > > quickly find examples of that being rejected on the mailing list (or see > > "git grep dev_err_probe drivers/input/") > > > >> With that fixed: > >> > >> Reviewed-by: Brian Masney <bmasney@redhat.com> > > > > Thanks for the reviews!
On Thu, Apr 27, 2023 at 10:34:25PM +0200, Luca Weiss wrote: > A while ago Brian Masney sent some patches for a clk-vibrator which was > then succeeded by the idea of a clk-pwm driver that "converts" a clock > into a PWM and to use the existing pwm-vibra driver. > > Since clk-pwm has landed last year we can finally add haptics support > upstream. > > We just need to add support for an enable GPIO to the pwm-vibra driver > since that also needs to be high for the haptics to work on this device. > > Signed-off-by: Luca Weiss <luca@z3ntu.xyz> > --- > Luca Weiss (4): > dt-bindings: input: pwm-vibrator: Add enable-gpio > Input: pwm-vibra - add newline to dev_err prints > Input: pwm-vibra - add support for enable GPIO > ARM: dts: qcom: msm8974-hammerhead: Add vibrator Applied patches 1-3, thank you.
A while ago Brian Masney sent some patches for a clk-vibrator which was then succeeded by the idea of a clk-pwm driver that "converts" a clock into a PWM and to use the existing pwm-vibra driver. Since clk-pwm has landed last year we can finally add haptics support upstream. We just need to add support for an enable GPIO to the pwm-vibra driver since that also needs to be high for the haptics to work on this device. Signed-off-by: Luca Weiss <luca@z3ntu.xyz> --- Luca Weiss (4): dt-bindings: input: pwm-vibrator: Add enable-gpio Input: pwm-vibra - add newline to dev_err prints Input: pwm-vibra - add support for enable GPIO ARM: dts: qcom: msm8974-hammerhead: Add vibrator .../devicetree/bindings/input/pwm-vibrator.yaml | 2 ++ .../dts/qcom-msm8974-lge-nexus5-hammerhead.dts | 35 +++++++++++++++++++++ drivers/input/misc/pwm-vibra.c | 36 ++++++++++++++++------ 3 files changed, 63 insertions(+), 10 deletions(-) --- base-commit: dec7f67a13c3270f9a38eba227a4fc15993f01b3 change-id: 20230427-hammerhead-vibra-06bd1bf771a3 Best regards,