Linux带有基于PWM蜂鸣器的通用驱动程序——Pwm-beeper.c(位于drivers/input/misc目录下),它是属于输入子系统的。因此要移植该驱动,只需要在自己的开发板程序文件中添加PWM蜂鸣器的平台设备及相关属性即可。
在arch/arm/mach-s3c24xx目录下的mach-zhaocj2440.c文件中的适当位置添加如下内容:
/* beeper */
static struct platform_device zhaocj2440_beeper_device= {
.name= "pwm-beeper",
.dev= {
.parent = &s3c_device_timer[0].dev,
.platform_data = 0,
},
.id= 0,
};
其中.parent =&s3c_device_timer[0].dev,表示的是该PWM蜂鸣器应用的是定时器0。定时器的平台设备是在arch/arm/plat-samsung目录下的Devs.c文件中定义的。
然后在zhaocj2440_devices[]数组的尾部添加定时器设备和刚刚定义的PWM蜂鸣器设备:
staticstruct platform_device *zhaocj2440_devices[] __initdata = {
……
&s3c_device_timer,
&zhaocj2440_beeper_device,
};
最后在zhaocj2440_init(void)函数中的适当位置添加对定时器0引脚的配置:
staticvoid __init zhaocj2440_init(void)
{
……
/*PWM beeper */
gpio_request(S3C2410_GPB(0),"beeper");
s3c_gpio_setpull(S3C2410_GPB(0), S3C_GPIO_PULL_NONE);
s3c_gpio_cfgpin(S3C2410_GPB(0), S3C2410_GPB0_TOUT0);
……
}
至此,在mach-zhaocj2440.c文件中的修改就完成了。但为了把PWM蜂鸣器的通用驱动程序——Pwm-beeper.c添加到内核中,还需要修改/drivers/input/misc目录下的Kconfig文件,把该文件中的第447行注释掉,即:
configINPUT_PWM_BEEPER
tristate "PWM beeper support"
# depends on HAVE_PWM
help
Say Y here to get support for PWM based beeper devices.
If unsure, say N.
To compile this driver as a module, choose M here: