int onlp_i2c_mux_select(onlp_i2c_mux_device_t* dev, int channel) { int i; for(i = 0; i < AIM_ARRAYSIZE(dev->driver->channels); i++) { if(dev->driver->channels[i].channel == channel) { AIM_LOG_VERBOSE("i2c_mux_select: Selecting channel %2d on device '%s' [ bus=%d addr=0x%x offset=0x%x value=0x%x ]...", channel, dev->name, dev->bus, dev->devaddr, dev->driver->control, dev->driver->channels[i].value); int rv = onlp_i2c_writeb(dev->bus, dev->devaddr, dev->driver->control, dev->driver->channels[i].value, 0); if(rv < 0) { AIM_LOG_ERROR("i2c_mux_select: Selecting channel %2d on device '%s' [ bus=%d addr=0x%x offset=0x%x value=0x%x ] failed: %d", channel, dev->name, dev->bus, dev->devaddr, dev->driver->control, dev->driver->channels[i].value, rv); } return rv; } } return ONLP_STATUS_E_PARAM; }
int onlp_i2c_modifyb(int bus, uint8_t addr, uint8_t offset, uint8_t andmask, uint8_t ormask, uint32_t flags) { int v; ONLP_IF_ERROR_RETURN(v=onlp_i2c_readb(bus, addr, offset, flags)); v &= andmask; v |= ormask; return onlp_i2c_writeb(bus, addr, offset, v, flags); }
int onlp_sfpi_dev_writeb(int port, uint8_t devaddr, uint8_t addr, uint8_t value) { int bus = FRONT_PORT_TO_MUX_INDEX(port); int ret = onlp_i2c_writeb(bus, devaddr, addr, value, ONLP_I2C_F_FORCE); if (ret == 0) { unsigned char buf[8] = { 0 }; char str[20]; buf[port/8] = (1 << port%8); sprintf(str, "0x%02x%02x%02x%02x%02x%02x%02x%02x", buf[7],buf[6],buf[5],buf[4],buf[3],buf[2],buf[1],buf[0]); if (onlp_file_write((uint8_t*)str, 20, INV_SFP_EEPROM_UPDATE) < 0) { AIM_LOG_ERROR("Unable to write eeprom_update for port(%d)\r\n", port); return ONLP_STATUS_E_INTERNAL; } return ONLP_STATUS_OK; } AIM_LOG_ERROR("Unable to read eeprom_update from port(%d)\r\n", port); return ret; }
int onlp_i2c_dev_writeb(onlp_i2c_dev_t* dev, uint8_t offset, uint8_t byte, uint32_t flags) { int error, rv; if( (error = dev_mux_channels_select__(dev, flags)) < 0) { return error; } if( (rv = onlp_i2c_writeb(dev->bus, dev->addr, offset, byte, flags)) < 0) { AIM_LOG_ERROR("Device %s: writeb() failed: %d", dev->name, rv); return rv; } if( (error = dev_mux_channels_deselect__(dev, flags)) < 0) { return error; } return rv; }
int onlp_sfpi_dev_writeb(int port, uint8_t devaddr, uint8_t addr, uint8_t value) { int bus = PORT_BUS_INDEX(port); return onlp_i2c_writeb(bus, devaddr, addr, value, ONLP_I2C_F_FORCE); }
int onlp_sfpi_dev_writeb(int port, uint8_t devaddr, uint8_t addr, uint8_t value) { int bus = front_port_to_cpld_mux_index(port); return onlp_i2c_writeb(bus, devaddr, addr, value, ONLP_I2C_F_FORCE); }
int onlp_sfpi_dev_writeb(int port, uint8_t devaddr, uint8_t addr, uint8_t value) { int bus = onlp_sfpi_map_bus_index(port); return onlp_i2c_writeb(bus, devaddr, addr, value, ONLP_I2C_F_FORCE); }