From 1670350b8c1b5631d7372b5d9d247317e03847d4 Mon Sep 17 00:00:00 2001 From: lyx Date: Mon, 26 Jul 2010 20:15:17 -0700 Subject: [PATCH] modify dm9000 for raho board --- arch/arm/mach-rk2818/devices.c | 8 ++++++++ drivers/net/dm9000.c | 28 +++++++++++++++++++++------- 2 files changed, 29 insertions(+), 7 deletions(-) mode change 100644 => 100755 arch/arm/mach-rk2818/devices.c mode change 100644 => 100755 drivers/net/dm9000.c diff --git a/arch/arm/mach-rk2818/devices.c b/arch/arm/mach-rk2818/devices.c old mode 100644 new mode 100755 index 001c368280c2..ccc428fbc703 --- a/arch/arm/mach-rk2818/devices.c +++ b/arch/arm/mach-rk2818/devices.c @@ -286,11 +286,19 @@ static struct resource dm9k_resource[] = { .end = RK2818_NANDC_PHYS + 0x800 + (1*0x100 + 0x4) + 3, .flags = IORESOURCE_MEM, }, + #ifdef CONFIG_MACH_RK2818MID [2] = { .start = RK2818_PIN_PE2, //use pe2 as interrupt .end = RK2818_PIN_PE2, .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL, } + #else + [2] = { + .start = RK2818_PIN_PA1, //use pa1 as interrupt + .end = RK2818_PIN_PA1, + .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL, + } + #endif }; diff --git a/drivers/net/dm9000.c b/drivers/net/dm9000.c old mode 100644 new mode 100755 index 909822a6fd39..5044b51fac67 --- a/drivers/net/dm9000.c +++ b/drivers/net/dm9000.c @@ -961,9 +961,13 @@ dm9000_rx(struct net_device *dev) udelay(1);//add by lyx@20100713,or dm9000_rx will be error in high frequence - /* Get most updated data */ + #if 1 + /* Get most updated data */ + rxbyte = ior(db, DM9000_MRCMDX); /* Dummy read */ + #else rxbyte = readb(db->io_data); - + #endif + /* Status check: this byte must be 0 or 1 */ if (rxbyte & DM9000_PKT_ERR) { dev_warn(db->dev, "status check fail: %d\n", rxbyte); @@ -976,9 +980,11 @@ dm9000_rx(struct net_device *dev) return; } - if (!(rxbyte & DM9000_PKT_RDY)) + if (!(rxbyte & DM9000_PKT_RDY)) { + //printk("packet not ready to receive\n"); return; - + } + /* A packet ready now & Get status/length */ GoodPacket = true; writeb(DM9000_MRCMD, db->io_addr); @@ -1504,11 +1510,19 @@ dm9000_probe(struct platform_device *pdev) /* fill in parameters for net-dev structure */ ndev->base_addr = (unsigned long)db->io_addr; - #if 0 - ndev->irq = db->irq_res->start; - #else//modify by liuyx@20100510 + #ifdef CONFIG_MACH_RK2818MID rk2818_mux_api_set(GPIOE_SPI1_FLASH_SEL1_NAME, IOMUXA_GPIO1_A12); ndev->irq = gpio_to_irq(db->irq_res->start); + #else + rk2818_mux_api_set(GPIOA1_HOSTDATA17_SEL_NAME, IOMUXB_GPIO0_A1); + if (gpio_request(db->irq_res->start, "dm9000 interrupt")) { + gpio_free(db->irq_res->start); + dev_err(db->dev, "failed to request gpio\n"); + ret = -EINVAL; + goto out; + } + gpio_pull_updown(db->irq_res->start, GPIOPullDown); + ndev->irq = gpio_to_irq(db->irq_res->start); #endif /* ensure at least we have a default set of IO routines */ -- 2.34.1