Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 08c3f57c authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Jeff Garzik
Browse files

DM9000: Remove the 2 resources probe scheme.



The dm9000 driver accepts either 2 or 3 resources to describe the platform
devices. The 2 resources case abuses the ioresource mechanism by passing
ioremap()ed memory through the platform device resources. This patch removes
that case and converts boards that were using it to the 3 resources scheme.

Signed-off-by: default avatarBen Dooks <ben-linux@fluff.org>
Signed-off-by: default avatarLaurent Pinchart <laurentp@cse-semaphore.com>
Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
parent e35c3269
Loading
Loading
Loading
Loading
+44 −62
Original line number Diff line number Diff line
@@ -528,7 +528,6 @@ dm9000_probe(struct platform_device *pdev)
	struct board_info *db;	/* Point a board information structure */
	struct net_device *ndev;
	const unsigned char *mac_src;
	unsigned long base;
	int ret = 0;
	int iosize;
	int i;
@@ -558,26 +557,11 @@ dm9000_probe(struct platform_device *pdev)
	INIT_DELAYED_WORK(&db->phy_poll, dm9000_poll_work);


	if (pdev->num_resources < 2) {
	if (pdev->num_resources < 3) {
		ret = -ENODEV;
		goto out;
	} else if (pdev->num_resources == 2) {
		base = pdev->resource[0].start;

		if (!request_mem_region(base, 4, ndev->name)) {
			ret = -EBUSY;
			goto out;
	}

		ndev->base_addr = base;
		ndev->irq = pdev->resource[1].start;
		db->io_addr = (void __iomem *)base;
		db->io_data = (void __iomem *)(base + 4);

		/* ensure at least we have a default set of IO routines */
		dm9000_set_io(db, 2);

	} else {
	db->addr_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	db->data_res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
	db->irq_res  = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
@@ -589,8 +573,8 @@ dm9000_probe(struct platform_device *pdev)
		goto out;
	}

		i = res_size(db->addr_res);
		db->addr_req = request_mem_region(db->addr_res->start, i,
	iosize = res_size(db->addr_res);
	db->addr_req = request_mem_region(db->addr_res->start, iosize,
					  pdev->name);

	if (db->addr_req == NULL) {
@@ -599,7 +583,7 @@ dm9000_probe(struct platform_device *pdev)
		goto out;
	}

		db->io_addr = ioremap(db->addr_res->start, i);
	db->io_addr = ioremap(db->addr_res->start, iosize);

	if (db->io_addr == NULL) {
		dev_err(db->dev, "failed to ioremap address reg\n");
@@ -626,13 +610,11 @@ dm9000_probe(struct platform_device *pdev)
	}

	/* fill in parameters for net-dev structure */

	ndev->base_addr = (unsigned long)db->io_addr;
	ndev->irq	= db->irq_res->start;

	/* ensure at least we have a default set of IO routines */
	dm9000_set_io(db, iosize);
	}

	/* check to see if anything is being over-ridden */
	if (pdata != NULL) {