[PATCH 1/5] serial: imx: distinguish the imx6 uart from the others
Shawn Guo
shawn.guo at linaro.org
Tue Jul 2 21:48:38 EDT 2013
On Tue, Jul 02, 2013 at 02:30:24PM +0800, Huang Shijie wrote:
> We will add the DMA support for the imx uart. For the firmware's limit,
> only the imx6 uart can supports the DMA.
>
> This patch adds the necessary macro and helper to distinguish the imx6 uart
> from the other imx uart.
>
> Signed-off-by: Huang Shijie <b32955 at freescale.com>
> ---
> drivers/tty/serial/imx.c | 17 +++++++++++++++--
> 1 files changed, 15 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c
> index 48bace0..d215fa9 100644
> --- a/drivers/tty/serial/imx.c
> +++ b/drivers/tty/serial/imx.c
> @@ -187,6 +187,7 @@
> enum imx_uart_type {
> IMX1_UART,
> IMX21_UART,
> + IMX6_UART,
> };
>
> /* device type dependent stuff */
> @@ -232,6 +233,10 @@ static struct imx_uart_data imx_uart_devdata[] = {
> .uts_reg = IMX21_UTS,
> .devtype = IMX21_UART,
> },
> + [IMX6_UART] = {
> + .uts_reg = IMX21_UTS,
> + .devtype = IMX6_UART,
> + },
> };
>
> static struct platform_device_id imx_uart_devtype[] = {
> @@ -242,6 +247,9 @@ static struct platform_device_id imx_uart_devtype[] = {
> .name = "imx21-uart",
> .driver_data = (kernel_ulong_t) &imx_uart_devdata[IMX21_UART],
> }, {
> + .name = "imx6-uart",
> + .driver_data = (kernel_ulong_t) &imx_uart_devdata[IMX6_UART],
> + }, {
> /* sentinel */
> }
> };
> @@ -250,6 +258,7 @@ MODULE_DEVICE_TABLE(platform, imx_uart_devtype);
> static struct of_device_id imx_uart_dt_ids[] = {
> { .compatible = "fsl,imx1-uart", .data = &imx_uart_devdata[IMX1_UART], },
> { .compatible = "fsl,imx21-uart", .data = &imx_uart_devdata[IMX21_UART], },
> + { .compatible = "fsl,imx6-uart", .data = &imx_uart_devdata[IMX6_UART], },
We generally use a chip/SoC name in compatible to specify a particular
device type. imx6 is not such a name.
Shawn
> { /* sentinel */ }
> };
> MODULE_DEVICE_TABLE(of, imx_uart_dt_ids);
> @@ -269,6 +278,10 @@ static inline int is_imx21_uart(struct imx_port *sport)
> return sport->devdata->devtype == IMX21_UART;
> }
>
> +static inline int is_imx6_uart(struct imx_port *sport)
> +{
> + return sport->devdata->devtype == IMX6_UART;
> +}
> /*
> * Save and restore functions for UCR1, UCR2 and UCR3 registers
> */
> @@ -801,7 +814,7 @@ static int imx_startup(struct uart_port *port)
> }
> }
>
> - if (is_imx21_uart(sport)) {
> + if (is_imx21_uart(sport) || is_imx6_uart(sport)) {
> temp = readl(sport->port.membase + UCR3);
> temp |= IMX21_UCR3_RXDMUXSEL;
> writel(temp, sport->port.membase + UCR3);
> @@ -1044,7 +1057,7 @@ imx_set_termios(struct uart_port *port, struct ktermios *termios,
> writel(num, sport->port.membase + UBIR);
> writel(denom, sport->port.membase + UBMR);
>
> - if (is_imx21_uart(sport))
> + if (is_imx21_uart(sport) || is_imx6_uart(sport))
> writel(sport->port.uartclk / div / 1000,
> sport->port.membase + IMX21_ONEMS);
>
> --
> 1.7.1
>
>
More information about the linux-arm-kernel
mailing list