⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pxa2xx_buzzer.c

📁 优龙2410linux2.6.8内核源代码
💻 C
字号:
/* *  PC Speaker beeper driver for Linux * *  Copyright (c) 2002 Vojtech Pavlik *  Copyright (c) 1992 Orest Zborowski * *//* * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 as published by * the Free Software Foundation */#include <linux/kernel.h>#include <linux/module.h>#include <linux/init.h>#include <linux/input.h>#include <asm/hardware.h>MODULE_AUTHOR("antiscle<hzhmei@hotmail.com>");MODULE_DESCRIPTION("PXA255 buzzer driver");MODULE_LICENSE("GPL");static char s3c2410_buzzer_name[] = "pxa2xx buzzer";static char s3c2410_buzzer_phys[] = "pxa2xx/buzzer";static struct input_dev s3c2410_buzzer_dev;spinlock_t s3c2410_buzzer_lock = SPIN_LOCK_UNLOCKED;static int s3c2410_buzzer_event(struct input_dev *dev, unsigned int type, unsigned int code, int value){	unsigned int count = 0;	unsigned long flags;	if (type != EV_SND)		return -1;	switch (code) {		case SND_BELL: if (value) value = 1000;		case SND_TONE: break;		default: return -1;	}	if(value) {		if (value < 60)			value = 60;		if (value > 20000)			value = 20000;			count = (614400 / value + 5)/10;	// 3686400/60 = 61440	}	spin_lock_irqsave(&s3c2410_buzzer_lock, flags);	if (count) {		/* pwm output */		CKEN |= CKEN0_PWM0;		pxa_gpio_mode(GPIO16_PWM0_MD);		PWM_PWDUTY0 = count>>1;		PWM_PERVAL0 = count-1;		PWM_CTRL0 = (0<<6)|59;	} else {		/* output 0 */		PWM_PWDUTY0 = 0;		PWM_PERVAL0 = 0;		CKEN &= ~CKEN0_PWM0;		//pxa_gpio_mode(GPIO16_PWM0|GPIO_OUT);		//GPCR0 = 1<<16;	}	spin_unlock_irqrestore(&s3c2410_buzzer_lock, flags);	return 0;}static int __init s3c2410_buzzer_init(void){	s3c2410_buzzer_dev.evbit[0] = BIT(EV_SND);	s3c2410_buzzer_dev.sndbit[0] = BIT(SND_BELL) | BIT(SND_TONE);	s3c2410_buzzer_dev.event = s3c2410_buzzer_event;	s3c2410_buzzer_dev.name = s3c2410_buzzer_name;	s3c2410_buzzer_dev.phys = s3c2410_buzzer_phys;	s3c2410_buzzer_dev.id.bustype = BUS_HOST;	s3c2410_buzzer_dev.id.vendor = 0x001f;	s3c2410_buzzer_dev.id.product = 0x0001;	s3c2410_buzzer_dev.id.version = 0x0100;	input_register_device(&s3c2410_buzzer_dev);        printk(KERN_INFO "input: %s\n", s3c2410_buzzer_name);	return 0;}static void __exit s3c2410_buzzer_exit(void){        input_unregister_device(&s3c2410_buzzer_dev);}module_init(s3c2410_buzzer_init);module_exit(s3c2410_buzzer_exit);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -