linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/3] Input: add optional enable gpio to pwm-beeper
@ 2017-01-06  2:43 David Lechner
  2017-01-06  2:43 ` [PATCH 1/3] Input: pwm-beeper: suppress error message on probe defer David Lechner
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: David Lechner @ 2017-01-06  2:43 UTC (permalink / raw)
  To: Dmitry Torokhov, Rob Herring, Mark Rutland
  Cc: David Lechner, linux-input, devicetree, linux-kernel

This series adds an optional enable gpio to the pwm-beeper driver. This is for
cases when the beeper needs to be "enabled", for example, if there is an
amplifier that drives the speaker that is not always on.

David Lechner (3):
  Input: pwm-beeper: suppress error message on probe defer
  dt-bindings: Input: Add enable-gpios to pwm-beeper
  Input: pwm-beeper: add optional enable gpio

 .../devicetree/bindings/input/pwm-beeper.txt       | 11 +++++++++
 drivers/input/misc/pwm-beeper.c                    | 27 ++++++++++++++++++----
 2 files changed, 34 insertions(+), 4 deletions(-)

-- 
2.7.4

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 1/3] Input: pwm-beeper: suppress error message on probe defer
  2017-01-06  2:43 [PATCH 0/3] Input: add optional enable gpio to pwm-beeper David Lechner
@ 2017-01-06  2:43 ` David Lechner
  2017-01-06  2:43 ` [PATCH 2/3] dt-bindings: Input: Add enable-gpios to pwm-beeper David Lechner
  2017-01-06  2:43 ` [PATCH 3/3] Input: pwm-beeper: add optional enable gpio David Lechner
  2 siblings, 0 replies; 6+ messages in thread
From: David Lechner @ 2017-01-06  2:43 UTC (permalink / raw)
  To: Dmitry Torokhov, Rob Herring, Mark Rutland
  Cc: David Lechner, linux-input, devicetree, linux-kernel

This suppress printing an error message when pwm_get/pwm_request returns
-EPROBE_DEFER. Otherwise you get a bunch of noise in the kernel log.

Signed-off-by: David Lechner <david@lechnology.com>
---
 drivers/input/misc/pwm-beeper.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/input/misc/pwm-beeper.c b/drivers/input/misc/pwm-beeper.c
index 5f9655d..e76b710 100644
--- a/drivers/input/misc/pwm-beeper.c
+++ b/drivers/input/misc/pwm-beeper.c
@@ -109,9 +109,10 @@ static int pwm_beeper_probe(struct platform_device *pdev)
 		beeper->pwm = pwm_request(pwm_id, "pwm beeper");
 	}
 
-	if (IS_ERR(beeper->pwm)) {
-		error = PTR_ERR(beeper->pwm);
-		dev_err(&pdev->dev, "Failed to request pwm device: %d\n", error);
+	error = PTR_ERR_OR_ZERO(beeper->pwm);
+	if (error) {
+		if (error != -EPROBE_DEFER)
+			dev_err(&pdev->dev, "Failed to request pwm device\n");
 		goto err_free;
 	}
 
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 2/3] dt-bindings: Input: Add enable-gpios to pwm-beeper
  2017-01-06  2:43 [PATCH 0/3] Input: add optional enable gpio to pwm-beeper David Lechner
  2017-01-06  2:43 ` [PATCH 1/3] Input: pwm-beeper: suppress error message on probe defer David Lechner
@ 2017-01-06  2:43 ` David Lechner
  2017-01-06  2:43 ` [PATCH 3/3] Input: pwm-beeper: add optional enable gpio David Lechner
  2 siblings, 0 replies; 6+ messages in thread
From: David Lechner @ 2017-01-06  2:43 UTC (permalink / raw)
  To: Dmitry Torokhov, Rob Herring, Mark Rutland
  Cc: David Lechner, linux-input, devicetree, linux-kernel

This adds an optional enable-gpios property to pwm-beeper. This gpio is
used to enable the beeper. For example, the beeper may have an amplifier
that needs to be switched on.

Signed-off-by: David Lechner <david@lechnology.com>
---
 Documentation/devicetree/bindings/input/pwm-beeper.txt | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/Documentation/devicetree/bindings/input/pwm-beeper.txt b/Documentation/devicetree/bindings/input/pwm-beeper.txt
index be332ae..1c6bcf8 100644
--- a/Documentation/devicetree/bindings/input/pwm-beeper.txt
+++ b/Documentation/devicetree/bindings/input/pwm-beeper.txt
@@ -5,3 +5,14 @@ Registers a PWM device as beeper.
 Required properties:
 - compatible: should be "pwm-beeper"
 - pwms: phandle to the physical PWM device
+
+Optional properties:
+- enable-gpios: phandle to gpio to enable the beeper
+
+Example:
+
+beeper {
+	compatible = "pwm-beeper";
+	pwms = <&pwm0>;
+	enable-gpios = <&gpio0 1 GPIO_ACTIVE_LOW>;
+};
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 3/3] Input: pwm-beeper: add optional enable gpio
  2017-01-06  2:43 [PATCH 0/3] Input: add optional enable gpio to pwm-beeper David Lechner
  2017-01-06  2:43 ` [PATCH 1/3] Input: pwm-beeper: suppress error message on probe defer David Lechner
  2017-01-06  2:43 ` [PATCH 2/3] dt-bindings: Input: Add enable-gpios to pwm-beeper David Lechner
@ 2017-01-06  2:43 ` David Lechner
  2017-01-06 17:28   ` Andy Shevchenko
  2 siblings, 1 reply; 6+ messages in thread
From: David Lechner @ 2017-01-06  2:43 UTC (permalink / raw)
  To: Dmitry Torokhov, Rob Herring, Mark Rutland
  Cc: David Lechner, linux-input, devicetree, linux-kernel

This adds an optional enable gpio to the pwm-beeper device. This gpio is
used in cases where the beeper needs to be switched on before using it. For
example, there may be an amplifier that is not always powered on.

Tested on LEGO MINDSTORMS EV3, which has a speaker connected to PWM through
an amplifier. The amplifier has an enable pin that is connected to a gpio.

Signed-off-by: David Lechner <david@lechnology.com>
---
 drivers/input/misc/pwm-beeper.c | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/drivers/input/misc/pwm-beeper.c b/drivers/input/misc/pwm-beeper.c
index e76b710..4379ceb 100644
--- a/drivers/input/misc/pwm-beeper.c
+++ b/drivers/input/misc/pwm-beeper.c
@@ -14,6 +14,7 @@
  */
 
 #include <linux/input.h>
+#include <linux/gpio/consumer.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/of.h>
@@ -25,6 +26,7 @@
 struct pwm_beeper {
 	struct input_dev *input;
 	struct pwm_device *pwm;
+	struct gpio_desc *enable_gpio;
 	struct work_struct work;
 	unsigned long period;
 };
@@ -38,8 +40,13 @@ static void __pwm_beeper_set(struct pwm_beeper *beeper)
 	if (period) {
 		pwm_config(beeper->pwm, period / 2, period);
 		pwm_enable(beeper->pwm);
-	} else
+		if (beeper->enable_gpio)
+			gpiod_direction_output(beeper->enable_gpio, 1);
+	} else {
+		if (beeper->enable_gpio)
+			gpiod_direction_output(beeper->enable_gpio, 0);
 		pwm_disable(beeper->pwm);
+	}
 }
 
 static void pwm_beeper_work(struct work_struct *work)
@@ -82,6 +89,8 @@ static void pwm_beeper_stop(struct pwm_beeper *beeper)
 {
 	cancel_work_sync(&beeper->work);
 
+	if (beeper->enable_gpio)
+		gpiod_direction_output(beeper->enable_gpio, 0);
 	if (beeper->period)
 		pwm_disable(beeper->pwm);
 }
@@ -116,6 +125,15 @@ static int pwm_beeper_probe(struct platform_device *pdev)
 		goto err_free;
 	}
 
+	beeper->enable_gpio = devm_gpiod_get_optional(&pdev->dev, "enable",
+						      GPIOD_OUT_LOW);
+	error = PTR_ERR_OR_ZERO(beeper->enable_gpio);
+	if (error) {
+		if (error != -EPROBE_DEFER)
+			dev_err(&pdev->dev, "Failed to get enable gpio\n");
+		goto err_pwm_free;
+	}
+
 	/*
 	 * FIXME: pwm_apply_args() should be removed when switching to
 	 * the atomic PWM API.
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 3/3] Input: pwm-beeper: add optional enable gpio
  2017-01-06  2:43 ` [PATCH 3/3] Input: pwm-beeper: add optional enable gpio David Lechner
