diff options
author | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2009-10-26 17:17:13 +0000 |
---|---|---|
committer | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2009-10-26 17:17:13 +0000 |
commit | 90e4aa23860529f06083d0013f662f27ae006660 (patch) | |
tree | e6b77f4486a0c7d6ece4c916dc3ebda48a634feb /target/linux/ramips | |
parent | c3dbd7adde675330bf03350848cccf6c4ab4e34e (diff) |
ramips: add error-path handling to the ramips_eth_plat_probe
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@18165 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/ramips')
-rw-r--r-- | target/linux/ramips/files/drivers/net/ramips.c | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/target/linux/ramips/files/drivers/net/ramips.c b/target/linux/ramips/files/drivers/net/ramips.c index d3337da20..ae47230b7 100644 --- a/target/linux/ramips/files/drivers/net/ramips.c +++ b/target/linux/ramips/files/drivers/net/ramips.c @@ -338,12 +338,24 @@ ramips_eth_plat_probe(struct platform_device *plat) { struct raeth_priv *priv; struct ramips_eth_platform_data *data = plat->dev.platform_data; + int err; + + if (!data) { + dev_err(&plat->dev, "no platform data specified\n"); + return -EINVAL; + } + ramips_fe_base = ioremap_nocache(data->base_addr, PAGE_SIZE); if(!ramips_fe_base) return -ENOMEM; + ramips_dev = alloc_etherdev(sizeof(struct raeth_priv)); - if(!ramips_dev) - return -ENOMEM; + if(!ramips_dev) { + dev_err(&plat->dev, "alloc_etherdev failed\n"); + err = -ENOMEM; + goto err_unmap; + } + strcpy(ramips_dev->name, "eth%d"); ramips_dev->irq = data->irq; ramips_dev->addr_len = ETH_ALEN; @@ -351,16 +363,24 @@ ramips_eth_plat_probe(struct platform_device *plat) ramips_dev->init = ramips_eth_probe; priv = (struct raeth_priv*)netdev_priv(ramips_dev); priv->plat = data; - if(register_netdev(ramips_dev)) - { - printk(KERN_ERR "ramips_eth: error bringing up device\n"); - return -ENXIO; + + err = register_netdev(ramips_dev); + if (err) { + dev_err(&plat->dev, "error bringing up device\n"); + goto err_free_dev; } + #ifdef CONFIG_RALINK_RT305X rt305x_esw_init(); #endif printk(KERN_DEBUG "ramips_eth: loaded\n"); return 0; + + err_free_dev: + kfree(ramips_dev); + err_unmap: + iounmap(ramips_fe_base); + return err; } static int |