tty: make use of tty_get_{char,frame}_size

In the previous patch, we introduced tty_get_char_size() and
tty_get_frame_size() for computing character and frame sizes,
respectively. Here, we make use of them in various tty drivers where
applicable.

The stats look nice: 12 insertions, 169 deletions.

Cc: Arnd Bergmann <arnd@arndb.de>
Cc: David Lin <dtwlin@gmail.com>
Cc: Johan Hovold <johan@kernel.org>
Cc: Alex Elder <elder@kernel.org>
Cc: Shawn Guo <shawnguo@kernel.org>
Cc: Sascha Hauer <s.hauer@pengutronix.de>
Cc: Andy Gross <agross@kernel.org>
Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
Cc: Maxime Coquelin <mcoquelin.stm32@gmail.com>
Cc: Alexandre Torgue <alexandre.torgue@foss.st.com>
Cc: Oliver Neukum <oneukum@suse.com>
Acked-by: Alex Elder <elder@kernel.org>
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Link: https://lore.kernel.org/r/20210610090247.2593-4-jslaby@suse.cz
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Jiri Slaby 2021-06-10 11:02:47 +02:00 committed by Greg Kroah-Hartman
parent d8f0209bfe
commit 3ec2ff3723
13 changed files with 16 additions and 206 deletions

View File

@ -1419,13 +1419,7 @@ static void mgslpc_change_params(MGSLPC_INFO *info, struct tty_struct *tty)
/* byte size and parity */ /* byte size and parity */
switch (cflag & CSIZE) { info->params.data_bits = tty_get_char_size(cflag);
case CS5: info->params.data_bits = 5; break;
case CS6: info->params.data_bits = 6; break;
case CS7: info->params.data_bits = 7; break;
case CS8: info->params.data_bits = 8; break;
default: info->params.data_bits = 7; break;
}
if (cflag & CSTOPB) if (cflag & CSTOPB)
info->params.stop_bits = 2; info->params.stop_bits = 2;

View File

