/*jiffies*/
#include //设备名称
#define DEVICE_NAME"Bell"
//设备GPIO引脚
#define BUZZER_GPIOEXYNOS4_GPD0(0)
//定义一个定时器链表
struct timer_list timer;
static void Bell_init()
{
//1、请求gpio,相当于注册gpio
gpio_request(BUZZER_GPIO,DEVICE_NAME);
//2、调用板级驱动的函数,将gpio配置成输出状态
s3c_gpio_cfgpin(BUZZER_GPIO, S3C_GPIO_OUTPUT);
//3、设置gpio为0,表示低电平,蜂鸣器高电平就会响
gpio_set_value(BUZZER_GPIO,0);
}
void timer_function(unsigned long value)
{
while(value)
{
//设置gpio为1,表示高电平,蜂鸣器高电平就会响
gpio_set_value(BUZZER_GPIO,1);
printk("BUZZER ON
");
mdelay(1000);
//设置gpio为0,表示低电平,蜂鸣器高电平就会响
gpio_set_value(BUZZER_GPIO,0);
printk("BUZZER OFF
");
mdelay(1000);
}
}
static int __init tiny4412_Bell_init(void)
{
//bell init
Bell_init();
//初始化内核定时器
init_timer(&timer);
//给执行的函数传参
timer.data= 1;
//当前jiffies的值加上5秒钟之后
timer.expires= jiffies + (5 * HZ);
//如果超时了就执行这个函数
timer.function= timer_function;
//启动定时器
add_timer(&timer);
return 0 ;
}
static void __exit tiny4412_Bell_exit(void)
{
//释放gpio
gpio_free(BUZZER_GPIO);
//删除注册的定时器
del_timer(&timer);
}
module_init(tiny4412_Bell_init);
module_exit(tiny4412_Bell_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("YYX");
MODULE_DESCRIPTION("Exynos4 BELL Driver");