diff options
author | Nicolin Chen <b42378@freescale.com> | 2013-07-09 16:09:58 +0800 |
---|---|---|
committer | Nicolin Chen <b42378@freescale.com> | 2013-07-10 18:17:30 +0800 |
commit | 28edbc5d3b89dda8311871c27d34358c9da036f8 (patch) | |
tree | c3eb4a83bc1261ab613f5880681a829648101a46 /drivers | |
parent | 80bd077845a49473cc2c50eb1d5735c063eb251b (diff) |
ENGR00265414-8 mxc: asrc: Improve channel setting interface
ASRC driver allows users to set channel number via PROC interface,
but only passes the total number equal 10.
This's not reasonable because ASRC can use total number lower than 10
if user assure each of them is an even number.
Acked-by: Wang Shengjiu <b02247@freescale.com>
Signed-off-by: Nicolin Chen <b42378@freescale.com>
(cherry picked from commit d76d08c93550cf2de9b1eff569ad6c0928ba122c)
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/mxc/asrc/mxc_asrc.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/drivers/mxc/asrc/mxc_asrc.c b/drivers/mxc/asrc/mxc_asrc.c index b428a619e41f..ea6573867a5c 100644 --- a/drivers/mxc/asrc/mxc_asrc.c +++ b/drivers/mxc/asrc/mxc_asrc.c @@ -1768,10 +1768,18 @@ static int asrc_write_proc_attr(struct file *file, const char *buffer, total = 10; else total = 5; - if ((na + nb + nc) != total) { - pr_info("Wrong ASRCNR settings\n"); - return -EFAULT; + + if ((na + nb + nc) > total) { + pr_err("Don't surpass %d for total.\n", total); + return -EINVAL; + } else if (na % 2 != 0 || nb % 2 != 0 || nc % 2 != 0) { + pr_err("Please set an even number for each pair.\n"); + return -EINVAL; + } else if (na < 0 || nb < 0 || nc < 0) { + pr_err("Please set an positive number for each pair.\n"); + return -EINVAL; } + reg = na | (nb << g_asrc->mxc_asrc_data->channel_bits) | (nc << (g_asrc->mxc_asrc_data->channel_bits * 2)); |