/*
 * arch/arm/mach-ep93xx/edb9307a.c
 * Cirrus Logic EDB9307A support.
 *
 * Copyright (C) 2008 H Hartley Sweeten <hsweeten@visionengravers.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or (at
 * your option) any later version.
 */

#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/mm.h>
#include <linux/sched.h>
#include <linux/interrupt.h>
#include <linux/ioport.h>
#include <linux/mtd/physmap.h>
#include <linux/platform_device.h>
#include <linux/io.h>
#include <linux/i2c.h>
#include <mach/hardware.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>

static struct physmap_flash_data edb9307a_flash_data = {
	.width		= 2,
};

static struct resource edb9307a_flash_resource = {
	.start		= EP93XX_CS6_PHYS_BASE,
	.end		= EP93XX_CS6_PHYS_BASE + SZ_16M - 1,
	.flags		= IORESOURCE_MEM,
};

static struct platform_device edb9307a_flash = {
	.name		= "physmap-flash",
	.id		= 0,
	.dev		= {
		.platform_data	= &edb9307a_flash_data,
	},
	.num_resources	= 1,
	.resource	= &edb9307a_flash_resource,
};

static struct ep93xx_eth_data edb9307a_eth_data = {
	.phy_id		= 1,
};

static struct i2c_board_info __initdata edb9307a_i2c_data[] = {
	{
		/* On-board battery backed RTC */
		I2C_BOARD_INFO("isl1208", 0x6f),
	},
	/*
	 * The I2C signals are also routed to the Expansion Connector (J4)
	 */
};

static void __init edb9307a_init_machine(void)
{
	ep93xx_init_devices();
	platform_device_register(&edb9307a_flash);

	ep93xx_register_eth(&edb9307a_eth_data, 1);

	ep93xx_init_i2c(edb9307a_i2c_data, ARRAY_SIZE(edb9307a_i2c_data));
}

MACHINE_START(EDB9307A, "Cirrus Logic EDB9307A Evaluation Board")
	/* Maintainer: H Hartley Sweeten <hsweeten@visionengravers.com> */
	.phys_io	= EP93XX_APB_PHYS_BASE,
	.io_pg_offst	= ((EP93XX_APB_VIRT_BASE) >> 18) & 0xfffc,
	.boot_params	= EP93XX_SDCE0_PHYS_BASE + 0x100,
	.map_io		= ep93xx_map_io,
	.init_irq	= ep93xx_init_irq,
	.timer		= &ep93xx_timer,
	.init_machine	= edb9307a_init_machine,
MACHINE_END
