]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
serial: imx: Simplify compatibility handling
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Mon, 11 Sep 2023 08:54:51 +0000 (10:54 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 18 Sep 2023 09:14:43 +0000 (11:14 +0200)
Three of the four entries of imx_uart_devdata[] use .uts_reg =
IMX21_UTS. The difference in the .devtype member isn't relevant, the
only thing that matters is if is equal to IMX1_UART.

So use an entry with .devtype = IMX21_UART on all platforms but i.MX1.
There is no need to have the dev types in an array, so split them up in
two separate variables.

The fsl,imx53-uart devinfo can go away because in the binding and also
the dts files all fsl,imx53-uart devices also are compatible to
fsl,imx21-uart. That's not the case for fsl,imx6q-uart (which is a bit
strange IMHO), so the fsl,imx6q-uart must stay around.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Link: https://lore.kernel.org/r/20230911085451.628798-1-u.kleine-koenig@pengutronix.de
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/imx.c

index 13cb78340709a99d48cf5557d74a718d86ed6615..3d429f6fa0482d604f4e7d729fff9745bea824e8 100644 (file)
 enum imx_uart_type {
        IMX1_UART,
        IMX21_UART,
-       IMX53_UART,
-       IMX6Q_UART,
 };
 
 /* device type dependent stuff */
@@ -240,30 +238,26 @@ struct imx_port_ucrs {
        unsigned int    ucr3;
 };
 
-static struct imx_uart_data imx_uart_devdata[] = {
-       [IMX1_UART] = {
-               .uts_reg = IMX1_UTS,
-               .devtype = IMX1_UART,
-       },
-       [IMX21_UART] = {
-               .uts_reg = IMX21_UTS,
-               .devtype = IMX21_UART,
-       },
-       [IMX53_UART] = {
-               .uts_reg = IMX21_UTS,
-               .devtype = IMX53_UART,
-       },
-       [IMX6Q_UART] = {
-               .uts_reg = IMX21_UTS,
-               .devtype = IMX6Q_UART,
-       },
+static const struct imx_uart_data imx_uart_imx1_devdata = {
+       .uts_reg = IMX1_UTS,
+       .devtype = IMX1_UART,
+};
+
+static const struct imx_uart_data imx_uart_imx21_devdata = {
+       .uts_reg = IMX21_UTS,
+       .devtype = IMX21_UART,
 };
 
 static const struct of_device_id imx_uart_dt_ids[] = {
-       { .compatible = "fsl,imx6q-uart", .data = &imx_uart_devdata[IMX6Q_UART], },
-       { .compatible = "fsl,imx53-uart", .data = &imx_uart_devdata[IMX53_UART], },
-       { .compatible = "fsl,imx1-uart", .data = &imx_uart_devdata[IMX1_UART], },
-       { .compatible = "fsl,imx21-uart", .data = &imx_uart_devdata[IMX21_UART], },
+       /*
+        * For reasons unknown to me, some UART devices (e.g. imx6ul's) are
+        * compatible to fsl,imx6q-uart, but not fsl,imx21-uart, while the
+        * original imx6q's UART is compatible to fsl,imx21-uart. This driver
+        * doesn't make any distinction between these two variants.
+        */
+       { .compatible = "fsl,imx6q-uart", .data = &imx_uart_imx21_devdata, },
+       { .compatible = "fsl,imx1-uart", .data = &imx_uart_imx1_devdata, },
+       { .compatible = "fsl,imx21-uart", .data = &imx_uart_imx21_devdata, },
        { /* sentinel */ }
 };
 MODULE_DEVICE_TABLE(of, imx_uart_dt_ids);