aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input/misc/pwm-beeper.c
diff options
context:
space:
mode:
authorGuan Ben <ben.guan@cn.bosch.com>2017-03-07 13:25:27 -0500
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2017-03-07 13:39:23 -0500
commitfad358a06c51bd40a131f4f94711c46e5d77cdae (patch)
tree23c53b729024d3eaf2f7563ec09f328682555e78 /drivers/input/misc/pwm-beeper.c
parenta3cbfd56ff909393e2d59236d94205ae17dfc5d5 (diff)
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: Guan Ben <ben.guan@cn.bosch.com> Signed-off-by: Mark Jonas <mark.jonas@de.bosch.com> Signed-off-by: Heiko Schocher <hs@denx.de> Acked-by: Rob Herring <robh@kernel.org> 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.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/drivers/input/misc/pwm-beeper.c b/drivers/input/misc/pwm-beeper.c
index e53801dbd560..edca0d737750 100644
--- a/drivers/input/misc/pwm-beeper.c
+++ b/drivers/input/misc/pwm-beeper.c
@@ -19,6 +19,7 @@
19#include <linux/kernel.h> 19#include <linux/kernel.h>
20#include <linux/of.h> 20#include <linux/of.h>
21#include <linux/platform_device.h> 21#include <linux/platform_device.h>
22#include <linux/property.h>
22#include <linux/pwm.h> 23#include <linux/pwm.h>
23#include <linux/slab.h> 24#include <linux/slab.h>
24#include <linux/workqueue.h> 25#include <linux/workqueue.h>
@@ -29,6 +30,7 @@ struct pwm_beeper {
29 struct regulator *amplifier; 30 struct regulator *amplifier;
30 struct work_struct work; 31 struct work_struct work;
31 unsigned long period; 32 unsigned long period;
33 unsigned int bell_frequency;
32 bool suspended; 34 bool suspended;
33 bool amplifier_on; 35 bool amplifier_on;
34}; 36};
@@ -94,7 +96,7 @@ static int pwm_beeper_event(struct input_dev *input,
94 96
95 switch (code) { 97 switch (code) {
96 case SND_BELL: 98 case SND_BELL:
97 value = value ? 1000 : 0; 99 value = value ? beeper->bell_frequency : 0;
98 break; 100 break;
99 case SND_TONE: 101 case SND_TONE:
100 break; 102 break;
@@ -131,6 +133,7 @@ static int pwm_beeper_probe(struct platform_device *pdev)
131 struct device *dev = &pdev->dev; 133 struct device *dev = &pdev->dev;
132 struct pwm_beeper *beeper; 134 struct pwm_beeper *beeper;
133 struct pwm_state state; 135 struct pwm_state state;
136 u32 bell_frequency;
134 int error; 137 int error;
135 138
136 beeper = devm_kzalloc(dev, sizeof(*beeper), GFP_KERNEL); 139 beeper = devm_kzalloc(dev, sizeof(*beeper), GFP_KERNEL);
@@ -167,6 +170,16 @@ static int pwm_beeper_probe(struct platform_device *pdev)
167 170
168 INIT_WORK(&beeper->work, pwm_beeper_work); 171 INIT_WORK(&beeper->work, pwm_beeper_work);
169 172
173 error = device_property_read_u32(dev, "beeper-hz", &bell_frequency);
174 if (error) {
175 bell_frequency = 1000;
176 dev_dbg(dev,
177 "failed to parse 'beeper-hz' property, using default: %uHz\n",
178 bell_frequency);
179 }
180
181 beeper->bell_frequency = bell_frequency;
182
170 beeper->input = devm_input_allocate_device(dev); 183 beeper->input = devm_input_allocate_device(dev);
171 if (!beeper->input) { 184 if (!beeper->input) {
172 dev_err(dev, "Failed to allocate input device\n"); 185 dev_err(dev, "Failed to allocate input device\n");