]> git.baikalelectronics.ru Git - kernel.git/commitdiff
serial: Embed rs485_supported to uart_port
authorIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Mon, 4 Jul 2022 09:45:14 +0000 (12:45 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 8 Jul 2022 13:14:09 +0000 (15:14 +0200)
Embed rs485_supported to uart_port to allow serial core to tweak it as
needed.

Reviewed-by: Lino Sanfilippo <l.sanfilippo@kunbus.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Link: https://lore.kernel.org/r/20220704094515.6831-2-ilpo.jarvinen@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
19 files changed:
drivers/tty/serial/8250/8250_bcm2835aux.c
drivers/tty/serial/8250/8250_dwlib.c
drivers/tty/serial/8250/8250_exar.c
drivers/tty/serial/8250/8250_fintek.c
drivers/tty/serial/8250/8250_lpc18xx.c
drivers/tty/serial/8250/8250_of.c
drivers/tty/serial/8250/8250_pci.c
drivers/tty/serial/amba-pl011.c
drivers/tty/serial/ar933x_uart.c
drivers/tty/serial/atmel_serial.c
drivers/tty/serial/fsl_lpuart.c
drivers/tty/serial/imx.c
drivers/tty/serial/max310x.c
drivers/tty/serial/mcf.c
drivers/tty/serial/omap-serial.c
drivers/tty/serial/sc16is7xx.c
drivers/tty/serial/serial_core.c
drivers/tty/serial/stm32-usart.c
include/linux/serial_core.h

index d9f1e618cfbd223efd088545005ed780c2e095c1..047e14ccb165b136321433b777ae3fdf71aaeba8 100644 (file)
@@ -108,7 +108,7 @@ static int bcm2835aux_serial_probe(struct platform_device *pdev)
        up.port.flags = UPF_SHARE_IRQ | UPF_FIXED_PORT | UPF_FIXED_TYPE |
                        UPF_SKIP_TEST | UPF_IOREMAP;
        up.port.rs485_config = serial8250_em485_config;
-       up.port.rs485_supported = &serial8250_em485_supported;
+       up.port.rs485_supported = serial8250_em485_supported;
        up.rs485_start_tx = bcm2835aux_rs485_start_tx;
        up.rs485_stop_tx = bcm2835aux_rs485_stop_tx;
 
index a8bbed74ea7006ea03c3b94c5ddb9b8c11c44554..2c3b1468bd8878503d2a7f2d7a1f9a259b60f676 100644 (file)
@@ -255,10 +255,10 @@ void dw8250_setup_port(struct uart_port *p)
        if (pd->hw_rs485_support) {
                p->rs485_config = dw8250_rs485_config;
                up->lsr_save_mask = LSR_SAVE_FLAGS | DW_UART_LSR_ADDR_RCVD;
-               p->rs485_supported = &dw8250_rs485_supported;
+               p->rs485_supported = dw8250_rs485_supported;
        } else {
                p->rs485_config = serial8250_em485_config;
-               p->rs485_supported = &serial8250_em485_supported;
+               p->rs485_supported = serial8250_em485_supported;
                up->rs485_start_tx = serial8250_em485_start_tx;
                up->rs485_stop_tx = serial8250_em485_stop_tx;
        }
index f5344cfe303c4fd09f508954cb703f8b069e80c4..314a05e009df97f840928ce1510ebc905d6534b4 100644 (file)
@@ -550,7 +550,7 @@ pci_xr17v35x_setup(struct exar8250 *priv, struct pci_dev *pcidev,
 
        port->port.uartclk = baud * 16;
        port->port.rs485_config = platform->rs485_config;
-       port->port.rs485_supported = platform->rs485_supported;
+       port->port.rs485_supported = *(platform->rs485_supported);
 
        /*
         * Setup the UART clock for the devices on expansion slot to
index eea693f5b57713d06a57391ecfa7873da90d8e96..65b6b3cbaff6cb02eea8bd4eec06e2788a6a23d7 100644 (file)
@@ -433,9 +433,9 @@ static void fintek_8250_set_rs485_handler(struct uart_8250_port *uart)
        case CHIP_ID_F81865:
                uart->port.rs485_config = fintek_8250_rs485_config;
                if (!pdata->index)
-                       uart->port.rs485_supported = &fintek_8250_rs485_supported_port0;
+                       uart->port.rs485_supported = fintek_8250_rs485_supported_port0;
                else
-                       uart->port.rs485_supported = &fintek_8250_rs485_supported;
+                       uart->port.rs485_supported = fintek_8250_rs485_supported;
                break;
 
        default: /* No RS485 Auto direction functional */
index d7cb3bb5206978826861305c2c9ea6bed34586da..d6ca0d47e9d50d0a1ef23fa8ac37d203210b8086 100644 (file)
@@ -161,7 +161,7 @@ static int lpc18xx_serial_probe(struct platform_device *pdev)
        uart.port.uartclk = clk_get_rate(data->clk_uart);
        uart.port.private_data = data;
        uart.port.rs485_config = lpc18xx_rs485_config;
-       uart.port.rs485_supported = &lpc18xx_rs485_supported;
+       uart.port.rs485_supported = lpc18xx_rs485_supported;
        uart.port.serial_out = lpc18xx_uart_serial_out;
 
        uart.dma = &data->dma;
index 65cccd559db29db4bdca2acf553d20587e889473..1b461fba15a3b19d8b8a5ebe3097f5d1cb455dd1 100644 (file)
@@ -165,7 +165,7 @@ static int of_platform_serial_setup(struct platform_device *ofdev,
 
        port->dev = &ofdev->dev;
        port->rs485_config = serial8250_em485_config;
-       port->rs485_supported = &serial8250_em485_supported;
+       port->rs485_supported = serial8250_em485_supported;
        up->rs485_start_tx = serial8250_em485_start_tx;
        up->rs485_stop_tx = serial8250_em485_stop_tx;
 
index d31d2350a9dbfcbdcd46bf83a508d77a3999e872..8a39ae072c65ceb6ea283487102995af1af7190b 100644 (file)
@@ -1607,7 +1607,7 @@ static int pci_fintek_setup(struct serial_private *priv,
        port->port.iotype = UPIO_PORT;
        port->port.iobase = iobase;
        port->port.rs485_config = pci_fintek_rs485_config;
-       port->port.rs485_supported = &pci_fintek_rs485_supported;
+       port->port.rs485_supported = pci_fintek_rs485_supported;
 
        data = devm_kzalloc(&pdev->dev, sizeof(u8), GFP_KERNEL);
        if (!data)
index c8f52945a4aafe72897568591f9312a04b2562e1..abeceeefdece9b71fc396569658447e564cdf525 100644 (file)
@@ -2779,7 +2779,7 @@ static int pl011_probe(struct amba_device *dev, const struct amba_id *id)
        uap->port.irq = dev->irq[0];
        uap->port.ops = &amba_pl011_pops;
        uap->port.rs485_config = pl011_rs485_config;
-       uap->port.rs485_supported = &pl011_rs485_supported;
+       uap->port.rs485_supported = pl011_rs485_supported;
        snprintf(uap->type, sizeof(uap->type), "PL011 rev%u", amba_rev(dev));
 
        ret = pl011_setup_port(&dev->dev, uap, &dev->res, portnr);
index b73ce13683dbc06f39e5d83f9e2d4998b11aaf5c..f931ecbc0bc03df4062ec1857123c390f2252fb2 100644 (file)
@@ -778,7 +778,7 @@ static int ar933x_uart_probe(struct platform_device *pdev)
        port->fifosize = AR933X_UART_FIFO_SIZE;
        port->ops = &ar933x_uart_ops;
        port->rs485_config = ar933x_config_rs485;
-       port->rs485_supported = &ar933x_rs485_supported;
+       port->rs485_supported = ar933x_rs485_supported;
 
        baud = ar933x_uart_get_baud(port->uartclk, AR933X_UART_MAX_SCALE, 1);
        up->min_baud = max_t(unsigned int, baud, AR933X_UART_MIN_BAUD);
@@ -802,7 +802,7 @@ static int ar933x_uart_probe(struct platform_device *pdev)
            !up->rts_gpiod) {
                dev_err(&pdev->dev, "lacking rts-gpio, disabling RS485\n");
                port->rs485.flags &= ~SER_RS485_ENABLED;
-               port->rs485_supported = &ar933x_no_rs485;
+               port->rs485_supported = ar933x_no_rs485;
        }
 
 #ifdef CONFIG_SERIAL_AR933X_CONSOLE
index bc600467958583ff29779898a552a60ca3a23ef3..30ba9eef7b395d302507d6cb67f99ef7a1924480 100644 (file)
@@ -2498,7 +2498,7 @@ static int atmel_init_port(struct atmel_uart_port *atmel_port,
        port->mapbase           = mpdev->resource[0].start;
        port->irq               = platform_get_irq(mpdev, 0);
        port->rs485_config      = atmel_config_rs485;
-       port->rs485_supported   = &atmel_rs485_supported;
+       port->rs485_supported   = atmel_rs485_supported;
        port->iso7816_config    = atmel_config_iso7816;
        port->membase           = NULL;
 
index 8fe0494d4057bcc137cdce2809c8d25d535c36dd..fc7d235a1e270b40fdb8d1c1d5316471a009b1a4 100644 (file)
@@ -2655,7 +2655,7 @@ static int lpuart_probe(struct platform_device *pdev)
                sport->port.rs485_config = lpuart32_config_rs485;
        else
                sport->port.rs485_config = lpuart_config_rs485;
-       sport->port.rs485_supported = &lpuart_rs485_supported;
+       sport->port.rs485_supported = lpuart_rs485_supported;
 
        sport->ipg_clk = devm_clk_get(&pdev->dev, "ipg");
        if (IS_ERR(sport->ipg_clk)) {
index 3457006cea3f876dfdc0fdc40220daed86ef3638..522445a8f666e5b09a7f2931c820d849d7162ff3 100644 (file)
@@ -2285,9 +2285,9 @@ static int imx_uart_probe(struct platform_device *pdev)
        sport->port.rs485_config = imx_uart_rs485_config;
        /* RTS is required to control the RS485 transmitter */
        if (sport->have_rtscts || sport->have_rtsgpio)
-               sport->port.rs485_supported = &imx_rs485_supported;
+               sport->port.rs485_supported = imx_rs485_supported;
        else
-               sport->port.rs485_supported = &imx_no_rs485;
+               sport->port.rs485_supported = imx_no_rs485;
        sport->port.flags = UPF_BOOT_AUTOCONF;
        timer_setup(&sport->timer, imx_uart_timeout, 0);
 
index e162bfb44080e9ffa985f462d9c08f907ef3fd6c..ab10ca4a45b5ff269203f2e4b3a6a4bd088a38e5 100644 (file)
@@ -1370,7 +1370,7 @@ static int max310x_probe(struct device *dev, const struct max310x_devtype *devty
                s->p[i].port.membase    = (void __iomem *)~0;
                s->p[i].port.uartclk    = uartclk;
                s->p[i].port.rs485_config = max310x_rs485_config;
-               s->p[i].port.rs485_supported = &max310x_rs485_supported;
+               s->p[i].port.rs485_supported = max310x_rs485_supported;
                s->p[i].port.ops        = &max310x_ops;
                s->p[i].regmap          = regmaps[i];
 
index 73c5287b8e5e0918a89ba14d7d6bd387364c5664..f4aaaadd07422aa022ebe1f604d7089f45801dcd 100644 (file)
@@ -506,7 +506,7 @@ int __init early_mcf_setup(struct mcf_platform_uart *platp)
                port->uartclk = MCF_BUSCLK;
                port->flags = UPF_BOOT_AUTOCONF;
                port->rs485_config = mcf_config_rs485;
-               port->rs485_supported = &mcf_rs485_supported;
+               port->rs485_supported = mcf_rs485_supported;
                port->ops = &mcf_uart_ops;
        }
 
@@ -634,7 +634,7 @@ static int mcf_probe(struct platform_device *pdev)
                port->ops = &mcf_uart_ops;
                port->flags = UPF_BOOT_AUTOCONF;
                port->rs485_config = mcf_config_rs485;
-               port->rs485_supported = &mcf_rs485_supported;
+               port->rs485_supported = mcf_rs485_supported;
                port->has_sysrq = IS_ENABLED(CONFIG_SERIAL_MCF_CONSOLE);
 
                uart_add_one_port(&mcf_driver, port);
index 196bae704f859dc83f543722a681252535ed14e8..0aa666e247d5781ec0276b37aab52ba38dc65639 100644 (file)
@@ -1643,7 +1643,7 @@ static int serial_omap_probe(struct platform_device *pdev)
        up->port.flags = omap_up_info->flags;
        up->port.uartclk = omap_up_info->uartclk;
        up->port.rs485_config = serial_omap_config_rs485;
-       up->port.rs485_supported = &serial_omap_rs485_supported;
+       up->port.rs485_supported = serial_omap_rs485_supported;
        if (!up->port.uartclk) {
                up->port.uartclk = DEFAULT_CLK_SPEED;
                dev_warn(&pdev->dev,
index 8cb92a3b3fb8f2f1bbbf4864da815a8da6ba6b5b..259e08cc347cc4c6528fb8508cf31f759abab29e 100644 (file)
@@ -1461,7 +1461,7 @@ static int sc16is7xx_probe(struct device *dev,
                s->p[i].port.iotype     = UPIO_PORT;
                s->p[i].port.uartclk    = freq;
                s->p[i].port.rs485_config = sc16is7xx_config_rs485;
-               s->p[i].port.rs485_supported = &sc16is7xx_rs485_supported;
+               s->p[i].port.rs485_supported = sc16is7xx_rs485_supported;
                s->p[i].port.ops        = &sc16is7xx_ops;
                s->p[i].old_mctrl       = 0;
                s->p[i].port.line       = sc16is7xx_alloc_line();
index 85ef7ef00b8242b68b660351b08c495d1f585850..a9cf1044a9faa929d3a3d24bf91240469917cf23 100644 (file)
@@ -1285,7 +1285,7 @@ static int uart_check_rs485_flags(struct uart_port *port, struct serial_rs485 *r
         * For any bit outside of the legacy ones that is not supported by
         * the driver, return -EINVAL.
         */
-       if (flags & ~port->rs485_supported->flags)
+       if (flags & ~port->rs485_supported.flags)
                return -EINVAL;
 
        /* Asking for address w/o addressing mode? */
@@ -1304,7 +1304,7 @@ static int uart_check_rs485_flags(struct uart_port *port, struct serial_rs485 *r
 
 static void uart_sanitize_serial_rs485(struct uart_port *port, struct serial_rs485 *rs485)
 {
-       u32 supported_flags = port->rs485_supported->flags;
+       u32 supported_flags = port->rs485_supported.flags;
 
        if (!(rs485->flags & SER_RS485_ENABLED)) {
                memset(rs485, 0, sizeof(*rs485));
@@ -1323,7 +1323,7 @@ static void uart_sanitize_serial_rs485(struct uart_port *port, struct serial_rs4
                supported_flags |= SER_RS485_RTS_ON_SEND|SER_RS485_RTS_AFTER_SEND;
        }
 
-       if (!port->rs485_supported->delay_rts_before_send) {
+       if (!port->rs485_supported.delay_rts_before_send) {
                if (rs485->delay_rts_before_send) {
                        dev_warn_ratelimited(port->dev,
                                "%s (%d): RTS delay before sending not supported\n",
@@ -1337,7 +1337,7 @@ static void uart_sanitize_serial_rs485(struct uart_port *port, struct serial_rs4
                        port->name, port->line, rs485->delay_rts_before_send);
        }
 
-       if (!port->rs485_supported->delay_rts_after_send) {
+       if (!port->rs485_supported.delay_rts_after_send) {
                if (rs485->delay_rts_after_send) {
                        dev_warn_ratelimited(port->dev,
                                "%s (%d): RTS delay after sending not supported\n",
index 13992e64a7df907a4dbaa23cebbf49e9861fcd53..ff5c7e0ebc4c66aaf93f4a74ac4a4e4a40bf4076 100644 (file)
@@ -1401,7 +1401,7 @@ static int stm32_usart_init_port(struct stm32_port *stm32port,
        port->has_sysrq = IS_ENABLED(CONFIG_SERIAL_STM32_CONSOLE);
        port->irq = irq;
        port->rs485_config = stm32_usart_config_rs485;
-       port->rs485_supported = &stm32_rs485_supported;
+       port->rs485_supported = stm32_rs485_supported;
 
        ret = stm32_usart_init_rs485(port, pdev);
        if (ret)
index b7b86ee3cb125a2ab3c9d35531d70b5e9bec7c63..a6fa7c40c3307c19f34f6c3bcba5f0be110fb940 100644 (file)
@@ -255,7 +255,7 @@ struct uart_port {
        struct attribute_group  *attr_group;            /* port specific attributes */
        const struct attribute_group **tty_groups;      /* all attributes (serial core use only) */
        struct serial_rs485     rs485;
-       const struct serial_rs485       *rs485_supported;       /* Supported mask for serial_rs485 */
+       struct serial_rs485     rs485_supported;        /* Supported mask for serial_rs485 */
        struct gpio_desc        *rs485_term_gpio;       /* enable RS485 bus termination */
        struct serial_iso7816   iso7816;
        void                    *private_data;          /* generic platform data pointer */