static int mv88e6xxx_g2_eeprom_read8(struct mv88e6xxx_chip *chip, u16 addr, u8 *data) { u16 cmd = MV88E6XXX_G2_EEPROM_CMD_OP_READ; int err; err = mv88e6xxx_g2_eeprom_wait(chip); if (err) return err; err = mv88e6xxx_g2_write(chip, MV88E6390_G2_EEPROM_ADDR, addr); if (err) return err; err = mv88e6xxx_g2_eeprom_cmd(chip, cmd); if (err) return err; err = mv88e6xxx_g2_read(chip, MV88E6XXX_G2_EEPROM_CMD, &cmd); if (err) return err; *data = cmd & 0xff; return 0; }
static int mv88e6xxx_g2_eeprom_read16(struct mv88e6xxx_chip *chip, u8 addr, u16 *data) { u16 cmd = GLOBAL2_EEPROM_CMD_OP_READ | addr; int err; err = mv88e6xxx_g2_eeprom_wait(chip); if (err) return err; err = mv88e6xxx_g2_eeprom_cmd(chip, cmd); if (err) return err; return mv88e6xxx_g2_read(chip, GLOBAL2_EEPROM_DATA, data); }
static int mv88e6xxx_g2_switch_mgmt_rsvd2cpu(struct mv88e6xxx_chip *chip, bool enable) { u16 val; int err; err = mv88e6xxx_g2_read(chip, MV88E6XXX_G2_SWITCH_MGMT, &val); if (err) return err; if (enable) val |= MV88E6XXX_G2_SWITCH_MGMT_RSVD2CPU; else val &= ~MV88E6XXX_G2_SWITCH_MGMT_RSVD2CPU; return mv88e6xxx_g2_write(chip, MV88E6XXX_G2_SWITCH_MGMT, val); }
/* mv88e6xxx_g2_avb_read -- Read one or multiple 16-bit words. * The hardware supports snapshotting up to four contiguous registers. */ static int mv88e6xxx_g2_avb_read(struct mv88e6xxx_chip *chip, u16 readop, u16 *data, int len) { int err; int i; /* Hardware can only snapshot four words. */ if (len > 4) return -E2BIG; err = mv88e6xxx_g2_update(chip, MV88E6352_G2_AVB_CMD, readop); if (err) return err; for (i = 0; i < len; ++i) { err = mv88e6xxx_g2_read(chip, MV88E6352_G2_AVB_DATA, &data[i]); if (err) return err; } return 0; }
static int mv88e6xxx_g2_int_source(struct mv88e6xxx_chip *chip, u16 *src) { /* Read (and clear most of) the Interrupt Source bits */ return mv88e6xxx_g2_read(chip, MV88E6XXX_G2_INT_SRC, src); }