diff options
author | Guan Ben <ben.guan@cn.bosch.com> | 2017-03-07 13:25:27 -0500 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2017-03-07 13:39:23 -0500 |
commit | fad358a06c51bd40a131f4f94711c46e5d77cdae (patch) | |
tree | 23c53b729024d3eaf2f7563ec09f328682555e78 /drivers/input/misc/pwm-beeper.c | |
parent | a3cbfd56ff909393e2d59236d94205ae17dfc5d5 (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.c | 15 |
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"); |