static char *mv88e6123_61_65_probe(struct mii_bus *bus, int sw_addr) { int ret; ret = __mv88e6xxx_reg_read(bus, sw_addr, REG_PORT(0), 0x03); if (ret >= 0) { if (ret == 0x1212) return "Marvell 88E6123 (A1)"; if (ret == 0x1213) return "Marvell 88E6123 (A2)"; if ((ret & 0xfff0) == 0x1210) return "Marvell 88E6123"; if (ret == 0x1612) return "Marvell 88E6161 (A1)"; if (ret == 0x1613) return "Marvell 88E6161 (A2)"; if ((ret & 0xfff0) == 0x1610) return "Marvell 88E6161"; if (ret == 0x1652) return "Marvell 88E6165 (A1)"; if (ret == 0x1653) return "Marvell 88e6165 (A2)"; if ((ret & 0xfff0) == 0x1650) return "Marvell 88E6165"; } return NULL; }
static char *mv88e6123_61_65_probe(struct device *host_dev, int sw_addr) { struct mii_bus *bus = dsa_host_dev_to_mii_bus(host_dev); int ret; if (bus == NULL) return NULL; ret = __mv88e6xxx_reg_read(bus, sw_addr, REG_PORT(0), PORT_SWITCH_ID); if (ret >= 0) { if (ret == PORT_SWITCH_ID_6123_A1) return "Marvell 88E6123 (A1)"; if (ret == PORT_SWITCH_ID_6123_A2) return "Marvell 88E6123 (A2)"; if ((ret & 0xfff0) == PORT_SWITCH_ID_6123) return "Marvell 88E6123"; if (ret == PORT_SWITCH_ID_6161_A1) return "Marvell 88E6161 (A1)"; if (ret == PORT_SWITCH_ID_6161_A2) return "Marvell 88E6161 (A2)"; if ((ret & 0xfff0) == PORT_SWITCH_ID_6161) return "Marvell 88E6161"; if (ret == PORT_SWITCH_ID_6165_A1) return "Marvell 88E6165 (A1)"; if (ret == PORT_SWITCH_ID_6165_A2) return "Marvell 88e6165 (A2)"; if ((ret & 0xfff0) == PORT_SWITCH_ID_6165) return "Marvell 88E6165"; } return NULL; }
int mv88e6xxx_reg_read(struct dsa_switch *ds, int addr, int reg) { struct mv88e6xxx_priv_state *ps = (void *)(ds + 1); int ret; mutex_lock(&ps->smi_mutex); ret = __mv88e6xxx_reg_read(ds->master_mii_bus, ds->pd->sw_addr, addr, reg); mutex_unlock(&ps->smi_mutex); return ret; }
int mv88e6xxx_reg_read(struct dsa_switch *ds, int addr, int reg) { struct mv88e6xxx_priv_state *ps = ds_to_priv(ds); struct mii_bus *bus = dsa_host_dev_to_mii_bus(ds->master_dev); int ret; if (bus == NULL) return -EINVAL; mutex_lock(&ps->smi_mutex); ret = __mv88e6xxx_reg_read(bus, ds->pd->sw_addr, addr, reg); mutex_unlock(&ps->smi_mutex); return ret; }
static char *mv88e6131_probe(struct mii_bus *bus, int sw_addr) { int ret; ret = __mv88e6xxx_reg_read(bus, sw_addr, REG_PORT(0), 0x03); if (ret >= 0) { ret &= 0xfff0; if (ret == 0x0950) return "Marvell 88E6095/88E6095F"; if (ret == 0x1060) return "Marvell 88E6131"; } return NULL; }
/* Must be called with SMI mutex held */ static int _mv88e6xxx_reg_read(struct dsa_switch *ds, int addr, int reg) { struct mii_bus *bus = dsa_host_dev_to_mii_bus(ds->master_dev); int ret; if (bus == NULL) return -EINVAL; ret = __mv88e6xxx_reg_read(bus, ds->pd->sw_addr, addr, reg); if (ret < 0) return ret; dev_dbg(ds->master_dev, "<- addr: 0x%.2x reg: 0x%.2x val: 0x%.4x\n", addr, reg, ret); return ret; }
static char *mv88e6131_probe(struct device *host_dev, int sw_addr) { struct mii_bus *bus = dsa_host_dev_to_mii_bus(host_dev); int ret; if (bus == NULL) return NULL; ret = __mv88e6xxx_reg_read(bus, sw_addr, REG_PORT(0), 0x03); if (ret >= 0) { ret &= 0xfff0; if (ret == ID_6085) return "Marvell 88E6085"; if (ret == ID_6095) return "Marvell 88E6095/88E6095F"; if (ret == ID_6131) return "Marvell 88E6131"; } return NULL; }
static char *mv88e6171_probe(struct device *host_dev, int sw_addr) { struct mii_bus *bus = dsa_host_dev_to_mii_bus(host_dev); int ret; if (bus == NULL) return NULL; ret = __mv88e6xxx_reg_read(bus, sw_addr, REG_PORT(0), PORT_SWITCH_ID); if (ret >= 0) { if ((ret & 0xfff0) == PORT_SWITCH_ID_6171) return "Marvell 88E6171"; if ((ret & 0xfff0) == PORT_SWITCH_ID_6175) return "Marvell 88E6175"; if ((ret & 0xfff0) == PORT_SWITCH_ID_6350) return "Marvell 88E6350"; if ((ret & 0xfff0) == PORT_SWITCH_ID_6351) return "Marvell 88E6351"; } return NULL; }
static char *mv88e6352_probe(struct device *host_dev, int sw_addr) { struct mii_bus *bus = dsa_host_dev_to_mii_bus(host_dev); int ret; if (bus == NULL) return NULL; ret = __mv88e6xxx_reg_read(bus, sw_addr, REG_PORT(0), PORT_SWITCH_ID); if (ret >= 0) { if ((ret & 0xfff0) == PORT_SWITCH_ID_6172) return "Marvell 88E6172"; if ((ret & 0xfff0) == PORT_SWITCH_ID_6176) return "Marvell 88E6176"; if (ret == PORT_SWITCH_ID_6320_A1) return "Marvell 88E6320 (A1)"; if (ret == PORT_SWITCH_ID_6320_A2) return "Marvell 88e6320 (A2)"; if ((ret & 0xfff0) == PORT_SWITCH_ID_6320) return "Marvell 88E6320"; if (ret == PORT_SWITCH_ID_6321_A1) return "Marvell 88E6321 (A1)"; if (ret == PORT_SWITCH_ID_6321_A2) return "Marvell 88e6321 (A2)"; if ((ret & 0xfff0) == PORT_SWITCH_ID_6321) return "Marvell 88E6321"; if (ret == PORT_SWITCH_ID_6352_A0) return "Marvell 88E6352 (A0)"; if (ret == PORT_SWITCH_ID_6352_A1) return "Marvell 88E6352 (A1)"; if ((ret & 0xfff0) == PORT_SWITCH_ID_6352) return "Marvell 88E6352"; } return NULL; }