ramips: use resource to pass irq and base address to the ethernet driver

SVN-Revision: 18166
lede-17.01
Gabor Juhos 2009-10-26 17:17:18 +00:00
parent 7c7f004875
commit 69a3298ab5
3 changed files with 30 additions and 8 deletions

View File

@ -189,10 +189,8 @@ struct ramips_tx_dma {
struct ramips_eth_platform_data struct ramips_eth_platform_data
{ {
unsigned char mac[6]; unsigned char mac[6];
unsigned int base_addr;
void (*reset_fe)(void); void (*reset_fe)(void);
int min_pkt_len; int min_pkt_len;
int irq;
}; };
struct raeth_priv struct raeth_priv

View File

@ -103,18 +103,30 @@ static void rt305x_fe_reset(void)
rt305x_sysc_wr(0, RAMIPS_FE_RESET); 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 = { static struct ramips_eth_platform_data ramips_eth_data = {
.mac = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55 }, .mac = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55 },
.base_addr = RT305X_FE_BASE,
.irq = RT305X_CPU_IRQ_FE,
.reset_fe = rt305x_fe_reset, .reset_fe = rt305x_fe_reset,
.min_pkt_len = 64 .min_pkt_len = 64
}; };
static struct platform_device rt305x_eth_device = { 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 = { .dev = {
.platform_data = (void *) &ramips_eth_data, .platform_data = &ramips_eth_data,
} }
}; };

View File

@ -338,6 +338,7 @@ ramips_eth_plat_probe(struct platform_device *plat)
{ {
struct raeth_priv *priv; struct raeth_priv *priv;
struct ramips_eth_platform_data *data = plat->dev.platform_data; struct ramips_eth_platform_data *data = plat->dev.platform_data;
struct resource *res;
int err; int err;
if (!data) { if (!data) {
@ -345,7 +346,13 @@ ramips_eth_plat_probe(struct platform_device *plat)
return -EINVAL; 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) if(!ramips_fe_base)
return -ENOMEM; return -ENOMEM;
@ -357,7 +364,12 @@ ramips_eth_plat_probe(struct platform_device *plat)
} }
strcpy(ramips_dev->name, "eth%d"); 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->addr_len = ETH_ALEN;
ramips_dev->base_addr = (unsigned long)ramips_fe_base; ramips_dev->base_addr = (unsigned long)ramips_fe_base;
ramips_dev->init = ramips_eth_probe; ramips_dev->init = ramips_eth_probe;