From: lyx Date: Tue, 27 Jul 2010 03:15:17 +0000 (-0700) Subject: modify dm9000 for raho board X-Git-Tag: firefly_0821_release~11336 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=1670350b8c1b5631d7372b5d9d247317e03847d4;p=firefly-linux-kernel-4.4.55.git modify dm9000 for raho board --- 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 */