mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-18 10:34:24 +08:00
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>
This commit is contained in:
parent
a3cbfd56ff
commit
fad358a06c
@ -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 @@
|
|||||||
#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 {
|
|||||||
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,
|
|||||||
|
|
||||||
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)
|
|||||||
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)
|
|||||||
|
|
||||||
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");
|
||||||
|
Loading…
Reference in New Issue
Block a user