/* * gsc3280_buzzer.c - driver for Gpio Test * * * Copyright (C) 2012 Loongson Corporation * * 2013-03-15 */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define BUZZER 21 #define BUZZER_OFF 0 #define BUZZER_ON 1 static int buzzer_open(struct inode *inode, struct file *file) { gpio_request(BUZZER,"BUZZER"); gpio_direction_output(BUZZER,1); return 0; } static int buzzer_close(struct inode *inode, struct file *file) { gpio_free(BUZZER); return 0; } static ssize_t buzzer_read(struct file *file, char __user *buf, size_t count, loff_t *ptr) { return 0; } static ssize_t buzzer_write(struct file *file, const char __user *buf, size_t count, loff_t *ptr) { return 0; } static long buzzer_ioctl( struct file *file, unsigned int cmd, unsigned long arg) { switch(cmd){ case BUZZER_OFF:{ gpio_set_value(BUZZER, 1); } break; case BUZZER_ON:{ gpio_set_value(BUZZER, 0); } break; default: printk(KERN_ALERT"in ioctl default!\n"); } return 0; } static const struct file_operations buzzer_ops = { .owner = THIS_MODULE, .open = buzzer_open, .release = buzzer_close, .read = buzzer_read, .write = buzzer_write, .unlocked_ioctl = buzzer_ioctl }; static struct miscdevice buzzer_miscdev = { MISC_DYNAMIC_MINOR, "buzzer", &buzzer_ops, }; static int __init buzzer_init(void) { if (misc_register(&buzzer_miscdev)) { printk(KERN_ALERT"###############: Couldn't register device 0, %d.\n", 255); return -EBUSY; } return 0; } static void __exit buzzer_exit(void) { misc_deregister(&buzzer_miscdev); } module_init(buzzer_init); module_exit(buzzer_exit); MODULE_LICENSE("GPL");