diff options
author | Katsunaga Kinoshita <katsu@katsu-ubuntu.(none)> | 2012-06-06 16:12:17 +0900 |
---|---|---|
committer | Justin Waters <justin.waters@timesys.com> | 2012-07-03 17:15:07 -0400 |
commit | 233b48907dd52d62282770c691201b3b4cc78d47 (patch) | |
tree | 9ddf94eee07c280c87234d4a3afe6518cdd21655 | |
parent | 1e123c5d6c82065501b9417524af4ab56ebc0019 (diff) |
update: update serial and gpio inlitalize.
-rw-r--r-- | arch/arm/mach-mvf/devices.c | 2 | ||||
-rw-r--r-- | arch/arm/plat-mxc/mvf_gpio.c | 1 | ||||
-rw-r--r-- | drivers/tty/serial/serial_mvf.c | 31 |
3 files changed, 30 insertions, 4 deletions
diff --git a/arch/arm/mach-mvf/devices.c b/arch/arm/mach-mvf/devices.c index 0984259b10bc..731b6a8e120c 100644 --- a/arch/arm/mach-mvf/devices.c +++ b/arch/arm/mach-mvf/devices.c @@ -81,5 +81,5 @@ static struct mvf_gpio_port mvf_gpio_ports[] = { int mvf_register_gpios(void) { /* 5 ports for MVF */ - return mvf_gpio_init(mvf_gpio_ports, 7); + return mvf_gpio_init(mvf_gpio_ports, 5); } diff --git a/arch/arm/plat-mxc/mvf_gpio.c b/arch/arm/plat-mxc/mvf_gpio.c index 161653f87e3e..8722ac38304d 100644 --- a/arch/arm/plat-mxc/mvf_gpio.c +++ b/arch/arm/plat-mxc/mvf_gpio.c @@ -166,6 +166,7 @@ static void gpio_mask_irq(struct irq_data *d) static void gpio_unmask_irq(struct irq_data *d) { u32 gpio = irq_to_gpio(d->irq); + printk("gpio = %d\n",gpio); _set_gpio_irqenable(&mvf_gpio_ports[gpio / 32], gpio & 0x1f, 1); } diff --git a/drivers/tty/serial/serial_mvf.c b/drivers/tty/serial/serial_mvf.c index fa2719a5f662..581c7f74cafb 100644 --- a/drivers/tty/serial/serial_mvf.c +++ b/drivers/tty/serial/serial_mvf.c @@ -541,29 +541,36 @@ static int serial_mvf_probe(struct platform_device *pdev) int ret = 0; struct resource *res; + /* Allocate mvf port struct */ sport = kzalloc(sizeof(*sport),GFP_KERNEL); if ( !sport ) return -ENOMEM; + /* Get memory resources */ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if ( !res ){ ret = ENODEV; goto free; } - + base = ioremap(res->start, PAGE_SIZE); sport->port.dev = &pdev->dev; sport->port.mapbase = res->start; sport->port.membase = base; - sport->port.type = PORT_IMX, + sport->port.type = PORT_IMX; sport->port.iotype = UPIO_MEM; + /* Get IRQ 1 */ sport->port.irq = platform_get_irq(pdev, 0); + /* Is this Machine usr irqs?*/ +#if 0 sport->rxirq = platform_get_irq(pdev, 0); sport->txirq = platform_get_irq(pdev, 1); sport->rtsirq = platform_get_irq(pdev, 2); +#endif + sport->port.fifosize = 32; sport->port.ops = &mvf_pops; sport->port.flags = UPF_BOOT_AUTOCONF; @@ -623,9 +630,27 @@ free: } -static int serial_mvf_remove(struct platform_device *dev) +static int serial_mvf_remove(struct platform_device *pdev) { + struct mvfuart_platform_data *pdata; + struct mvf_port *sport = platform_get_drvdata(pdev); + + pdata = pdev->dev.platform_data; + + platform_set_drvdata(pdev, NULL); + + if (sport){ + uart_remove_one_port(&mvf_reg, &sport->port); + } + + clk_disable(sport->clk); + if (pdata && pdata->exit) + pdata->exit(pdev); + + iounmap(sport->port.membase); + kfree(sport); + return 0; } |