Commit fad358a0 authored by Guan Ben's avatar Guan Ben Committed by Dmitry Torokhov

Input: pwm-beeper - support customized freq for SND_BELL

Extend the pwm-beeper driver to support customized frequency for SND_BELL
from device properties.
Signed-off-by: default avatarGuan Ben <ben.guan@cn.bosch.com>
Signed-off-by: default avatarMark Jonas <mark.jonas@de.bosch.com>
Signed-off-by: default avatarHeiko Schocher <hs@denx.de>
Acked-by: default avatarRob Herring <robh@kernel.org>
Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
parent a3cbfd56
...@@ -8,6 +8,7 @@ Required properties: ...@@ -8,6 +8,7 @@ Required properties:
Optional properties: Optional properties:
- amp-supply: phandle to a regulator that acts as an amplifier for the beeper - amp-supply: phandle to a regulator that acts as an amplifier for the beeper
- beeper-hz: bell frequency in Hz
Example: Example:
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/of.h> #include <linux/of.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/property.h>
#include <linux/pwm.h> #include <linux/pwm.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/workqueue.h> #include <linux/workqueue.h>
...@@ -29,6 +30,7 @@ struct pwm_beeper { ...@@ -29,6 +30,7 @@ struct pwm_beeper {
struct regulator *amplifier; struct regulator *amplifier;
struct work_struct work; struct work_struct work;
unsigned long period; unsigned long period;
unsigned int bell_frequency;
bool suspended; bool suspended;
bool amplifier_on; bool amplifier_on;
}; };
...@@ -94,7 +96,7 @@ static int pwm_beeper_event(struct input_dev *input, ...@@ -94,7 +96,7 @@ static int pwm_beeper_event(struct input_dev *input,
switch (code) { switch (code) {
case SND_BELL: case SND_BELL:
value = value ? 1000 : 0; value = value ? beeper->bell_frequency : 0;
break; break;
case SND_TONE: case SND_TONE:
break; break;
...@@ -131,6 +133,7 @@ static int pwm_beeper_probe(struct platform_device *pdev) ...@@ -131,6 +133,7 @@ static int pwm_beeper_probe(struct platform_device *pdev)
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct pwm_beeper *beeper; struct pwm_beeper *beeper;
struct pwm_state state; struct pwm_state state;
u32 bell_frequency;
int error; int error;
beeper = devm_kzalloc(dev, sizeof(*beeper), GFP_KERNEL); beeper = devm_kzalloc(dev, sizeof(*beeper), GFP_KERNEL);
...@@ -167,6 +170,16 @@ static int pwm_beeper_probe(struct platform_device *pdev) ...@@ -167,6 +170,16 @@ static int pwm_beeper_probe(struct platform_device *pdev)
INIT_WORK(&beeper->work, pwm_beeper_work); INIT_WORK(&beeper->work, pwm_beeper_work);
error = device_property_read_u32(dev, "beeper-hz", &bell_frequency);
if (error) {
bell_frequency = 1000;
dev_dbg(dev,
"failed to parse 'beeper-hz' property, using default: %uHz\n",
bell_frequency);
}
beeper->bell_frequency = bell_frequency;
beeper->input = devm_input_allocate_device(dev); beeper->input = devm_input_allocate_device(dev);
if (!beeper->input) { if (!beeper->input) {
dev_err(dev, "Failed to allocate input device\n"); dev_err(dev, "Failed to allocate input device\n");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment