[PATCH v2] serial/imx: only parse for iomem resources once
From: Jeremy Kerr <hidden>
Date: 2010-07-14 08:42:58
Also in:
linux-serial
Subsystem:
the rest · Maintainer:
Linus Torvalds
Currently, the iomem resources are parsed in serial_imx_probe, then again in imx_request_port and imx_release_port. This change uses the imx_port data to retrieve the start and size of the memory region, rather than re-parsing the resources through platform_get_resource. Signed-off-by: Jeremy Kerr <redacted> --- v2: use resource_size() --- drivers/serial/imx.c | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-)
diff --git a/drivers/serial/imx.c b/drivers/serial/imx.c
index eacb588..f72d7c2 100644
--- a/drivers/serial/imx.c
+++ b/drivers/serial/imx.c@@ -194,6 +194,7 @@ struct imx_port { unsigned int irda_inv_tx:1; unsigned short trcv_delay; /* transceiver delay */ struct clk *clk; + unsigned long mapsize; }; #ifdef CONFIG_IRDA
@@ -954,11 +955,8 @@ static const char *imx_type(struct uart_port *port) */ static void imx_release_port(struct uart_port *port) { - struct platform_device *pdev = to_platform_device(port->dev); - struct resource *mmres; - - mmres = platform_get_resource(pdev, IORESOURCE_MEM, 0); - release_mem_region(mmres->start, mmres->end - mmres->start + 1); + struct imx_port *imx_port = container_of(port, struct imx_port, port); + release_mem_region(imx_port->port.mapbase, imx_port->mapsize); } /*
@@ -966,15 +964,10 @@ static void imx_release_port(struct uart_port *port) */ static int imx_request_port(struct uart_port *port) { - struct platform_device *pdev = to_platform_device(port->dev); - struct resource *mmres; + struct imx_port *imx_port = container_of(port, struct imx_port, port); 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, + ret = request_mem_region(imx_port->port.mapbase, imx_port->mapsize, "imx-uart"); return ret ? 0 : -EBUSY;
@@ -1254,6 +1247,7 @@ static int serial_imx_probe(struct platform_device *pdev) sport->port.dev = &pdev->dev; sport->port.mapbase = res->start; sport->port.membase = base; + sport->mapsize = resource_size(res); sport->port.type = PORT_IMX, sport->port.iotype = UPIO_MEM; sport->port.irq = platform_get_irq(pdev, 0);