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:
parent
d8f0209bfe
commit
3ec2ff3723
@ -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;
|
||||||
|
@ -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);
|
||||||
|
@ -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) {
|
||||||
|
@ -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) {
|
||||||
|
@ -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)
|
||||||
|
@ -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);
|
||||||
|
@ -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) {
|
||||||
|
@ -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)
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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");
|
||||||
}
|
}
|
||||||
|
@ -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) {
|
||||||
|
@ -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 */
|
||||||
|
@ -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 */
|
||||||
|
Loading…
Reference in New Issue
Block a user