static ssize_t fan_value_store()

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;
}