in platform/broadcom/sonic-platform-modules-accton/as7716-32xb/modules/accton_as7716_32xb_fan.c [397:499]
static ssize_t fan_value_store(struct device *dev, struct device_attribute *da,
const char *buf, size_t size)
{
struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
struct i2c_client *client = to_i2c_client(dev);
struct as7716_32xb_fan_data *data = i2c_get_clientdata(client);
int status = -EINVAL;
int index;
long keyin = 0;
//printk("fan_value_store\n");
//printk("attr->index=%d\n", attr->index);
mutex_lock(&data->update_lock);
switch (attr->index)
{
case FAN_DUTY_CYCLE_PERCENTAGE:
status = kstrtol(buf, STRING_TO_DEC_VALUE, &keyin);
if (status)
break;
if (keyin > 1 || keyin < 0)
break;
data->duty_cycle=keyin;
break;
case FAN1_FRONT_SPEED_RPM:
case FAN2_FRONT_SPEED_RPM:
case FAN3_FRONT_SPEED_RPM:
case FAN4_FRONT_SPEED_RPM:
case FAN5_FRONT_SPEED_RPM:
case FAN6_FRONT_SPEED_RPM:
status = kstrtol(buf, STRING_TO_DEC_VALUE, &keyin);
if (status)
break;
index=fan_array_index_get(attr->index);
if(index < 0 || index > (FAN_NUM_MAX-1))
break;
data->front_speed_rpm[index]=keyin;
break;
case FAN1_REAR_SPEED_RPM:
case FAN2_REAR_SPEED_RPM:
case FAN3_REAR_SPEED_RPM:
case FAN4_REAR_SPEED_RPM:
case FAN5_REAR_SPEED_RPM:
case FAN6_REAR_SPEED_RPM:
status = kstrtol(buf, STRING_TO_DEC_VALUE, &keyin);
if (status)
break;
index=fan_array_index_get(attr->index);
if(index < 0 || index > (FAN_NUM_MAX-1))
break;
data->rear_speed_rpm[index]=keyin;
case FAN1_PRESENT:
case FAN2_PRESENT:
case FAN3_PRESENT:
case FAN4_PRESENT:
case FAN5_PRESENT:
case FAN6_PRESENT:
status = kstrtol(buf, STRING_TO_DEC_VALUE, &keyin);
if (status)
break;
index=fan_array_index_get(attr->index);
if(index < 0 || index > (FAN_NUM_MAX-1))
break;
if(keyin < 0 || keyin > 1)
break;
data->present[index]=keyin;
break;
case FAN1_FAULT:
case FAN2_FAULT:
case FAN3_FAULT:
case FAN4_FAULT:
case FAN5_FAULT:
case FAN6_FAULT:
status = kstrtol(buf, STRING_TO_DEC_VALUE, &keyin);
if (status)
break;
index=fan_array_index_get(attr->index);
if(index < 0 || index > (FAN_NUM_MAX-1))
break;
if(keyin < 0 || keyin > 1)
break;
data->fault[index]=keyin;
break;
case FAN1_DIRECTION:
case FAN2_DIRECTION:
case FAN3_DIRECTION:
case FAN4_DIRECTION:
case FAN5_DIRECTION:
case FAN6_DIRECTION:
status = kstrtol(buf, STRING_TO_DEC_VALUE, &keyin);
if (status)
break;
index=fan_array_index_get(attr->index);
if(index < 0 || index > (FAN_NUM_MAX-1))
break;
if(keyin < 0 || keyin > 1)
break;
data->direction[index]=keyin;
break;
default:
break;
}
mutex_unlock(&data->update_lock);
return size;
}