]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/serial/imx.c
[MTD] [NAND] S3C2410 Allow ECC layout to be passed through platform data
[linux-2.6-omap-h63xx.git] / drivers / serial / imx.c
index dd1e071834beb1ccf4fb205ab3ec7691af6e3a0d..5a375bf0ebf4ab7756bf5ed3529f4f04b44acfde 100644 (file)
 #define SERIAL_IMX_MAJOR       204
 #define MINOR_START            41
 
-/*
- * This is the size of our serial port register set.
- */
-#define UART_PORT_SIZE 0x100
-
 /*
  * This determines how often we check the modem status signals
  * for any change.  They generally aren't connected to an IRQ
@@ -721,9 +716,11 @@ static const char *imx_type(struct uart_port *port)
  */
 static void imx_release_port(struct uart_port *port)
 {
-       struct imx_port *sport = (struct imx_port *)port;
+       struct platform_device *pdev = to_platform_device(port->dev);
+       struct resource *mmres;
 
-       release_mem_region(sport->port.mapbase, UART_PORT_SIZE);
+       mmres = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+       release_mem_region(mmres->start, mmres->end - mmres->start + 1);
 }
 
 /*
@@ -731,10 +728,18 @@ static void imx_release_port(struct uart_port *port)
  */
 static int imx_request_port(struct uart_port *port)
 {
-       struct imx_port *sport = (struct imx_port *)port;
+       struct platform_device *pdev = to_platform_device(port->dev);
+       struct resource *mmres;
+       void *ret;
+
+       mmres = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+       if (!mmres)
+               return -ENODEV;
+
+       ret = request_mem_region(mmres->start, mmres->end - mmres->start + 1,
+                       "imx-uart");
 
-       return request_mem_region(sport->port.mapbase, UART_PORT_SIZE,
-                       "imx-uart") != NULL ? 0 : -EBUSY;
+       return  ret ? 0 : -EBUSY;
 }
 
 /*
@@ -805,7 +810,7 @@ static struct imx_port imx_ports[] = {
                .type           = PORT_IMX,
                .iotype         = UPIO_MEM,
                .membase        = (void *)IMX_UART1_BASE,
-               .mapbase        = IMX_UART1_BASE, /* FIXME */
+               .mapbase        = 0x00206000,
                .irq            = UART1_MINT_RX,
                .uartclk        = 16000000,
                .fifosize       = 32,
@@ -821,7 +826,7 @@ static struct imx_port imx_ports[] = {
                .type           = PORT_IMX,
                .iotype         = UPIO_MEM,
                .membase        = (void *)IMX_UART2_BASE,
-               .mapbase        = IMX_UART2_BASE, /* FIXME */
+               .mapbase        = 0x00207000,
                .irq            = UART2_MINT_RX,
                .uartclk        = 16000000,
                .fifosize       = 32,
@@ -1080,6 +1085,7 @@ static struct platform_driver serial_imx_driver = {
        .resume         = serial_imx_resume,
        .driver         = {
                .name   = "imx-uart",
+               .owner  = THIS_MODULE,
        },
 };
 
@@ -1114,3 +1120,4 @@ module_exit(imx_serial_exit);
 MODULE_AUTHOR("Sascha Hauer");
 MODULE_DESCRIPTION("IMX generic serial port driver");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:imx-uart");