Beispiel #1
0
static int __init
ramips_eth_init(void)
{
	int ret;

	ret = raeth_debugfs_root_init();
	if (ret)
		goto err_out;

	ret = rt305x_esw_init();
	if (ret)
		goto err_debugfs_exit;

	ret = platform_driver_register(&ramips_eth_driver);
	if (ret) {
		printk(KERN_ERR
		       "ramips_eth: Error registering platfom driver!\n");
		goto esw_cleanup;
	}

	return 0;

esw_cleanup:
	rt305x_esw_exit();
err_debugfs_exit:
	raeth_debugfs_root_exit();
err_out:
	return ret;
}
Beispiel #2
0
static int
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) {
		dev_err(&plat->dev, "no platform data specified\n");
		return -EINVAL;
	}

	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;

	ramips_dev = alloc_etherdev(sizeof(struct raeth_priv));
	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 = 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;
	priv = (struct raeth_priv*)netdev_priv(ramips_dev);
	priv->plat = data;

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