* [PATCH v4 0/4] Add support for vibrator motor for TBS A711 Tablet @ 2020-07-14 10:22 Ondrej Jirman 2020-07-14 10:23 ` [PATCH v4 1/4] dt-bindings: input: gpio-vibrator: Don't require enable-gpios Ondrej Jirman ` (3 more replies) 0 siblings, 4 replies; 7+ messages in thread From: Ondrej Jirman @ 2020-07-14 10:22 UTC (permalink / raw) To: linux-sunxi, Dmitry Torokhov, Rob Herring, Mark Rutland, Maxime Ripard, Chen-Yu Tsai Cc: Ondrej Jirman, Luca Weiss, Tomas Novotny, linux-input, devicetree, linux-kernel, linux-arm-kernel The tablet has a vibrator motor. This patch series exposes it via input subsystem (EV_FF). I'd like to ask input maintainers to take the patches 1 and 2. Patches 3 and 4 should go via the sunxi tree. The change to the vibrator driver is meant to enable toggling the vibrator motor just via a power supply itself. There's not additional gpio driven switch on this tablet between the power supply for the motor and the motor. Please take a look. Changes in v4: - Added DT reviewed-by tag - Fixed motor typo Changes in v3: - Changed dt-binding to require at least one of enable/supply, dropped ack - Changed driver to bail out if neither supply nor gpio is given Changes in v2: - Added DT ack tag - Add more information to the commit log (re use of LDO for the power) thank you and regards, Ondrej Jirman Ondrej Jirman (4): dt-bindings: input: gpio-vibrator: Don't require enable-gpios input: gpio-vibra: Allow to use vcc-supply alone to control the vibrator ARM: dts: sun8i-a83t-tbs-a711: Add support for the vibrator motor ARM: dts: sun8i-a83t-tbs-a711: Increase voltage on the vibrator .../devicetree/bindings/input/gpio-vibrator.yaml | 7 ++++++- arch/arm/boot/dts/sun8i-a83t-tbs-a711.dts | 9 +++++++-- drivers/input/misc/gpio-vibra.c | 14 ++++++++++---- 3 files changed, 23 insertions(+), 7 deletions(-) -- 2.27.0 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v4 1/4] dt-bindings: input: gpio-vibrator: Don't require enable-gpios 2020-07-14 10:22 [PATCH v4 0/4] Add support for vibrator motor for TBS A711 Tablet Ondrej Jirman @ 2020-07-14 10:23 ` Ondrej Jirman 2020-07-14 10:23 ` [PATCH v4 2/4] input: gpio-vibra: Allow to use vcc-supply alone to control the vibrator Ondrej Jirman ` (2 subsequent siblings) 3 siblings, 0 replies; 7+ messages in thread From: Ondrej Jirman @ 2020-07-14 10:23 UTC (permalink / raw) To: linux-sunxi, Dmitry Torokhov, Rob Herring, Mark Rutland, Maxime Ripard, Chen-Yu Tsai Cc: Ondrej Jirman, Luca Weiss, Tomas Novotny, linux-input, devicetree, linux-kernel, linux-arm-kernel, Rob Herring It is possible to turn the motor on/off just by enabling/disabling the vcc-supply. Change the binding to require either enable-gpios or vcc-supply or both. Signed-off-by: Ondrej Jirman <megous@megous.com> Reviewed-by: Rob Herring <robh@kernel.org> --- Documentation/devicetree/bindings/input/gpio-vibrator.yaml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/input/gpio-vibrator.yaml b/Documentation/devicetree/bindings/input/gpio-vibrator.yaml index 2384465eaa19..082ac06471db 100644 --- a/Documentation/devicetree/bindings/input/gpio-vibrator.yaml +++ b/Documentation/devicetree/bindings/input/gpio-vibrator.yaml @@ -24,7 +24,12 @@ properties: required: - compatible - - enable-gpios + +anyOf: + - required: + - enable-gpios + - required: + - vcc-supply additionalProperties: false -- 2.27.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v4 2/4] input: gpio-vibra: Allow to use vcc-supply alone to control the vibrator 2020-07-14 10:22 [PATCH v4 0/4] Add support for vibrator motor for TBS A711 Tablet Ondrej Jirman 2020-07-14 10:23 ` [PATCH v4 1/4] dt-bindings: input: gpio-vibrator: Don't require enable-gpios Ondrej Jirman @ 2020-07-14 10:23 ` Ondrej Jirman 2020-07-30 6:19 ` Dmitry Torokhov 2020-07-14 10:23 ` [PATCH v4 3/4] ARM: dts: sun8i-a83t-tbs-a711: Add support for the vibrator motor Ondrej Jirman 2020-07-14 10:23 ` [PATCH v4 4/4] ARM: dts: sun8i-a83t-tbs-a711: Increase voltage on the vibrator Ondrej Jirman 3 siblings, 1 reply; 7+ messages in thread From: Ondrej Jirman @ 2020-07-14 10:23 UTC (permalink / raw) To: linux-sunxi, Dmitry Torokhov, Rob Herring, Mark Rutland, Maxime Ripard, Chen-Yu Tsai Cc: Ondrej Jirman, Luca Weiss, Tomas Novotny, linux-input, devicetree, linux-kernel, linux-arm-kernel Make enable-gpio optional to allow using this driver with boards that have vibrator connected to a power supply without intermediate gpio based enable circuitry. Also avoid a case where neither regulator nor enable gpio is specified, and bail out in probe in such a case. Signed-off-by: Ondrej Jirman <megous@megous.com> --- drivers/input/misc/gpio-vibra.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/drivers/input/misc/gpio-vibra.c b/drivers/input/misc/gpio-vibra.c index f79f75595dd7..b3bb7e61ed1d 100644 --- a/drivers/input/misc/gpio-vibra.c +++ b/drivers/input/misc/gpio-vibra.c @@ -39,7 +39,7 @@ static int gpio_vibrator_start(struct gpio_vibrator *vibrator) struct device *pdev = vibrator->input->dev.parent; int err; - if (!vibrator->vcc_on) { + if (vibrator->vcc && !vibrator->vcc_on) { err = regulator_enable(vibrator->vcc); if (err) { dev_err(pdev, "failed to enable regulator: %d\n", err); @@ -57,7 +57,7 @@ static void gpio_vibrator_stop(struct gpio_vibrator *vibrator) { gpiod_set_value_cansleep(vibrator->gpio, 0); - if (vibrator->vcc_on) { + if (vibrator->vcc && vibrator->vcc_on) { regulator_disable(vibrator->vcc); vibrator->vcc_on = false; } @@ -112,7 +112,7 @@ static int gpio_vibrator_probe(struct platform_device *pdev) if (!vibrator->input) return -ENOMEM; - vibrator->vcc = devm_regulator_get(&pdev->dev, "vcc"); + vibrator->vcc = devm_regulator_get_optional(&pdev->dev, "vcc"); err = PTR_ERR_OR_ZERO(vibrator->vcc); if (err) { if (err != -EPROBE_DEFER) @@ -121,7 +121,8 @@ static int gpio_vibrator_probe(struct platform_device *pdev) return err; } - vibrator->gpio = devm_gpiod_get(&pdev->dev, "enable", GPIOD_OUT_LOW); + vibrator->gpio = devm_gpiod_get_optional(&pdev->dev, "enable", + GPIOD_OUT_LOW); err = PTR_ERR_OR_ZERO(vibrator->gpio); if (err) { if (err != -EPROBE_DEFER) @@ -130,6 +131,11 @@ static int gpio_vibrator_probe(struct platform_device *pdev) return err; } + if (!vibrator->vcc && !vibrator->gpio) { + dev_err(&pdev->dev, "Neither gpio nor regulator provided\n"); + return -EINVAL; + } + INIT_WORK(&vibrator->play_work, gpio_vibrator_play_work); vibrator->input->name = "gpio-vibrator"; -- 2.27.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v4 2/4] input: gpio-vibra: Allow to use vcc-supply alone to control the vibrator 2020-07-14 10:23 ` [PATCH v4 2/4] input: gpio-vibra: Allow to use vcc-supply alone to control the vibrator Ondrej Jirman @ 2020-07-30 6:19 ` Dmitry Torokhov 2020-07-30 9:18 ` Ondřej Jirman 0 siblings, 1 reply; 7+ messages in thread From: Dmitry Torokhov @ 2020-07-30 6:19 UTC (permalink / raw) To: Ondrej Jirman Cc: linux-sunxi, Rob Herring, Mark Rutland, Maxime Ripard, Chen-Yu Tsai, Luca Weiss, Tomas Novotny, linux-input, devicetree, linux-kernel, linux-arm-kernel Hi Ondrej, On Tue, Jul 14, 2020 at 12:23:01PM +0200, Ondrej Jirman wrote: > Make enable-gpio optional to allow using this driver with boards that > have vibrator connected to a power supply without intermediate gpio > based enable circuitry. > > Also avoid a case where neither regulator nor enable gpio is specified, > and bail out in probe in such a case. > > Signed-off-by: Ondrej Jirman <megous@megous.com> > --- > drivers/input/misc/gpio-vibra.c | 14 ++++++++++---- > 1 file changed, 10 insertions(+), 4 deletions(-) > > diff --git a/drivers/input/misc/gpio-vibra.c b/drivers/input/misc/gpio-vibra.c > index f79f75595dd7..b3bb7e61ed1d 100644 > --- a/drivers/input/misc/gpio-vibra.c > +++ b/drivers/input/misc/gpio-vibra.c > @@ -39,7 +39,7 @@ static int gpio_vibrator_start(struct gpio_vibrator *vibrator) > struct device *pdev = vibrator->input->dev.parent; > int err; > > - if (!vibrator->vcc_on) { > + if (vibrator->vcc && !vibrator->vcc_on) { > err = regulator_enable(vibrator->vcc); > if (err) { > dev_err(pdev, "failed to enable regulator: %d\n", err); > @@ -57,7 +57,7 @@ static void gpio_vibrator_stop(struct gpio_vibrator *vibrator) > { > gpiod_set_value_cansleep(vibrator->gpio, 0); > > - if (vibrator->vcc_on) { > + if (vibrator->vcc && vibrator->vcc_on) { > regulator_disable(vibrator->vcc); > vibrator->vcc_on = false; > } > @@ -112,7 +112,7 @@ static int gpio_vibrator_probe(struct platform_device *pdev) > if (!vibrator->input) > return -ENOMEM; > > - vibrator->vcc = devm_regulator_get(&pdev->dev, "vcc"); > + vibrator->vcc = devm_regulator_get_optional(&pdev->dev, "vcc"); I know it is very surprising, but regulator_get_optional does not return NULL when regulator is not present, but rather ERR_PTR(-ENODEV). You need to replace it with NULL in the branch below, or change conditions to !IS_ERR(virbrator->vcc) (and still handle -ENODEV in the branch below). > err = PTR_ERR_OR_ZERO(vibrator->vcc); > if (err) { > if (err != -EPROBE_DEFER) > @@ -121,7 +121,8 @@ static int gpio_vibrator_probe(struct platform_device *pdev) > return err; > } > > - vibrator->gpio = devm_gpiod_get(&pdev->dev, "enable", GPIOD_OUT_LOW); > + vibrator->gpio = devm_gpiod_get_optional(&pdev->dev, "enable", > + GPIOD_OUT_LOW); > err = PTR_ERR_OR_ZERO(vibrator->gpio); > if (err) { > if (err != -EPROBE_DEFER) > @@ -130,6 +131,11 @@ static int gpio_vibrator_probe(struct platform_device *pdev) > return err; > } > > + if (!vibrator->vcc && !vibrator->gpio) { > + dev_err(&pdev->dev, "Neither gpio nor regulator provided\n"); > + return -EINVAL; > + } > + > INIT_WORK(&vibrator->play_work, gpio_vibrator_play_work); > > vibrator->input->name = "gpio-vibrator"; > -- > 2.27.0 > Thanks. -- Dmitry ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v4 2/4] input: gpio-vibra: Allow to use vcc-supply alone to control the vibrator 2020-07-30 6:19 ` Dmitry Torokhov @ 2020-07-30 9:18 ` Ondřej Jirman 0 siblings, 0 replies; 7+ messages in thread From: Ondřej Jirman @ 2020-07-30 9:18 UTC (permalink / raw) To: Dmitry Torokhov Cc: linux-sunxi, Rob Herring, Mark Rutland, Maxime Ripard, Chen-Yu Tsai, Luca Weiss, Tomas Novotny, linux-input, devicetree, linux-kernel, linux-arm-kernel Hello Dmitry, thanks for looking into the patch. :) On Wed, Jul 29, 2020 at 11:19:39PM -0700, Dmitry Torokhov wrote: > Hi Ondrej, > > On Tue, Jul 14, 2020 at 12:23:01PM +0200, Ondrej Jirman wrote: > > Make enable-gpio optional to allow using this driver with boards that > > have vibrator connected to a power supply without intermediate gpio > > based enable circuitry. > > > > Also avoid a case where neither regulator nor enable gpio is specified, > > and bail out in probe in such a case. > > > > Signed-off-by: Ondrej Jirman <megous@megous.com> > > --- > > drivers/input/misc/gpio-vibra.c | 14 ++++++++++---- > > 1 file changed, 10 insertions(+), 4 deletions(-) > > > > diff --git a/drivers/input/misc/gpio-vibra.c b/drivers/input/misc/gpio-vibra.c > > index f79f75595dd7..b3bb7e61ed1d 100644 > > --- a/drivers/input/misc/gpio-vibra.c > > +++ b/drivers/input/misc/gpio-vibra.c > > @@ -39,7 +39,7 @@ static int gpio_vibrator_start(struct gpio_vibrator *vibrator) > > struct device *pdev = vibrator->input->dev.parent; > > int err; > > > > - if (!vibrator->vcc_on) { > > + if (vibrator->vcc && !vibrator->vcc_on) { > > err = regulator_enable(vibrator->vcc); > > if (err) { > > dev_err(pdev, "failed to enable regulator: %d\n", err); > > @@ -57,7 +57,7 @@ static void gpio_vibrator_stop(struct gpio_vibrator *vibrator) > > { > > gpiod_set_value_cansleep(vibrator->gpio, 0); > > > > - if (vibrator->vcc_on) { > > + if (vibrator->vcc && vibrator->vcc_on) { > > regulator_disable(vibrator->vcc); > > vibrator->vcc_on = false; > > } > > @@ -112,7 +112,7 @@ static int gpio_vibrator_probe(struct platform_device *pdev) > > if (!vibrator->input) > > return -ENOMEM; > > > > - vibrator->vcc = devm_regulator_get(&pdev->dev, "vcc"); > > + vibrator->vcc = devm_regulator_get_optional(&pdev->dev, "vcc"); > > I know it is very surprising, but regulator_get_optional does not return > NULL when regulator is not present, but rather ERR_PTR(-ENODEV). You > need to replace it with NULL in the branch below, or change conditions > to !IS_ERR(virbrator->vcc) (and still handle -ENODEV in the branch > below). Oops, I'll fix that in the next revision. regards, o. > > err = PTR_ERR_OR_ZERO(vibrator->vcc); > > if (err) { > > if (err != -EPROBE_DEFER) > > @@ -121,7 +121,8 @@ static int gpio_vibrator_probe(struct platform_device *pdev) > > return err; > > } > > > > - vibrator->gpio = devm_gpiod_get(&pdev->dev, "enable", GPIOD_OUT_LOW); > > + vibrator->gpio = devm_gpiod_get_optional(&pdev->dev, "enable", > > + GPIOD_OUT_LOW); > > err = PTR_ERR_OR_ZERO(vibrator->gpio); > > if (err) { > > if (err != -EPROBE_DEFER) > > @@ -130,6 +131,11 @@ static int gpio_vibrator_probe(struct platform_device *pdev) > > return err; > > } > > > > + if (!vibrator->vcc && !vibrator->gpio) { > > + dev_err(&pdev->dev, "Neither gpio nor regulator provided\n"); > > + return -EINVAL; > > + } > > + > > INIT_WORK(&vibrator->play_work, gpio_vibrator_play_work); > > > > vibrator->input->name = "gpio-vibrator"; > > -- > > 2.27.0 > > > > Thanks. > > -- > Dmitry ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v4 3/4] ARM: dts: sun8i-a83t-tbs-a711: Add support for the vibrator motor 2020-07-14 10:22 [PATCH v4 0/4] Add support for vibrator motor for TBS A711 Tablet Ondrej Jirman 2020-07-14 10:23 ` [PATCH v4 1/4] dt-bindings: input: gpio-vibrator: Don't require enable-gpios Ondrej Jirman 2020-07-14 10:23 ` [PATCH v4 2/4] input: gpio-vibra: Allow to use vcc-supply alone to control the vibrator Ondrej Jirman @ 2020-07-14 10:23 ` Ondrej Jirman 2020-07-14 10:23 ` [PATCH v4 4/4] ARM: dts: sun8i-a83t-tbs-a711: Increase voltage on the vibrator Ondrej Jirman 3 siblings, 0 replies; 7+ messages in thread From: Ondrej Jirman @ 2020-07-14 10:23 UTC (permalink / raw) To: linux-sunxi, Dmitry Torokhov, Rob Herring, Mark Rutland, Maxime Ripard, Chen-Yu Tsai Cc: Ondrej Jirman, Luca Weiss, Tomas Novotny, linux-input, devicetree, linux-kernel, linux-arm-kernel The board has a vibrator motor. Hook it to the input subsystem. According to the PMIC specification, LDO needs to be enabled (value 0b11) to achieve the specified max driving current of 150mA. We can't drive the motor with just GPIO mode. In GPIO mode the chip is probably just using the regular CMOS logic output circuitry (typically limited to around 20-35mA, but not specified in this datasheet). Signed-off-by: Ondrej Jirman <megous@megous.com> --- arch/arm/boot/dts/sun8i-a83t-tbs-a711.dts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/arch/arm/boot/dts/sun8i-a83t-tbs-a711.dts b/arch/arm/boot/dts/sun8i-a83t-tbs-a711.dts index bfc9bb277a49..a278a1e33930 100644 --- a/arch/arm/boot/dts/sun8i-a83t-tbs-a711.dts +++ b/arch/arm/boot/dts/sun8i-a83t-tbs-a711.dts @@ -99,6 +99,11 @@ panel_input: endpoint { }; }; + vibrator { + compatible = "gpio-vibrator"; + vcc-supply = <®_ldo_io1>; + }; + reg_gps: reg-gps { compatible = "regulator-fixed"; regulator-name = "gps"; -- 2.27.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v4 4/4] ARM: dts: sun8i-a83t-tbs-a711: Increase voltage on the vibrator 2020-07-14 10:22 [PATCH v4 0/4] Add support for vibrator motor for TBS A711 Tablet Ondrej Jirman ` (2 preceding siblings ...) 2020-07-14 10:23 ` [PATCH v4 3/4] ARM: dts: sun8i-a83t-tbs-a711: Add support for the vibrator motor Ondrej Jirman @ 2020-07-14 10:23 ` Ondrej Jirman 3 siblings, 0 replies; 7+ messages in thread From: Ondrej Jirman @ 2020-07-14 10:23 UTC (permalink / raw) To: linux-sunxi, Dmitry Torokhov, Rob Herring, Mark Rutland, Maxime Ripard, Chen-Yu Tsai Cc: Ondrej Jirman, Luca Weiss, Tomas Novotny, linux-input, devicetree, linux-kernel, linux-arm-kernel Vibrator motor is weak at the current voltage. Increase the voltage. Signed-off-by: Ondrej Jirman <megous@megous.com> --- arch/arm/boot/dts/sun8i-a83t-tbs-a711.dts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/arm/boot/dts/sun8i-a83t-tbs-a711.dts b/arch/arm/boot/dts/sun8i-a83t-tbs-a711.dts index a278a1e33930..1e086e979348 100644 --- a/arch/arm/boot/dts/sun8i-a83t-tbs-a711.dts +++ b/arch/arm/boot/dts/sun8i-a83t-tbs-a711.dts @@ -434,8 +434,8 @@ ®_ldo_io0 { }; ®_ldo_io1 { - regulator-min-microvolt = <3100000>; - regulator-max-microvolt = <3100000>; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; regulator-name = "vcc-vb"; status = "okay"; }; -- 2.27.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2020-07-30 9:18 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-07-14 10:22 [PATCH v4 0/4] Add support for vibrator motor for TBS A711 Tablet Ondrej Jirman 2020-07-14 10:23 ` [PATCH v4 1/4] dt-bindings: input: gpio-vibrator: Don't require enable-gpios Ondrej Jirman 2020-07-14 10:23 ` [PATCH v4 2/4] input: gpio-vibra: Allow to use vcc-supply alone to control the vibrator Ondrej Jirman 2020-07-30 6:19 ` Dmitry Torokhov 2020-07-30 9:18 ` Ondřej Jirman 2020-07-14 10:23 ` [PATCH v4 3/4] ARM: dts: sun8i-a83t-tbs-a711: Add support for the vibrator motor Ondrej Jirman 2020-07-14 10:23 ` [PATCH v4 4/4] ARM: dts: sun8i-a83t-tbs-a711: Increase voltage on the vibrator Ondrej Jirman
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).