aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGabor Juhos <juhosg@openwrt.org>2009-10-26 17:17:13 +0000
committerGabor Juhos <juhosg@openwrt.org>2009-10-26 17:17:13 +0000
commit335e77a81c293ea2372d5aff39aa167b9dc99a87 (patch)
treee6b77f4486a0c7d6ece4c916dc3ebda48a634feb
parent93f9088dab54ce899b4ce5f25cb712b3d5201896 (diff)
downloadupstream-335e77a81c293ea2372d5aff39aa167b9dc99a87.tar.gz
upstream-335e77a81c293ea2372d5aff39aa167b9dc99a87.tar.bz2
upstream-335e77a81c293ea2372d5aff39aa167b9dc99a87.zip
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
-rw-r--r--target/linux/ramips/files/drivers/net/ramips.c32
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 d3337da200..ae47230b7c 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