static struct as7716_24xc_psu_data *as7716_24xc_psu_update_device(struct device *dev) { struct i2c_client *client = to_i2c_client(dev); struct as7716_24xc_psu_data *data = i2c_get_clientdata(client); mutex_lock(&data->update_lock); if (time_after(jiffies, data->last_updated + HZ + HZ / 2) || !data->valid) { int status; data->valid = 0; dev_dbg(&client->dev, "Starting as7716_24xc update\n"); /* Read psu status */ status = accton_i2c_cpld_read(PSU_STATUS_I2C_ADDR, PSU_STATUS_I2C_REG_OFFSET); if (status < 0) { dev_dbg(&client->dev, "cpld reg 0x60 err %d\n", status); goto exit; } else { data->status = status; } data->last_updated = jiffies; data->valid = 1; } exit: mutex_unlock(&data->update_lock); return data; }
static struct as7716_24sc_expansion_card_data *update_device(struct device *dev, int update_all) { struct i2c_client *client = to_i2c_client(dev); struct as7716_24sc_expansion_card_data *data = i2c_get_clientdata(client); mutex_lock(&data->update_lock); if (time_after(jiffies, data->last_updated + HZ + HZ / 2) || !data->valid) { int status, i; u8 regs[] = {0x00, 0x02}; /* 0x00: type, 0x02: slot */ data->valid = 0; dev_dbg(&client->dev, "Starting as7716_24sc update\n"); /* Read present status */ status = accton_i2c_cpld_read(CPLD_I2C_ADDR, EXPANSION_CARD_PRESENT_REG); if (status < 0) { dev_dbg(&client->dev, "cpld reg 0x60 err %d\n", status); goto exit; } else { data->status[CARD_PRESENT] = status; } /* Update card type and slot if card is present */ if (!(data->status[CARD_PRESENT] & BIT(data->driver_slot))) { for (i = 0; i < ARRAY_SIZE(regs); i++) { status = i2c_smbus_read_byte_data(client, regs[i]); if (status < 0) { goto exit; } data->status[i] = status; } } data->last_updated = jiffies; data->valid = 1; } exit: mutex_unlock(&data->update_lock); return data; }
static int accton_as6700_32x_fan_read_value(u8 reg) { return accton_i2c_cpld_read(0x35, reg); }
static int accton_as5512_54x_led_read_value(u8 reg) { return accton_i2c_cpld_read(0x60, reg); }