Commit 238d117d authored by Jiri Slaby's avatar Jiri Slaby Committed by Greg Kroah-Hartman
Browse files

mxser: simplify mxser_ioctl_op_mode



* 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: default avatarJiri Slaby <jslaby@suse.cz>
Link: https://lore.kernel.org/r/20210618061516.662-40-jslaby@suse.cz


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 9fae5f85
Loading
Loading
Loading
Loading
+10 −17
Original line number Diff line number Diff line
@@ -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 {

		return 0;
	}

	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 put_user(opmode & OP_MODE_MASK, u_opmode);
}

static int mxser_ioctl(struct tty_struct *tty,