@ -494,21 +494,7 @@ static void gb_tty_set_termios(struct tty_struct *tty,
(termios->c_cflag & PARODD ? 1 : 2) + (termios->c_cflag & PARODD ? 1 : 2) +
(termios->c_cflag & CMSPAR ? 2 : 0) : 0; (termios->c_cflag & CMSPAR ? 2 : 0) : 0;
switch (termios->c_cflag & CSIZE) { newline.data_bits = tty_get_char_size(termios->c_cflag);
case CS5:
newline.data_bits = 5;
break;
case CS6:
newline.data_bits = 6;
break;
case CS7:
newline.data_bits = 7;
break;
case CS8:
default:
newline.data_bits = 8;
break;
}
/* FIXME: needs to clear unsupported bits in the termios */ /* FIXME: needs to clear unsupported bits in the termios */
gb_tty->clocal = ((termios->c_cflag & CLOCAL) != 0); gb_tty->clocal = ((termios->c_cflag & CLOCAL) != 0);

View File

@ -524,24 +524,7 @@ static void cpm_uart_set_termios(struct uart_port *port,
scval = 0; scval = 0;
/* byte size */ /* byte size */
switch (termios->c_cflag & CSIZE) { bits = tty_get_char_size(termios->c_cflag);
case CS5:
bits = 5;
break;
case CS6:
bits = 6;
break;
case CS7:
bits = 7;
break;
case CS8:
bits = 8;
break;
/* Never happens, but GCC is too dumb to figure it out */
default:
bits = 8;
break;
}
sbits = bits - 5; sbits = bits - 5;
if (termios->c_cflag & CSTOPB) { if (termios->c_cflag & CSTOPB) {

View File

@ -962,7 +962,7 @@ static void mxs_auart_settermios(struct uart_port *u,
struct ktermios *old) struct ktermios *old)
{ {
struct mxs_auart_port *s = to_auart_port(u); struct mxs_auart_port *s = to_auart_port(u);
u32 bm, ctrl, ctrl2, div; u32 ctrl, ctrl2, div;
unsigned int cflag, baud, baud_min, baud_max; unsigned int cflag, baud, baud_min, baud_max;
cflag = termios->c_cflag; cflag = termios->c_cflag;
@ -970,25 +970,7 @@ static void mxs_auart_settermios(struct uart_port *u,
ctrl = AUART_LINECTRL_FEN; ctrl = AUART_LINECTRL_FEN;
ctrl2 = mxs_read(s, REG_CTRL2); ctrl2 = mxs_read(s, REG_CTRL2);
/* byte size */ ctrl |= AUART_LINECTRL_WLEN(tty_get_char_size(cflag));
switch (cflag & CSIZE) {
case CS5:
bm = 5;
break;
case CS6:
bm = 6;
break;
case CS7:
bm = 7;
break;
case CS8:
bm = 8;
break;
default:
return;
}
ctrl |= AUART_LINECTRL_WLEN(bm);
/* parity */ /* parity */
if (cflag & PARENB) { if (cflag & PARENB) {

View File

@ -1050,21 +1050,7 @@ static void qcom_geni_serial_set_termios(struct uart_port *uport,
} }
/* bits per char */ /* bits per char */
switch (termios->c_cflag & CSIZE) { bits_per_char = tty_get_char_size(termios->c_cflag);
case CS5:
bits_per_char = 5;
break;
case CS6:
bits_per_char = 6;
break;
case CS7:
bits_per_char = 7;
break;
case CS8:
default:
bits_per_char = 8;
break;
}
/* stop bits */ /* stop bits */
if (termios->c_cflag & CSTOPB) if (termios->c_cflag & CSTOPB)

View File

@ -2500,25 +2500,7 @@ done:
uart_update_timeout(port, termios->c_cflag, baud); uart_update_timeout(port, termios->c_cflag, baud);
/* byte size and parity */ /* byte size and parity */
switch (termios->c_cflag & CSIZE) { bits = tty_get_frame_size(termios->c_cflag);
case CS5:
bits = 7;
break;
case CS6:
bits = 8;
break;
case CS7:
bits = 9;
break;
default:
bits = 10;
break;
}
if (termios->c_cflag & CSTOPB)
bits++;
if (termios->c_cflag & PARENB)
bits++;
if (sci_getreg(port, SEMR)->size) if (sci_getreg(port, SEMR)->size)
serial_port_out(port, SEMR, 0); serial_port_out(port, SEMR, 0);

View File

@ -718,36 +718,6 @@ static void stm32_usart_shutdown(struct uart_port *port)
free_irq(port->irq, port); free_irq(port->irq, port);
} }
static unsigned int stm32_usart_get_databits(struct ktermios *termios)
{
unsigned int bits;
tcflag_t cflag = termios->c_cflag;
switch (cflag & CSIZE) {
/*
* CSIZE settings are not necessarily supported in hardware.
* CSIZE unsupported configurations are handled here to set word length
* to 8 bits word as default configuration and to print debug message.
*/
case CS5:
bits = 5;
break;
case CS6:
bits = 6;
break;
case CS7:
bits = 7;
break;
/* default including CS8 */
default:
bits = 8;
break;
}
return bits;
}
static void stm32_usart_set_termios(struct uart_port *port, static void stm32_usart_set_termios(struct uart_port *port,
struct ktermios *termios, struct ktermios *termios,
struct ktermios *old) struct ktermios *old)
@ -805,7 +775,7 @@ static void stm32_usart_set_termios(struct uart_port *port,
if (cflag & CSTOPB) if (cflag & CSTOPB)
cr2 |= USART_CR2_STOP_2B; cr2 |= USART_CR2_STOP_2B;
bits = stm32_usart_get_databits(termios); bits = tty_get_char_size(cflag);
stm32_port->rdr_mask = (BIT(bits) - 1); stm32_port->rdr_mask = (BIT(bits) - 1);
if (cflag & PARENB) { if (cflag & PARENB) {

View File

@ -2465,14 +2465,7 @@ static void change_params(struct slgt_info *info)
/* byte size and parity */ /* byte size and parity */
switch (cflag & CSIZE) { info->params.data_bits = tty_get_char_size(cflag);
case CS5: info->params.data_bits = 5; break;
case CS6: info->params.data_bits = 6; break;
case CS7: info->params.data_bits = 7; break;
case CS8: info->params.data_bits = 8; break;
default: info->params.data_bits = 7; break;
}
info->params.stop_bits = (cflag & CSTOPB) ? 2 : 1; info->params.stop_bits = (cflag & CSTOPB) ? 2 : 1;
if (cflag & PARENB) if (cflag & PARENB)

View File

@ -1056,21 +1056,8 @@ static void acm_tty_set_termios(struct tty_struct *tty,
newline.bParityType = termios->c_cflag & PARENB ? newline.bParityType = termios->c_cflag & PARENB ?
(termios->c_cflag & PARODD ? 1 : 2) + (termios->c_cflag & PARODD ? 1 : 2) +
(termios->c_cflag & CMSPAR ? 2 : 0) : 0; (termios->c_cflag & CMSPAR ? 2 : 0) : 0;
switch (termios->c_cflag & CSIZE) { newline.bDataBits = tty_get_char_size(termios->c_cflag);
case CS5:
newline.bDataBits = 5;
break;
case CS6:
newline.bDataBits = 6;
break;
case CS7:
newline.bDataBits = 7;
break;
case CS8:
default:
newline.bDataBits = 8;
break;
}
/* FIXME: Needs to clear unsupported bits in the termios */ /* FIXME: Needs to clear unsupported bits in the termios */
acm->clocal = ((termios->c_cflag & CLOCAL) != 0); acm->clocal = ((termios->c_cflag & CLOCAL) != 0);

View File

@ -356,25 +356,7 @@ static void belkin_sa_set_termios(struct tty_struct *tty,
/* set the number of data bits */ /* set the number of data bits */
if ((cflag & CSIZE) != (old_cflag & CSIZE)) { if ((cflag & CSIZE) != (old_cflag & CSIZE)) {
switch (cflag & CSIZE) { urb_value = BELKIN_SA_DATA_BITS(tty_get_char_size(cflag));
case CS5:
urb_value = BELKIN_SA_DATA_BITS(5);
break;
case CS6:
urb_value = BELKIN_SA_DATA_BITS(6);
break;
case CS7:
urb_value = BELKIN_SA_DATA_BITS(7);
break;
case CS8:
urb_value = BELKIN_SA_DATA_BITS(8);
break;
default:
dev_dbg(&port->dev,
"CSIZE was not CS5-CS8, using default of 8\n");
urb_value = BELKIN_SA_DATA_BITS(8);
break;
}
if (BSA_USB_CMD(BELKIN_SA_SET_DATA_BITS_REQUEST, urb_value) < 0) if (BSA_USB_CMD(BELKIN_SA_SET_DATA_BITS_REQUEST, urb_value) < 0)
dev_err(&port->dev, "Set data bits error\n"); dev_err(&port->dev, "Set data bits error\n");
} }

View File

@ -887,23 +887,8 @@ static void cypress_set_termios(struct tty_struct *tty,
} else } else
parity_enable = parity_type = 0; parity_enable = parity_type = 0;
switch (cflag & CSIZE) { data_bits = tty_get_char_size(cflag);
case CS5:
data_bits = 5;
break;
case CS6:
data_bits = 6;
break;
case CS7:
data_bits = 7;
break;
case CS8:
data_bits = 8;
break;
default:
dev_err(dev, "%s - CSIZE was set, but not CS5-CS8\n", __func__);
data_bits = 8;
}
spin_lock_irqsave(&priv->lock, flags); spin_lock_irqsave(&priv->lock, flags);
oldlines = priv->line_control; oldlines = priv->line_control;
if ((cflag & CBAUD) == B0) { if ((cflag & CBAUD) == B0) {

View File

@ -789,20 +789,7 @@ static void pl2303_set_termios(struct tty_struct *tty,
pl2303_get_line_request(port, buf); pl2303_get_line_request(port, buf);
switch (C_CSIZE(tty)) { buf[6] = tty_get_char_size(tty->termios.c_cflag);
case CS5:
buf[6] = 5;
break;
case CS6:
buf[6] = 6;
break;
case CS7:
buf[6] = 7;
break;
default:
case CS8:
buf[6] = 8;
}
dev_dbg(&port->dev, "data bits = %d\n", buf[6]); dev_dbg(&port->dev, "data bits = %d\n", buf[6]);
/* For reference buf[0]:buf[3] baud rate value */ /* For reference buf[0]:buf[3] baud rate value */

View File

@ -625,14 +625,7 @@ static void firm_setup_port(struct tty_struct *tty)
port_settings.port = port->port_number + 1; port_settings.port = port->port_number + 1;
/* get the byte size */ port_settings.bits = tty_get_char_size(cflag);
switch (cflag & CSIZE) {
case CS5: port_settings.bits = 5; break;
case CS6: port_settings.bits = 6; break;
case CS7: port_settings.bits = 7; break;
default:
case CS8: port_settings.bits = 8; break;
}
dev_dbg(dev, "%s - data bits = %d\n", __func__, port_settings.bits); dev_dbg(dev, "%s - data bits = %d\n", __func__, port_settings.bits);
/* determine the parity */ /* determine the parity */