mxser: simplify mxser_ioctl_op_mode
authorJiri Slaby <jslaby@suse.cz>
Fri, 18 Jun 2021 06:14:45 +0000 (08:14 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 18 Jun 2021 11:10:01 +0000 (13:10 +0200)
* ModeMask local array is just inverted OP_MODE_MASK shifted by shiftbit.
  Drop this array and use the value directly.
* return from the if's true branch and drop 'else' branch by moving the
  code completely outside the if.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Link: https://lore.kernel.org/r/20210618061516.662-40-jslaby@suse.cz
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/mxser.c

index 4a584db094947b2315f4160caca85309694e5356..e082ae055c39bec6620538599571022e1476b0f5 100644 (file)
@@ -1411,10 +1411,9 @@ static int mxser_cflags_changed(struct mxser_port *info, unsigned long arg,
 static int mxser_ioctl_op_mode(struct mxser_port *port, int index, bool set,
                int __user *u_opmode)
 {
-       static const unsigned char ModeMask[] = { 0xfc, 0xf3, 0xcf, 0x3f };
        int opmode, p = index % 4;
        int shiftbit = p * 2;
-       unsigned char val, mask;
+       u8 val;
 
        if (port->board->must_hwid != MOXA_MUST_MU860_HWID)
                return -EFAULT;
@@ -1423,30 +1422,24 @@ static int mxser_ioctl_op_mode(struct mxser_port *port, int index, bool set,
                if (get_user(opmode, u_opmode))
                        return -EFAULT;
 
-               if (opmode != RS232_MODE && opmode != RS485_2WIRE_MODE &&
-                               opmode != RS422_MODE &&
-                               opmode != RS485_4WIRE_MODE)
-                       return -EFAULT;
-
-               mask = ModeMask[p];
+               if (opmode & ~OP_MODE_MASK)
+                       return -EINVAL;
 
                spin_lock_irq(&port->slock);
                val = inb(port->opmode_ioaddr);
-               val &= mask;
+               val &= ~(OP_MODE_MASK << shiftbit);
                val |= (opmode << shiftbit);
                outb(val, port->opmode_ioaddr);
                spin_unlock_irq(&port->slock);
-       } else {
-               spin_lock_irq(&port->slock);
-               opmode = inb(port->opmode_ioaddr) >> shiftbit;
-               spin_unlock_irq(&port->slock);
 
-               opmode &= OP_MODE_MASK;
-               if (put_user(opmode, u_opmode))
-                       return -EFAULT;
+               return 0;
        }
 
-       return 0;
+       spin_lock_irq(&port->slock);
+       opmode = inb(port->opmode_ioaddr) >> shiftbit;
+       spin_unlock_irq(&port->slock);
+
+       return put_user(opmode & OP_MODE_MASK, u_opmode);
 }
 
 static int mxser_ioctl(struct tty_struct *tty,