Skip to content

Commit

Permalink
net: rework fsl_pq_mdio driver to use of_mdio infrastructure
Browse files Browse the repository at this point in the history
This patch simplifies the driver by making use of more common code.

Tested on Freescale MPC8349emitxgp eval board

Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Acked-by: Andy Fleming <afleming@freescale.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Grant Likely authored and David S. Miller committed Apr 27, 2009
1 parent ca816d9 commit 324931b
Showing 1 changed file with 3 additions and 48 deletions.
51 changes: 3 additions & 48 deletions drivers/net/fsl_pq_mdio.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
#include <linux/mii.h>
#include <linux/phy.h>
#include <linux/of.h>
#include <linux/of_mdio.h>
#include <linux/of_platform.h>

#include <asm/io.h>
Expand Down Expand Up @@ -154,44 +155,6 @@ static int fsl_pq_mdio_reset(struct mii_bus *bus)
return 0;
}

/* Allocate an array which provides irq #s for each PHY on the given bus */
static int *create_irq_map(struct device_node *np)
{
int *irqs;
int i;
struct device_node *child = NULL;

irqs = kcalloc(PHY_MAX_ADDR, sizeof(int), GFP_KERNEL);

if (!irqs)
return NULL;

for (i = 0; i < PHY_MAX_ADDR; i++)
irqs[i] = PHY_POLL;

while ((child = of_get_next_child(np, child)) != NULL) {
int irq = irq_of_parse_and_map(child, 0);
const u32 *id;

if (irq == NO_IRQ)
continue;

id = of_get_property(child, "reg", NULL);

if (!id)
continue;

if (*id < PHY_MAX_ADDR && *id >= 0)
irqs[*id] = irq;
else
printk(KERN_WARNING "%s: "
"%d is not a valid PHY address\n",
np->full_name, *id);
}

return irqs;
}

void fsl_pq_mdio_bus_name(char *name, struct device_node *np)
{
const u32 *addr;
Expand Down Expand Up @@ -315,7 +278,7 @@ static int fsl_pq_mdio_probe(struct of_device *ofdev,

new_bus->priv = (void __force *)regs;

new_bus->irq = create_irq_map(np);
new_bus->irq = kcalloc(PHY_MAX_ADDR, sizeof(int), GFP_KERNEL);

if (NULL == new_bus->irq) {
err = -ENOMEM;
Expand Down Expand Up @@ -384,15 +347,7 @@ static int fsl_pq_mdio_probe(struct of_device *ofdev,

out_be32(tbipa, tbiaddr);

/*
* The TBIPHY-only buses will find PHYs at every address,
* so we mask them all but the TBI
*/
if (of_device_is_compatible(np, "fsl,gianfar-tbi"))
new_bus->phy_mask = ~(1 << tbiaddr);

err = mdiobus_register(new_bus);

err = of_mdiobus_register(new_bus, np);
if (err) {
printk (KERN_ERR "%s: Cannot register as MDIO bus\n",
new_bus->name);
Expand Down

0 comments on commit 324931b

Please sign in to comment.