diff options
3 files changed, 30 insertions, 8 deletions
diff --git a/target/linux/ramips/files/arch/mips/include/asm/mach-ralink/eth.h b/target/linux/ramips/files/arch/mips/include/asm/mach-ralink/eth.h index e5f55d32b5..c228f6f34f 100644 --- a/target/linux/ramips/files/arch/mips/include/asm/mach-ralink/eth.h +++ b/target/linux/ramips/files/arch/mips/include/asm/mach-ralink/eth.h @@ -189,10 +189,8 @@ struct ramips_tx_dma { struct ramips_eth_platform_data { unsigned char mac[6]; - unsigned int base_addr; void (*reset_fe)(void); int min_pkt_len; - int irq; }; struct raeth_priv diff --git a/target/linux/ramips/files/arch/mips/ralink/rt305x/devices.c b/target/linux/ramips/files/arch/mips/ralink/rt305x/devices.c index 6155b9fb60..4956277d86 100644 --- a/target/linux/ramips/files/arch/mips/ralink/rt305x/devices.c +++ b/target/linux/ramips/files/arch/mips/ralink/rt305x/devices.c @@ -103,18 +103,30 @@ static void rt305x_fe_reset(void) rt305x_sysc_wr(0, RAMIPS_FE_RESET); } +static struct resource rt305x_eth_resources[] = { + { + .start = RT305X_FE_BASE, + .end = RT305X_FE_BASE + PAGE_SIZE - 1, + .flags = IORESOURCE_MEM, + }, { + .start = RT305X_CPU_IRQ_FE, + .end = RT305X_CPU_IRQ_FE, + .flags = IORESOURCE_IRQ, + }, +}; + static struct ramips_eth_platform_data ramips_eth_data = { .mac = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55 }, - .base_addr = RT305X_FE_BASE, - .irq = RT305X_CPU_IRQ_FE, .reset_fe = rt305x_fe_reset, .min_pkt_len = 64 }; static struct platform_device rt305x_eth_device = { - .name = "ramips_eth", + .name = "ramips_eth", + .resource = rt305x_eth_resources, + .num_resources = ARRAY_SIZE(rt305x_eth_resources), .dev = { - .platform_data = (void *) &ramips_eth_data, + .platform_data = &ramips_eth_data, } }; diff --git a/target/linux/ramips/files/drivers/net/ramips.c b/target/linux/ramips/files/drivers/net/ramips.c index ae47230b7c..4975adc77b 100644 --- a/target/linux/ramips/files/drivers/net/ramips.c +++ b/target/linux/ramips/files/drivers/net/ramips.c @@ -338,6 +338,7 @@ ramips_eth_plat_probe(struct platform_device *plat) { struct raeth_priv *priv; struct ramips_eth_platform_data *data = plat->dev.platform_data; + struct resource *res; int err; if (!data) { @@ -345,7 +346,13 @@ ramips_eth_plat_probe(struct platform_device *plat) return -EINVAL; } - ramips_fe_base = ioremap_nocache(data->base_addr, PAGE_SIZE); + res = platform_get_resource(plat, IORESOURCE_MEM, 0); + if (!res) { + dev_err(&plat->dev, "no memory resource found\n"); + return -ENXIO; + } + + ramips_fe_base = ioremap_nocache(res->start, res->end - res->start + 1); if(!ramips_fe_base) return -ENOMEM; @@ -357,7 +364,12 @@ ramips_eth_plat_probe(struct platform_device *plat) } strcpy(ramips_dev->name, "eth%d"); - ramips_dev->irq = data->irq; + ramips_dev->irq = platform_get_irq(plat, 0); + if (ramips_dev->irq < 0) { + dev_err(&plat->dev, "no IRQ resource found\n"); + err = -ENXIO; + goto err_free_dev; + } ramips_dev->addr_len = ETH_ALEN; ramips_dev->base_addr = (unsigned long)ramips_fe_base; ramips_dev->init = ramips_eth_probe; |