]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/arm/mach-realview/realview_eb.c
Merge branch 'next-s3c64xx-regs' of git://aeryn.fluff.org.uk/bjdooks/linux into devel
[linux-2.6-omap-h63xx.git] / arch / arm / mach-realview / realview_eb.c
index 3420e2e719e6ae7630eb8bca18fd7133c4ca2d6f..c20fbef122b38af693f2f56e9f82aadba87de8b7 100644 (file)
@@ -108,7 +108,7 @@ static struct map_desc realview_eb11mp_io_desc[] __initdata = {
 static void __init realview_eb_map_io(void)
 {
        iotable_init(realview_eb_io_desc, ARRAY_SIZE(realview_eb_io_desc));
-       if (core_tile_eb11mp())
+       if (core_tile_eb11mp() || core_tile_a9mp())
                iotable_init(realview_eb11mp_io_desc, ARRAY_SIZE(realview_eb11mp_io_desc));
 }
 
@@ -242,12 +242,6 @@ static struct resource realview_eb_eth_resources[] = {
        },
 };
 
-static struct platform_device realview_eb_eth_device = {
-       .id             = 0,
-       .num_resources  = ARRAY_SIZE(realview_eb_eth_resources),
-       .resource       = realview_eb_eth_resources,
-};
-
 /*
  * Detect and register the correct Ethernet device. RealView/EB rev D
  * platforms use the newer SMSC LAN9118 Ethernet chip
@@ -255,26 +249,37 @@ static struct platform_device realview_eb_eth_device = {
 static int eth_device_register(void)
 {
        void __iomem *eth_addr = ioremap(REALVIEW_EB_ETH_BASE, SZ_4K);
+       const char *name = NULL;
        u32 idrev;
 
        if (!eth_addr)
                return -ENOMEM;
 
        idrev = readl(eth_addr + 0x50);
-       if ((idrev & 0xFFFF0000) == 0x01180000)
-               /* SMSC LAN9118 chip present */
-               realview_eb_eth_device.name = "smc911x";
-       else
-               /* SMSC 91C111 chip present */
-               realview_eb_eth_device.name = "smc91x";
+       if ((idrev & 0xFFFF0000) != 0x01180000)
+               /* SMSC LAN9118 not present, use LAN91C111 instead */
+               name = "smc91x";
 
        iounmap(eth_addr);
-       return platform_device_register(&realview_eb_eth_device);
+       return realview_eth_register(name, realview_eb_eth_resources);
 }
 
+static struct resource realview_eb_isp1761_resources[] = {
+       [0] = {
+               .start          = REALVIEW_EB_USB_BASE,
+               .end            = REALVIEW_EB_USB_BASE + SZ_128K - 1,
+               .flags          = IORESOURCE_MEM,
+       },
+       [1] = {
+               .start          = IRQ_EB_USB,
+               .end            = IRQ_EB_USB,
+               .flags          = IORESOURCE_IRQ,
+       },
+};
+
 static void __init gic_init_irq(void)
 {
-       if (core_tile_eb11mp()) {
+       if (core_tile_eb11mp() || core_tile_a9mp()) {
                unsigned int pldctrl;
 
                /* new irq mode */
@@ -331,6 +336,8 @@ static void realview_eb11mp_fixup(void)
        /* platform devices */
        realview_eb_eth_resources[1].start      = IRQ_EB11MP_ETH;
        realview_eb_eth_resources[1].end        = IRQ_EB11MP_ETH;
+       realview_eb_isp1761_resources[1].start  = IRQ_EB11MP_USB;
+       realview_eb_isp1761_resources[1].end    = IRQ_EB11MP_USB;
 }
 
 static void __init realview_eb_timer_init(void)
@@ -342,10 +349,9 @@ static void __init realview_eb_timer_init(void)
        timer2_va_base = __io_address(REALVIEW_EB_TIMER2_3_BASE);
        timer3_va_base = __io_address(REALVIEW_EB_TIMER2_3_BASE) + 0x20;
 
-       if (core_tile_eb11mp()) {
+       if (core_tile_eb11mp() || core_tile_a9mp()) {
 #ifdef CONFIG_LOCAL_TIMERS
-               twd_base_addr = __io_address(REALVIEW_EB11MP_TWD_BASE);
-               twd_size = REALVIEW_EB11MP_TWD_SIZE;
+               twd_base = __io_address(REALVIEW_EB11MP_TWD_BASE);
 #endif
                timer_irq = IRQ_EB11MP_TIMER0_1;
        } else
@@ -362,7 +368,7 @@ static void __init realview_eb_init(void)
 {
        int i;
 
-       if (core_tile_eb11mp()) {
+       if (core_tile_eb11mp() || core_tile_a9mp()) {
                realview_eb11mp_fixup();
 
 #ifdef CONFIG_CACHE_L2X0
@@ -375,6 +381,7 @@ static void __init realview_eb_init(void)
        realview_flash_register(&realview_eb_flash_resource, 1);
        platform_device_register(&realview_i2c_device);
        eth_device_register();
+       realview_usb_register(realview_eb_isp1761_resources);
 
        for (i = 0; i < ARRAY_SIZE(amba_devs); i++) {
                struct amba_device *d = amba_devs[i];
@@ -390,7 +397,7 @@ MACHINE_START(REALVIEW_EB, "ARM-RealView EB")
        /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */
        .phys_io        = REALVIEW_EB_UART0_BASE,
        .io_pg_offst    = (IO_ADDRESS(REALVIEW_EB_UART0_BASE) >> 18) & 0xfffc,
-       .boot_params    = 0x00000100,
+       .boot_params    = PHYS_OFFSET + 0x00000100,
        .map_io         = realview_eb_map_io,
        .init_irq       = gic_init_irq,
        .timer          = &realview_eb_timer,