diff options
Diffstat (limited to 'target')
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 e5f55d32b..c228f6f34 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 6155b9fb6..4956277d8 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 ae47230b7..4975adc77 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;  | 
