#include <linux/list.h>
#include <linux/mdio.h>
#include <linux/module.h>
+#include <linux/of_device.h>
#include <linux/of_mdio.h>
#include <linux/netdevice.h>
#include <linux/gpio/consumer.h>
if (!info)
return -ENODEV;
+ /* Update the compatible info with the probed one */
ps->info = info;
dev_info(ps->dev, "switch 0x%x detected: %s, revision %u\n",
if (!ps)
return NULL;
+ /* Legacy SMI probing will only support chips similar to 88E6085 */
+ ps->info = &mv88e6xxx_table[MV88E6085];
+
err = mv88e6xxx_smi_init(ps, bus, sw_addr);
if (err)
goto free;
{
struct device *dev = &mdiodev->dev;
struct device_node *np = dev->of_node;
+ const struct mv88e6xxx_info *compat_info;
struct mv88e6xxx_priv_state *ps;
u32 eeprom_len;
int err;
+ compat_info = of_device_get_match_data(dev);
+ if (!compat_info)
+ return -EINVAL;
+
ps = mv88e6xxx_alloc_chip(dev);
if (!ps)
return -ENOMEM;
+ ps->info = compat_info;
+
err = mv88e6xxx_smi_init(ps, mdiodev->bus, mdiodev->addr);
if (err)
return err;
}
static const struct of_device_id mv88e6xxx_of_match[] = {
- { .compatible = "marvell,mv88e6085" },
+ {
+ .compatible = "marvell,mv88e6085",
+ .data = &mv88e6xxx_table[MV88E6085],
+ },
{ /* sentinel */ },
};