diff mbox series

[39/70] mxser: simplify mxser_ioctl_op_mode

Message ID 20210618061516.662-40-jslaby@suse.cz
State New
Headers show
Series mxser: cleanup | expand

Commit Message

Jiri Slaby June 18, 2021, 6:14 a.m. UTC
* 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>
---
 drivers/tty/mxser.c | 27 ++++++++++-----------------
 1 file changed, 10 insertions(+), 17 deletions(-)
diff mbox series

Patch

diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c
index 4a584db09494..e082ae055c39 100644
--- a/drivers/tty/mxser.c
+++ b/drivers/tty/mxser.c
@@ -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,