linux/arch/mips/pnx8550/common/platform.c
Ralf Baechle 79d7cd31f9 MIPS: PNX8550: Move code one directory level up.
It was sharing the nxp directory but no code with pnx833x and will fit
better into the new platform makefile scheme, if moved.  Also after the
pnx833x code has been moved up, the pnx8550 Code was the last users of
the nxp dir.

Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
2010-08-05 13:25:56 +01:00

134 lines
3.1 KiB
C

/*
* Platform device support for NXP PNX8550 SoCs
*
* Copyright 2005, Embedded Alley Solutions, Inc
*
* Based on arch/mips/au1000/common/platform.c
* Platform device support for Au1x00 SoCs.
*
* Copyright 2004, Matt Porter <mporter@kernel.crashing.org>
*
* This file is licensed under the terms of the GNU General Public
* License version 2. This program is licensed "as is" without any
* warranty of any kind, whether express or implied.
*/
#include <linux/device.h>
#include <linux/dma-mapping.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/resource.h>
#include <linux/serial.h>
#include <linux/serial_pnx8xxx.h>
#include <linux/platform_device.h>
#include <int.h>
#include <usb.h>
#include <uart.h>
static struct resource pnx8550_usb_ohci_resources[] = {
[0] = {
.start = PNX8550_USB_OHCI_OP_BASE,
.end = PNX8550_USB_OHCI_OP_BASE +
PNX8550_USB_OHCI_OP_LEN,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = PNX8550_INT_USB,
.end = PNX8550_INT_USB,
.flags = IORESOURCE_IRQ,
},
};
static struct resource pnx8550_uart_resources[] = {
[0] = {
.start = PNX8550_UART_PORT0,
.end = PNX8550_UART_PORT0 + 0xfff,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = PNX8550_UART_INT(0),
.end = PNX8550_UART_INT(0),
.flags = IORESOURCE_IRQ,
},
[2] = {
.start = PNX8550_UART_PORT1,
.end = PNX8550_UART_PORT1 + 0xfff,
.flags = IORESOURCE_MEM,
},
[3] = {
.start = PNX8550_UART_INT(1),
.end = PNX8550_UART_INT(1),
.flags = IORESOURCE_IRQ,
},
};
struct pnx8xxx_port pnx8xxx_ports[] = {
[0] = {
.port = {
.type = PORT_PNX8XXX,
.iotype = UPIO_MEM,
.membase = (void __iomem *)PNX8550_UART_PORT0,
.mapbase = PNX8550_UART_PORT0,
.irq = PNX8550_UART_INT(0),
.uartclk = 3692300,
.fifosize = 16,
.flags = UPF_BOOT_AUTOCONF,
.line = 0,
},
},
[1] = {
.port = {
.type = PORT_PNX8XXX,
.iotype = UPIO_MEM,
.membase = (void __iomem *)PNX8550_UART_PORT1,
.mapbase = PNX8550_UART_PORT1,
.irq = PNX8550_UART_INT(1),
.uartclk = 3692300,
.fifosize = 16,
.flags = UPF_BOOT_AUTOCONF,
.line = 1,
},
},
};
/* The dmamask must be set for OHCI to work */
static u64 ohci_dmamask = DMA_BIT_MASK(32);
static u64 uart_dmamask = DMA_BIT_MASK(32);
static struct platform_device pnx8550_usb_ohci_device = {
.name = "pnx8550-ohci",
.id = -1,
.dev = {
.dma_mask = &ohci_dmamask,
.coherent_dma_mask = DMA_BIT_MASK(32),
},
.num_resources = ARRAY_SIZE(pnx8550_usb_ohci_resources),
.resource = pnx8550_usb_ohci_resources,
};
static struct platform_device pnx8550_uart_device = {
.name = "pnx8xxx-uart",
.id = -1,
.dev = {
.dma_mask = &uart_dmamask,
.coherent_dma_mask = DMA_BIT_MASK(32),
.platform_data = pnx8xxx_ports,
},
.num_resources = ARRAY_SIZE(pnx8550_uart_resources),
.resource = pnx8550_uart_resources,
};
static struct platform_device *pnx8550_platform_devices[] __initdata = {
&pnx8550_usb_ohci_device,
&pnx8550_uart_device,
};
static int __init pnx8550_platform_init(void)
{
return platform_add_devices(pnx8550_platform_devices,
ARRAY_SIZE(pnx8550_platform_devices));
}
arch_initcall(pnx8550_platform_init);