diff options
| author | Linus Torvalds <[email protected]> | 2009-03-28 14:03:14 -0700 | 
|---|---|---|
| committer | Linus Torvalds <[email protected]> | 2009-03-28 14:03:14 -0700 | 
| commit | 0fe41b8982001cd14ee2c77cd776735a5024e98b (patch) | |
| tree | 83e65d595c413d55259ea14fb97748ce5efe5707 /arch/arm/mach-gemini/devices.c | |
| parent | eedf2c5296a8dfaaf9aec1a938c1d3bd73159a30 (diff) | |
| parent | 9759d22c8348343b0da4e25d6150c41712686c14 (diff) | |
Merge branch 'devel' of master.kernel.org:/home/rmk/linux-2.6-arm
* 'devel' of master.kernel.org:/home/rmk/linux-2.6-arm: (422 commits)
  [ARM] 5435/1: fix compile warning in sanity_check_meminfo()
  [ARM] 5434/1: ARM: OMAP: Fix mailbox compile for 24xx
  [ARM] pxa: fix the bad assumption that PCMCIA sockets always start with 0
  [ARM] pxa: fix Colibri PXA300 and PXA320 LCD backlight pins
  imxfb: Fix TFT mode
  i.MX21/27: remove ifdef CONFIG_FB_IMX
  imxfb: add clock support
  mxc: add arch_reset() function
  clkdev: add possibility to get a clock based on the device name
  i.MX1: remove fb support from mach-imx
  [ARM] pxa: build arch/arm/plat-pxa/mfp.c only when PXA3xx or ARCH_MMP defined
  Gemini: Add support for Teltonika RUT100
  Gemini: gpiolib based GPIO support v2
  MAINTAINERS: add myself as Gemini architecture maintainer
  ARM: Add Gemini architecture v3
  [ARM] OMAP: Fix compile for omap2_init_common_hw()
  MAINTAINERS: Add myself as Faraday ARM core variant maintainer
  ARM: Add support for FA526 v2
  [ARM] acorn,ebsa110,footbridge,integrator,sa1100: Convert asm/io.h to linux/io.h
  [ARM] collie: fix two minor formatting nits
  ...
Diffstat (limited to 'arch/arm/mach-gemini/devices.c')
| -rw-r--r-- | arch/arm/mach-gemini/devices.c | 92 | 
1 files changed, 92 insertions, 0 deletions
| diff --git a/arch/arm/mach-gemini/devices.c b/arch/arm/mach-gemini/devices.c new file mode 100644 index 000000000000..6b525253d027 --- /dev/null +++ b/arch/arm/mach-gemini/devices.c @@ -0,0 +1,92 @@ +/* + * Common devices definition for Gemini + * + * Copyright (C) 2008-2009 Paulius Zaleckas <[email protected]> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +#include <linux/kernel.h> +#include <linux/init.h> +#include <linux/io.h> +#include <linux/platform_device.h> +#include <linux/serial_8250.h> +#include <linux/mtd/physmap.h> + +#include <mach/irqs.h> +#include <mach/hardware.h> +#include <mach/global_reg.h> + +static struct plat_serial8250_port serial_platform_data[] = { +	{ +		.membase	= (void *)IO_ADDRESS(GEMINI_UART_BASE), +		.mapbase	= GEMINI_UART_BASE, +		.irq		= IRQ_UART, +		.uartclk	= UART_CLK, +		.regshift	= 2, +		.iotype		= UPIO_MEM, +		.type		= PORT_16550A, +		.flags		= UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_FIXED_TYPE, +	}, +	{}, +}; + +static struct platform_device serial_device = { +	.name	= "serial8250", +	.id	= PLAT8250_DEV_PLATFORM, +	.dev	= { +		.platform_data = serial_platform_data, +	}, +}; + +int platform_register_uart(void) +{ +	return platform_device_register(&serial_device); +} + +static struct resource flash_resource = { +	.start	= GEMINI_FLASH_BASE, +	.flags	= IORESOURCE_MEM, +}; + +static struct physmap_flash_data pflash_platform_data = {}; + +static struct platform_device pflash_device = { +	.name	= "physmap-flash", +	.id	= 0, +	.dev 	= { +		.platform_data = &pflash_platform_data, +	}, +	.resource = &flash_resource, +	.num_resources = 1, +}; + +int platform_register_pflash(unsigned int size, struct mtd_partition *parts, +			     unsigned int nr_parts) +{ +	unsigned int reg; + +	reg = __raw_readl(IO_ADDRESS(GEMINI_GLOBAL_BASE) + GLOBAL_STATUS); + +	if ((reg & FLASH_TYPE_MASK) != FLASH_TYPE_PARALLEL) +		return -ENXIO; + +	if (reg & FLASH_WIDTH_16BIT) +		pflash_platform_data.width = 2; +	else +		pflash_platform_data.width = 1; + +	/* enable parallel flash pins and disable others */ +	reg = __raw_readl(IO_ADDRESS(GEMINI_GLOBAL_BASE) + GLOBAL_MISC_CTRL); +	reg &= ~PFLASH_PADS_DISABLE; +	reg |= SFLASH_PADS_DISABLE | NAND_PADS_DISABLE; +	__raw_writel(reg, IO_ADDRESS(GEMINI_GLOBAL_BASE) + GLOBAL_MISC_CTRL); + +	flash_resource.end = flash_resource.start + size - 1; + +	pflash_platform_data.parts = parts; +	pflash_platform_data.nr_parts = nr_parts; + +	return platform_device_register(&pflash_device); +} |