PageRenderTime 24ms CodeModel.GetById 14ms app.highlight 8ms RepoModel.GetById 0ms app.codeStats 0ms

/arch/mips/nxp/pnx8550/common/platform.c

https://bitbucket.org/cresqo/cm7-p500-kernel
C | 133 lines | 107 code | 11 blank | 15 comment | 0 complexity | 81dd442776cebaada7cf5d7d17664a65 MD5 | raw file
Possible License(s): LGPL-2.0, AGPL-1.0, GPL-2.0
  1/*
  2 * Platform device support for NXP PNX8550 SoCs
  3 *
  4 * Copyright 2005, Embedded Alley Solutions, Inc
  5 *
  6 * Based on arch/mips/au1000/common/platform.c
  7 * Platform device support for Au1x00 SoCs.
  8 *
  9 * Copyright 2004, Matt Porter <mporter@kernel.crashing.org>
 10 *
 11 * This file is licensed under the terms of the GNU General Public
 12 * License version 2.  This program is licensed "as is" without any
 13 * warranty of any kind, whether express or implied.
 14 */
 15#include <linux/device.h>
 16#include <linux/dma-mapping.h>
 17#include <linux/kernel.h>
 18#include <linux/init.h>
 19#include <linux/resource.h>
 20#include <linux/serial.h>
 21#include <linux/serial_pnx8xxx.h>
 22#include <linux/platform_device.h>
 23
 24#include <int.h>
 25#include <usb.h>
 26#include <uart.h>
 27
 28static struct resource pnx8550_usb_ohci_resources[] = {
 29	[0] = {
 30		.start		= PNX8550_USB_OHCI_OP_BASE,
 31		.end		= PNX8550_USB_OHCI_OP_BASE +
 32				  PNX8550_USB_OHCI_OP_LEN,
 33		.flags		= IORESOURCE_MEM,
 34	},
 35	[1] = {
 36		.start		= PNX8550_INT_USB,
 37		.end		= PNX8550_INT_USB,
 38		.flags		= IORESOURCE_IRQ,
 39	},
 40};
 41
 42static struct resource pnx8550_uart_resources[] = {
 43	[0] = {
 44		.start		= PNX8550_UART_PORT0,
 45		.end		= PNX8550_UART_PORT0 + 0xfff,
 46		.flags		= IORESOURCE_MEM,
 47	},
 48	[1] = {
 49		.start		= PNX8550_UART_INT(0),
 50		.end		= PNX8550_UART_INT(0),
 51		.flags		= IORESOURCE_IRQ,
 52	},
 53	[2] = {
 54		.start		= PNX8550_UART_PORT1,
 55		.end		= PNX8550_UART_PORT1 + 0xfff,
 56		.flags		= IORESOURCE_MEM,
 57	},
 58	[3] = {
 59		.start		= PNX8550_UART_INT(1),
 60		.end		= PNX8550_UART_INT(1),
 61		.flags		= IORESOURCE_IRQ,
 62	},
 63};
 64
 65struct pnx8xxx_port pnx8xxx_ports[] = {
 66	[0] = {
 67		.port   = {
 68			.type		= PORT_PNX8XXX,
 69			.iotype		= UPIO_MEM,
 70			.membase	= (void __iomem *)PNX8550_UART_PORT0,
 71			.mapbase	= PNX8550_UART_PORT0,
 72			.irq		= PNX8550_UART_INT(0),
 73			.uartclk	= 3692300,
 74			.fifosize	= 16,
 75			.flags		= UPF_BOOT_AUTOCONF,
 76			.line		= 0,
 77		},
 78	},
 79	[1] = {
 80		.port   = {
 81			.type		= PORT_PNX8XXX,
 82			.iotype		= UPIO_MEM,
 83			.membase	= (void __iomem *)PNX8550_UART_PORT1,
 84			.mapbase	= PNX8550_UART_PORT1,
 85			.irq		= PNX8550_UART_INT(1),
 86			.uartclk	= 3692300,
 87			.fifosize	= 16,
 88			.flags		= UPF_BOOT_AUTOCONF,
 89			.line		= 1,
 90		},
 91	},
 92};
 93
 94/* The dmamask must be set for OHCI to work */
 95static u64 ohci_dmamask = DMA_BIT_MASK(32);
 96
 97static u64 uart_dmamask = DMA_BIT_MASK(32);
 98
 99static struct platform_device pnx8550_usb_ohci_device = {
100	.name		= "pnx8550-ohci",
101	.id		= -1,
102	.dev = {
103		.dma_mask		= &ohci_dmamask,
104		.coherent_dma_mask	= DMA_BIT_MASK(32),
105	},
106	.num_resources	= ARRAY_SIZE(pnx8550_usb_ohci_resources),
107	.resource	= pnx8550_usb_ohci_resources,
108};
109
110static struct platform_device pnx8550_uart_device = {
111	.name		= "pnx8xxx-uart",
112	.id		= -1,
113	.dev = {
114		.dma_mask		= &uart_dmamask,
115		.coherent_dma_mask	= DMA_BIT_MASK(32),
116		.platform_data = pnx8xxx_ports,
117	},
118	.num_resources	= ARRAY_SIZE(pnx8550_uart_resources),
119	.resource	= pnx8550_uart_resources,
120};
121
122static struct platform_device *pnx8550_platform_devices[] __initdata = {
123	&pnx8550_usb_ohci_device,
124	&pnx8550_uart_device,
125};
126
127static int __init pnx8550_platform_init(void)
128{
129	return platform_add_devices(pnx8550_platform_devices,
130			            ARRAY_SIZE(pnx8550_platform_devices));
131}
132
133arch_initcall(pnx8550_platform_init);