From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756594AbcANRnj (ORCPT ); Thu, 14 Jan 2016 12:43:39 -0500 Received: from bhuna.collabora.co.uk ([46.235.227.227]:42522 "EHLO bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756434AbcANRnh (ORCPT ); Thu, 14 Jan 2016 12:43:37 -0500 Message-ID: <5697DE45.7000204@collabora.co.uk> Date: Thu, 14 Jan 2016 17:43:33 +0000 From: Martyn Welch User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Icedove/31.8.0 MIME-Version: 1.0 To: Konstantin Shkolnyy , johan@kernel.org CC: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v3 2/4] USB: serial: cp210x: Switch to new 16-bit register access functions. References: <1451704323-11941-1-git-send-email-konstantin.shkolnyy@gmail.com> In-Reply-To: <1451704323-11941-1-git-send-email-konstantin.shkolnyy@gmail.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 02/01/16 03:12, Konstantin Shkolnyy wrote: > Change to use new 16-bit register access functions instead of > cp210x_get_config and cp210x_set_config. > > Signed-off-by: Konstantin Shkolnyy > --- > change in v3: Presented new function addition as a separate patch #1, > to simplify code review. > > drivers/usb/serial/cp210x.c | 80 ++++++++++++++++++--------------------------- > 1 file changed, 31 insertions(+), 49 deletions(-) > > diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c > index 324eb7e..7a91c6c 100644 > --- a/drivers/usb/serial/cp210x.c > +++ b/drivers/usb/serial/cp210x.c > @@ -588,17 +588,6 @@ static int cp210x_set_config(struct usb_serial_port *port, u8 request, > } > > /* > - * cp210x_set_config_single > - * Convenience function for calling cp210x_set_config on single data values > - * without requiring an integer pointer > - */ > -static inline int cp210x_set_config_single(struct usb_serial_port *port, > - u8 request, unsigned int data) > -{ > - return cp210x_set_config(port, request, &data, 2); > -} > - > -/* > * Detect CP2108 GET_LINE_CTL bug and activate workaround. > * Write a known good value 0x800, read it back. > * If it comes back swapped the bug is detected. > @@ -607,48 +596,47 @@ static inline int cp210x_set_config_single(struct usb_serial_port *port, > static int cp210x_detect_swapped_line_ctl(struct usb_serial_port *port) > { > struct cp210x_port_private *port_priv = usb_get_serial_port_data(port); > - unsigned int line_ctl_save; > - unsigned int line_ctl_test; > + u16 line_ctl_save; > + u16 line_ctl_test; > int err; > > - err = cp210x_get_config(port, CP210X_GET_LINE_CTL, &line_ctl_save, 2); > + err = cp210x_read_u16_reg(port, CP210X_GET_LINE_CTL, &line_ctl_save); > if (err) > return err; > > - line_ctl_test = 0x800; > - err = cp210x_set_config(port, CP210X_SET_LINE_CTL, &line_ctl_test, 2); > + err = cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, 0x800); As mentioned in the comments to the first patch. > if (err) > return err; > > - err = cp210x_get_config(port, CP210X_GET_LINE_CTL, &line_ctl_test, 2); > + err = cp210x_read_u16_reg(port, CP210X_GET_LINE_CTL, &line_ctl_test); > if (err) > return err; > > /* has_swapped_line_ctl is 0 here because port_priv was kzalloced */ > if (line_ctl_test == 8) { > port_priv->has_swapped_line_ctl = true; > - line_ctl_save = swab16((u16)line_ctl_save); > + line_ctl_save = swab16(line_ctl_save); > } > > - return cp210x_set_config(port, CP210X_SET_LINE_CTL, &line_ctl_save, 2); > + return cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, line_ctl_save); > } > > /* > - * Must always be called instead of cp210x_get_config(CP210X_GET_LINE_CTL) > + * Must always be called instead of cp210x_read_u16_reg(CP210X_GET_LINE_CTL) > * to workaround cp2108 bug and get correct value. > */ > -static int cp210x_get_line_ctl(struct usb_serial_port *port, unsigned int *ctl) > +static int cp210x_get_line_ctl(struct usb_serial_port *port, u16 *ctl) > { > struct cp210x_port_private *port_priv = usb_get_serial_port_data(port); > int err; > > - err = cp210x_get_config(port, CP210X_GET_LINE_CTL, ctl, 2); > + err = cp210x_read_u16_reg(port, CP210X_GET_LINE_CTL, ctl); > if (err) > return err; > > /* Workaround swapped bytes in 16-bit value from CP210X_GET_LINE_CTL */ > if (port_priv->has_swapped_line_ctl) > - *ctl = swab16((u16)(*ctl)); > + *ctl = swab16(*ctl); > > return 0; > } > @@ -697,14 +685,11 @@ static unsigned int cp210x_quantise_baudrate(unsigned int baud) > > static int cp210x_open(struct tty_struct *tty, struct usb_serial_port *port) > { > - int result; > + int err; > > - result = cp210x_set_config_single(port, CP210X_IFC_ENABLE, > - UART_ENABLE); > - if (result) { > - dev_err(&port->dev, "%s - Unable to enable UART\n", __func__); > - return result; > - } > + err = cp210x_write_u16_reg(port, CP210X_IFC_ENABLE, UART_ENABLE); > + if (err) > + return err; Any reason for dropping the error message? > > /* Configure the termios structure */ > cp210x_get_termios(tty, port); > @@ -718,15 +703,12 @@ static int cp210x_open(struct tty_struct *tty, struct usb_serial_port *port) > > static void cp210x_close(struct usb_serial_port *port) > { > - unsigned int purge_ctl; > - > usb_serial_generic_close(port); > > /* Clear both queues; cp2108 needs this to avoid an occasional hang */ > - purge_ctl = PURGE_ALL; > - cp210x_set_config(port, CP210X_PURGE, &purge_ctl, 2); > + cp210x_write_u16_reg(port, CP210X_PURGE, PURGE_ALL); > > - cp210x_set_config_single(port, CP210X_IFC_ENABLE, UART_DISABLE); > + cp210x_write_u16_reg(port, CP210X_IFC_ENABLE, UART_DISABLE); > } > > /* > @@ -806,7 +788,7 @@ static void cp210x_get_termios_port(struct usb_serial_port *port, > struct device *dev = &port->dev; > unsigned int cflag, modem_ctl[4]; > unsigned int baud; > - unsigned int bits; > + u16 bits; > > cp210x_get_config(port, CP210X_GET_BAUDRATE, &baud, 4); > > @@ -839,14 +821,14 @@ static void cp210x_get_termios_port(struct usb_serial_port *port, > cflag |= CS8; > bits &= ~BITS_DATA_MASK; > bits |= BITS_DATA_8; > - cp210x_set_config(port, CP210X_SET_LINE_CTL, &bits, 2); > + cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, bits); > break; > default: > dev_dbg(dev, "%s - Unknown number of data bits, using 8\n", __func__); > cflag |= CS8; > bits &= ~BITS_DATA_MASK; > bits |= BITS_DATA_8; > - cp210x_set_config(port, CP210X_SET_LINE_CTL, &bits, 2); > + cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, bits); > break; > } > > @@ -877,7 +859,7 @@ static void cp210x_get_termios_port(struct usb_serial_port *port, > dev_dbg(dev, "%s - Unknown parity mode, disabling parity\n", __func__); > cflag &= ~PARENB; > bits &= ~BITS_PARITY_MASK; > - cp210x_set_config(port, CP210X_SET_LINE_CTL, &bits, 2); > + cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, bits); > break; > } > > @@ -889,7 +871,7 @@ static void cp210x_get_termios_port(struct usb_serial_port *port, > case BITS_STOP_1_5: > dev_dbg(dev, "%s - stop bits = 1.5 (not supported, using 1 stop bit)\n", __func__); > bits &= ~BITS_STOP_MASK; > - cp210x_set_config(port, CP210X_SET_LINE_CTL, &bits, 2); > + cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, bits); > break; > case BITS_STOP_2: > dev_dbg(dev, "%s - stop bits = 2\n", __func__); > @@ -898,7 +880,7 @@ static void cp210x_get_termios_port(struct usb_serial_port *port, > default: > dev_dbg(dev, "%s - Unknown number of stop bits, using 1 stop bit\n", __func__); > bits &= ~BITS_STOP_MASK; > - cp210x_set_config(port, CP210X_SET_LINE_CTL, &bits, 2); > + cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, bits); > break; > } > > @@ -972,7 +954,7 @@ static void cp210x_set_termios(struct tty_struct *tty, > { > struct device *dev = &port->dev; > unsigned int cflag, old_cflag; > - unsigned int bits; > + u16 bits; > unsigned int modem_ctl[4]; > > cflag = tty->termios.c_cflag; > @@ -1011,7 +993,7 @@ static void cp210x_set_termios(struct tty_struct *tty, > bits |= BITS_DATA_8; > break; > } > - if (cp210x_set_config(port, CP210X_SET_LINE_CTL, &bits, 2)) > + if (cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, bits)) > dev_dbg(dev, "Number of data bits requested not supported by device\n"); > } > > @@ -1038,7 +1020,7 @@ static void cp210x_set_termios(struct tty_struct *tty, > } > } > } > - if (cp210x_set_config(port, CP210X_SET_LINE_CTL, &bits, 2)) > + if (cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, bits)) > dev_dbg(dev, "Parity mode not supported by device\n"); > } > > @@ -1052,7 +1034,7 @@ static void cp210x_set_termios(struct tty_struct *tty, > bits |= BITS_STOP_1; > dev_dbg(dev, "%s - stop bits = 1\n", __func__); > } > - if (cp210x_set_config(port, CP210X_SET_LINE_CTL, &bits, 2)) > + if (cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, bits)) > dev_dbg(dev, "Number of stop bits requested not supported by device\n"); > } > > @@ -1092,7 +1074,7 @@ static int cp210x_tiocmset(struct tty_struct *tty, > static int cp210x_tiocmset_port(struct usb_serial_port *port, > unsigned int set, unsigned int clear) > { > - unsigned int control = 0; > + u16 control = 0; > > if (set & TIOCM_RTS) { > control |= CONTROL_RTS; > @@ -1113,7 +1095,7 @@ static int cp210x_tiocmset_port(struct usb_serial_port *port, > > dev_dbg(&port->dev, "%s - control = 0x%.4x\n", __func__, control); > > - return cp210x_set_config(port, CP210X_SET_MHS, &control, 2); > + return cp210x_write_u16_reg(port, CP210X_SET_MHS, control); > } > > static void cp210x_dtr_rts(struct usb_serial_port *p, int on) > @@ -1147,7 +1129,7 @@ static int cp210x_tiocmget(struct tty_struct *tty) > static void cp210x_break_ctl(struct tty_struct *tty, int break_state) > { > struct usb_serial_port *port = tty->driver_data; > - unsigned int state; > + u16 state; > > if (break_state == 0) > state = BREAK_OFF; > @@ -1155,7 +1137,7 @@ static void cp210x_break_ctl(struct tty_struct *tty, int break_state) > state = BREAK_ON; > dev_dbg(&port->dev, "%s - turning break %s\n", __func__, > state == BREAK_OFF ? "off" : "on"); > - cp210x_set_config(port, CP210X_SET_BREAK, &state, 2); > + cp210x_write_u16_reg(port, CP210X_SET_BREAK, state); > } > > static int cp210x_port_probe(struct usb_serial_port *port) >