Skip to content

Commit

Permalink
[celestica/e1031]: enable emc2305 fan controller timeout feature (#14401
Browse files Browse the repository at this point in the history
) (#15571)
  • Loading branch information
mssonicbld authored Jun 22, 2023
1 parent db12b8c commit 6bb16f3
Showing 1 changed file with 32 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -407,6 +407,35 @@ emc2305_set_pwm(struct i2c_client *client, int fan_idx, long pwm)
mutex_unlock(&data->update_lock);
return status;
}

static int
emc2305_enable_timeout(struct i2c_client *client, bool enable)
{
struct emc2305_data *data = i2c_get_clientdata(client);
int status = 0;
u8 conf_val = 0;

mutex_lock(&data->update_lock);

status = read_u8_from_i2c(client, REG_CONFIGURATION, &conf_val);
if (status < 0) {
mutex_unlock(&data->update_lock);
return status;
}

// Section 6.2: CONFIG REGISTER DIS_TO bit(bit 6)
if (enable) {
conf_val &= ~(1 << 6);
} else {
conf_val |= (1 << 6);
}

status = i2c_smbus_write_byte_data(client, REG_CONFIGURATION, conf_val);

mutex_unlock(&data->update_lock);
return status;
}

/*
* sysfs callback functions
*
Expand Down Expand Up @@ -744,6 +773,9 @@ emc2305_probe(struct i2c_client *client, const struct i2c_device_id *id)
i2c_set_clientdata(client, data);
mutex_init(&data->update_lock);

// Enable SMBus timeout feature
emc2305_enable_timeout(client, true);

status = i2c_smbus_read_byte_data(client, REG_PRODUCT_ID);
switch (status) {
case 0x34: /* EMC2305 */
Expand Down

0 comments on commit 6bb16f3

Please sign in to comment.