On Wed, Oct 14, 2020 at 08:38:40PM -0500, David Lechner wrote: > 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. Thank you for pointing this out, I'll fix this. William Breathitt Gray > > + 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; > > +} >