/* arch/arm/mach-msm/qdsp6/routing.c * * Copyright (C) 2009 Google, Inc. * Author: Brian Swetland * * This software is licensed under the terms of the GNU General Public * License version 2, as published by the Free Software Foundation, and * may be copied, distributed, and modified under those terms. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include #include #include #include #include extern int q6audio_set_route(const char *name); static int q6_open(struct inode *inode, struct file *file) { pr_debug("[%s:%s]\n", __MM_FILE__, __func__); return 0; } static ssize_t q6_write(struct file *file, const char __user *buf, size_t count, loff_t *pos) { char cmd[32]; pr_debug("[%s:%s] count = %d", __MM_FILE__, __func__, count); if (count >= sizeof(cmd)) { pr_err("[%s:%s] invalid count %d\n", __MM_FILE__, __func__, count); return -EINVAL; } if (copy_from_user(cmd, buf, count)) return -EFAULT; cmd[count] = 0; if ((count > 1) && (cmd[count-1] == '\n')) cmd[count-1] = 0; q6audio_set_route(cmd); return count; } static int q6_release(struct inode *inode, struct file *file) { pr_debug("[%s:%s]\n", __MM_FILE__, __func__); return 0; } static struct file_operations q6_fops = { .owner = THIS_MODULE, .open = q6_open, .write = q6_write, .release = q6_release, }; static struct miscdevice q6_misc = { .minor = MISC_DYNAMIC_MINOR, .name = "msm_audio_route", .fops = &q6_fops, }; static int __init q6_init(void) { return misc_register(&q6_misc); } device_initcall(q6_init);