@ 2017-01-06 17:28   ` Andy Shevchenko
  2017-01-06 17:45     ` David Lechner
  0 siblings, 1 reply; 6+ messages in thread
From: Andy Shevchenko @ 2017-01-06 17:28 UTC (permalink / raw)
  To: David Lechner
  Cc: Dmitry Torokhov, Rob Herring, Mark Rutland, linux-input,
	devicetree, linux-kernel

On Fri, Jan 6, 2017 at 4:43 AM, David Lechner <david@lechnology.com> wrote:
> This adds an optional enable gpio to the pwm-beeper device. This gpio is
> used in cases where the beeper needs to be switched on before using it.

Isn't it a property of pin muxing?

> For
> example, there may be an amplifier that is not always powered on.

This looks like GPIO based fixed voltage regulator.

>
> Tested on LEGO MINDSTORMS EV3, which has a speaker connected to PWM through
> an amplifier. The amplifier has an enable pin that is connected to a gpio.

-- 
With Best Regards,
Andy Shevchenko

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 3/3] Input: pwm-beeper: add optional enable gpio
  2017-01-06 17:28   ` Andy Shevchenko
@ 2017-01-06 17:45     ` David Lechner
  0 siblings, 0 replies; 6+ messages in thread
From: David Lechner @ 2017-01-06 17:45 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Dmitry Torokhov, Rob Herring, Mark Rutland, linux-input,
	devicetree, linux-kernel

On 01/06/2017 11:28 AM, Andy Shevchenko wrote:
> On Fri, Jan 6, 2017 at 4:43 AM, David Lechner <david@lechnology.com> wrote:
>> This adds an optional enable gpio to the pwm-beeper device. This gpio is
>> used in cases where the beeper needs to be switched on before using it.
>
> Isn't it a property of pin muxing?

You may want to turn if off when not making a sound to save power.


>
>> For
>> example, there may be an amplifier that is not always powered on.
>
> This looks like GPIO based fixed voltage regulator.


Yes, I think a regulator could work here just as well.

>
>>
>> Tested on LEGO MINDSTORMS EV3, which has a speaker connected to PWM through
>> an amplifier. The amplifier has an enable pin that is connected to a gpio.
>

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2017-01-06 17:45 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-01-06  2:43 [PATCH 0/3] Input: add optional enable gpio to pwm-beeper David Lechner
2017-01-06  2:43 ` [PATCH 1/3] Input: pwm-beeper: suppress error message on probe defer David Lechner
2017-01-06  2:43 ` [PATCH 2/3] dt-bindings: Input: Add enable-gpios to pwm-beeper David Lechner
2017-01-06  2:43 ` [PATCH 3/3] Input: pwm-beeper: add optional enable gpio David Lechner
2017-01-06 17:28   ` Andy Shevchenko
2017-01-06 17:45     ` David Lechner

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).