lkml.org 
[lkml]   [2020]   [Oct]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH v5 1/5] counter: Internalize sysfs interface code
    From
    Date
    On 9/26/20 9:18 PM, William Breathitt Gray wrote:
    > +static ssize_t counter_comp_u8_store(struct device *dev,
    > + struct device_attribute *attr,
    > + const char *buf, size_t len)
    > +{
    > + const struct counter_attribute *const a = to_counter_attribute(attr);
    > + struct counter_device *const counter = dev_get_drvdata(dev);
    > + struct counter_count *const count = a->parent;
    > + struct counter_synapse *const synapse = a->comp.priv;
    > + const struct counter_available *const avail = a->comp.priv;
    > + int err;
    > + bool bool_data;
    > + u8 data;
    > +
    > + switch (a->comp.type) {
    > + case COUNTER_COMP_BOOL:
    > + err = kstrtobool(buf, &bool_data);
    > + data = bool_data;
    > + break;
    > + case COUNTER_COMP_FUNCTION:
    > + err = find_in_string_array(&data, count->functions_list,
    > + count->num_functions, buf,
    > + counter_function_str);
    > + break;
    > + case COUNTER_COMP_SYNAPSE_ACTION:
    > + err = find_in_string_array(&data, synapse->actions_list,
    > + synapse->num_actions, buf,
    > + counter_synapse_action_str);
    > + break;
    > + case COUNTER_COMP_ENUM:
    > + err = __sysfs_match_string(avail->strs, avail->num_items, buf);
    > + data = err;
    > + break;
    > + case COUNTER_COMP_COUNT_MODE:
    > + err = find_in_string_array(&data, avail->enums,
    > + avail->num_items, buf,
    > + counter_count_mode_str);
    > + break;
    > + default:
    > + err = kstrtou8(buf, 0, &data);
    > + break;
    > + }

    In this function, return values are not always errors. So it would make
    sense to call the err variable ret instead and check for ret < 0 below.

    Setting enums to a value with index > 0 fails currently because of this.

    > + if (err)
    > + return err;
    > +
    > + switch (a->scope) {
    > + case COUNTER_SCOPE_DEVICE:
    > + err = a->comp.device_u8_write(counter, data);
    > + break;
    > + case COUNTER_SCOPE_SIGNAL:
    > + err = a->comp.signal_u8_write(counter, a->parent, data);
    > + break;
    > + case COUNTER_SCOPE_COUNT:
    > + if (a->comp.type == COUNTER_COMP_SYNAPSE_ACTION)
    > + err = a->comp.action_write(counter, count, synapse,
    > + data);
    > + else
    > + err = a->comp.count_u8_write(counter, count, data);
    > + break;
    > + }
    > + if (err)
    > + return err;
    > +
    > + return len;
    > +}

    \
     
     \ /
      Last update: 2020-10-15 03:38    [W:4.131 / U:0.080 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site