aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap2/mux.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-omap2/mux.c')
-rw-r--r--arch/arm/mach-omap2/mux.c22
1 files changed, 6 insertions, 16 deletions
diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c
index f62f7537d899..ac8a249779f2 100644
--- a/arch/arm/mach-omap2/mux.c
+++ b/arch/arm/mach-omap2/mux.c
@@ -681,29 +681,19 @@ static ssize_t omap_mux_dbg_signal_write(struct file *file,
681 const char __user *user_buf, 681 const char __user *user_buf,
682 size_t count, loff_t *ppos) 682 size_t count, loff_t *ppos)
683{ 683{
684 char buf[OMAP_MUX_MAX_ARG_CHAR];
685 struct seq_file *seqf; 684 struct seq_file *seqf;
686 struct omap_mux *m; 685 struct omap_mux *m;
687 unsigned long val; 686 u16 val;
688 int buf_size, ret; 687 int ret;
689 struct omap_mux_partition *partition; 688 struct omap_mux_partition *partition;
690 689
691 if (count > OMAP_MUX_MAX_ARG_CHAR) 690 if (count > OMAP_MUX_MAX_ARG_CHAR)
692 return -EINVAL; 691 return -EINVAL;
693 692
694 memset(buf, 0, sizeof(buf)); 693 ret = kstrtou16_from_user(user_buf, count, 0x10, &val);
695 buf_size = min(count, sizeof(buf) - 1);
696
697 if (copy_from_user(buf, user_buf, buf_size))
698 return -EFAULT;
699
700 ret = strict_strtoul(buf, 0x10, &val);
701 if (ret < 0) 694 if (ret < 0)
702 return ret; 695 return ret;
703 696
704 if (val > 0xffff)
705 return -EINVAL;
706
707 seqf = file->private_data; 697 seqf = file->private_data;
708 m = seqf->private; 698 m = seqf->private;
709 699
@@ -711,7 +701,7 @@ static ssize_t omap_mux_dbg_signal_write(struct file *file,
711 if (!partition) 701 if (!partition)
712 return -ENODEV; 702 return -ENODEV;
713 703
714 omap_mux_write(partition, (u16)val, m->reg_offset); 704 omap_mux_write(partition, val, m->reg_offset);
715 *ppos += count; 705 *ppos += count;
716 706
717 return count; 707 return count;
@@ -917,14 +907,14 @@ static void __init omap_mux_set_cmdline_signals(void)
917 907
918 while ((token = strsep(&next_opt, ",")) != NULL) { 908 while ((token = strsep(&next_opt, ",")) != NULL) {
919 char *keyval, *name; 909 char *keyval, *name;
920 unsigned long val; 910 u16 val;
921 911
922 keyval = token; 912 keyval = token;
923 name = strsep(&keyval, "="); 913 name = strsep(&keyval, "=");
924 if (name) { 914 if (name) {
925 int res; 915 int res;
926 916
927 res = strict_strtoul(keyval, 0x10, &val); 917 res = kstrtou16(keyval, 0x10, &val);
928 if (res < 0) 918 if (res < 0)
929 continue; 919 continue;
930 920