Blackfin arch: Port the dm9000 driver to Blackfin by using the correct low-level...
authorAlex Landau <landau.alex@gmail.com>
Thu, 12 Jul 2007 04:11:48 +0000 (12:11 +0800)
committerBryan Wu <bryan.wu@analog.com>
Thu, 12 Jul 2007 04:11:48 +0000 (12:11 +0800)
Signed-off-by: Alex Landau <landau.alex@gmail.com>
Signed-off-by: Bryan Wu <bryan.wu@analog.com>
arch/blackfin/mach-bf537/boards/stamp.c
drivers/net/Kconfig
drivers/net/dm9000.c

index c637353..9c43d77 100644 (file)
@@ -157,6 +157,28 @@ static struct platform_device smc91x_device = {
 };
 #endif
 
+#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
+static struct resource dm9000_resources[] = {
+       [0] = {
+               .start  = 0x203FB800,
+               .end    = 0x203FB800 + 8,
+               .flags  = IORESOURCE_MEM,
+       },
+       [1] = {
+               .start  = IRQ_PF9,
+               .end    = IRQ_PF9,
+               .flags  = (IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE),
+       },
+};
+
+static struct platform_device dm9000_device = {
+       .name           = "dm9000",
+       .id             = -1,
+       .num_resources  = ARRAY_SIZE(dm9000_resources),
+       .resource       = dm9000_resources,
+};
+#endif
+
 #if defined(CONFIG_USB_SL811_HCD) || defined(CONFIG_USB_SL811_HCD_MODULE)
 static struct resource sl811_hcd_resources[] = {
        {
@@ -568,6 +590,10 @@ static struct platform_device *stamp_devices[] __initdata = {
        &smc91x_device,
 #endif
 
+#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
+       &dm9000_device,
+#endif
+
 #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
        &bfin_mac_device,
 #endif
index b941c74..80572e2 100644 (file)
@@ -877,7 +877,7 @@ config NET_NETX
 
 config DM9000
        tristate "DM9000 support"
-       depends on ARM || MIPS
+       depends on ARM || BLACKFIN || MIPS
        select CRC32
        select MII
        ---help---
index 264fa0e..c3de81b 100644 (file)
 #define PRINTK(args...)   printk(KERN_DEBUG args)
 #endif
 
+#ifdef CONFIG_BLACKFIN
+#define readsb insb
+#define readsw insw
+#define readsl insl
+#define writesb        outsb
+#define writesw        outsw
+#define writesl        outsl
+#define DM9000_IRQ_FLAGS       (IRQF_SHARED | IRQF_TRIGGER_HIGH)
+#else
+#define DM9000_IRQ_FLAGS       IRQF_SHARED
+#endif
+
 /*
  * Transmit timeout, default 5 seconds.
  */
@@ -431,6 +443,9 @@ dm9000_probe(struct platform_device *pdev)
                db->io_addr = (void __iomem *)base;
                db->io_data = (void __iomem *)(base + 4);
 
+               /* ensure at least we have a default set of IO routines */
+               dm9000_set_io(db, 2);
+
        } else {
                db->addr_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
                db->data_res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
@@ -614,7 +629,7 @@ dm9000_open(struct net_device *dev)
 
        PRINTK2("entering dm9000_open\n");
 
-       if (request_irq(dev->irq, &dm9000_interrupt, IRQF_SHARED, dev->name, dev))
+       if (request_irq(dev->irq, &dm9000_interrupt, DM9000_IRQ_FLAGS, dev->name, dev))
                return -EAGAIN;
 
        /* Initialize DM9000 board */