ramips: use resource to pass irq and base address to the ethernet driver
authorGabor Juhos <juhosg@openwrt.org>
Mon, 26 Oct 2009 17:17:18 +0000 (17:17 +0000)
committerGabor Juhos <juhosg@openwrt.org>
Mon, 26 Oct 2009 17:17:18 +0000 (17:17 +0000)
SVN-Revision: 18166

target/linux/ramips/files/arch/mips/include/asm/mach-ralink/eth.h
target/linux/ramips/files/arch/mips/ralink/rt305x/devices.c
target/linux/ramips/files/drivers/net/ramips.c

index e5f55d32b53fee3d72e6cc57c2be77a5edfdd626..c228f6f34f3b890b70747f1041f618352ad10533 100644 (file)
@@ -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
index 6155b9fb604dc70a0b9959ce053a62241b31c850..4956277d864f4d85cfffff127021621384b912c2 100644 (file)
@@ -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,
        }
 };
 
index ae47230b7cb687411ff66ff6415150112a97f97a..4975adc77bd9c44c9ed1612b666184258064ee61 100644 (file)
@@ -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;