{
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;
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