On Fri, 2017-01-06 at 15:48 -0500, Olimpiu Dejeu wrote: > backlight: Add support for Arctic Sand LED backlight driver chips > This driver provides support for the Arctic Sand arc2c0608 chip, > and provides a framework to support future devices. style trivia: > diff --git a/drivers/video/backlight/arcxcnn_bl.c b/drivers/video/backlight/arcxcnn_bl.c [] > +static int arcxcnn_bl_update_status(struct backlight_device *bl) > +{ > + struct arcxcnn *lp = bl_get_data(bl); > + u32 brightness = bl->props.brightness; > + > + if (bl->props.state & (BL_CORE_SUSPENDED | BL_CORE_FBBLANK)) > + brightness = 0; > + > + arcxcnn_set_brightness(lp, brightness); > + > + /* set power-on/off/save modes */ > + if (bl->props.power == 0) > + /* take out of standby */ > + arcxcnn_update_bit(lp, ARCXCNN_CMD, ARCXCNN_CMD_STDBY, 0); > + else > + /* place in low-power standby mode */ > + arcxcnn_update_bit(lp, ARCXCNN_CMD, > + ARCXCNN_CMD_STDBY, ARCXCNN_CMD_STDBY); This is generally smaller code using a temporary and a single call instead of two calls like: int cmd; ... if (bl->props.power == 0) cmd = 0; /* take out of standby */ else cmd = ARCXCNN_CMD_STDBY; arcxcnn_update_bit(lp, ARCXCNN_CMD, ARCXCNN_CMD_STDBY, cmd); or maybe arcxcnn_update_bit(lp, ARCXCNN_CMD, ARCXCNN_CMD_STDBY, bl->props.power == 0 ? 0 : ARCXCNN_CMD_STDBY); > +static int arcxcnn_backlight_register(struct arcxcnn *lp) > +{ > + struct backlight_properties *props; > + const char *name = lp->pdata->name ? : "arctic_bl"; > + > + props = devm_kzalloc(lp->dev, sizeof(*props), GFP_KERNEL); > + if (!props) > + return -ENOMEM; > + > + memset(props, 0, sizeof(props)); props has already been zeroed by devm_kzalloc and doesn't need to be memset to 0 again. > + props->type = BACKLIGHT_PLATFORM; > + props->max_brightness = MAX_BRIGHTNESS; > + > + if (lp->pdata->initial_brightness > props->max_brightness) > + lp->pdata->initial_brightness = props->max_brightness; > + > + props->brightness = lp->pdata->initial_brightness; > + > + lp->bl = devm_backlight_device_register(lp->dev, name, lp->dev, lp, > + &arcxcnn_bl_ops, props); > + This blank line above is generally not needed. > + if (IS_ERR(lp->bl)) > + return PTR_ERR(lp->bl); the typical style is: rtn = foo(...) if (rtn < 0) error_handler... > +static void arcxcnn_parse_dt(struct arcxcnn *lp) > +{ > + struct device *dev = lp->dev; > + struct device_node *node = dev->of_node; > + u32 prog_val, num_entry, entry, sources[ARCXCNN_LEDEN_BITS]; > + int ret; [] > + ret = of_property_count_u32_elems(node, "led-sources"); > + if (ret < 0) { > + lp->pdata->leden = ARCXCNN_LEDEN_MASK; /* all on is default */ > + } else { > + num_entry = ret; > + if (num_entry > ARCXCNN_LEDEN_BITS) > + num_entry = ARCXCNN_LEDEN_BITS; > + > + ret = of_property_read_u32_array(node, "led-sources", sources, > + num_entry); > + if (ret < 0) { > + dev_err(dev, "led-sources node is invalid.\n"); > + } else { > + u8 onbit; > + > + lp->pdata->leden = 0; > + > + /* for each enable in source, set bit in led enable */ > + for (entry = 0; entry < num_entry; entry++) { > + onbit = 1 << sources[entry]; > + lp->pdata->leden |= onbit; > + } > + } > + } > +} The cascading indentation can be avoided by using return; as necessary ret = of_property_count_u32_elems(node, "led-sources"); if (ret < 0) { lp->pdata->leden = ARCXCNN_LEDEN_MASK; /* all on is default */ return; } num_entry = min(ret, ARCXCNN_LEDEN_BITS); ret = of_property_read_u32_array(node, "led-sources", sources, num_entry); if (ret < 0) { dev_err(dev, "led-sources node is invalid\n"); return; } lp->pdata->leden = 0; /* for each enable in source, set bit in led enable */ for (entry = 0; entry < num_entry; entry++) { u8 onbit = 1 << sources[entry]; lp->pdata->leden |= onbit; } -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html