Lines Matching refs:led
145 static int lm3692x_fault_check(struct lm3692x_led *led)
150 ret = regmap_read(led->regmap, LM3692X_FAULT_FLAGS, &read_buf);
155 dev_err(&led->client->dev, "Detected a fault 0x%X\n", read_buf);
160 regmap_read(led->regmap, LM3692X_FAULT_FLAGS, &read_buf);
162 dev_err(&led->client->dev, "Second read of fault flags 0x%X\n",
168 static int lm3692x_leds_enable(struct lm3692x_led *led)
173 if (led->enabled)
176 if (led->regulator) {
177 ret = regulator_enable(led->regulator);
179 dev_err(&led->client->dev,
185 if (led->enable_gpio)
186 gpiod_direction_output(led->enable_gpio, 1);
188 ret = lm3692x_fault_check(led);
190 dev_err(&led->client->dev, "Cannot read/clear faults: %d\n",
195 ret = regmap_write(led->regmap, LM3692X_BRT_CTRL, 0x00);
205 ret = regmap_write(led->regmap, LM3692X_EN, LM3692X_DEVICE_EN);
212 ret = regmap_write(led->regmap, LM3692X_BRT_MSB, 0);
216 ret = regmap_write(led->regmap, LM3692X_BRT_LSB, 0);
220 ret = regmap_write(led->regmap, LM3692X_PWM_CTRL,
225 ret = regmap_write(led->regmap, LM3692X_BOOST_CTRL, led->boost_ctrl);
229 ret = regmap_write(led->regmap, LM3692X_AUTO_FREQ_HI, 0x00);
233 ret = regmap_write(led->regmap, LM3692X_AUTO_FREQ_LO, 0x00);
237 ret = regmap_write(led->regmap, LM3692X_BL_ADJ_THRESH, 0x00);
241 ret = regmap_write(led->regmap, LM3692X_BRT_CTRL,
246 switch (led->led_enable) {
249 if (led->model_id == LM36923_MODEL)
264 if (led->model_id == LM36923_MODEL) {
270 dev_err(&led->client->dev,
275 ret = regmap_update_bits(led->regmap, LM3692X_EN, LM3692X_ENABLE_MASK,
278 led->enabled = true;
281 dev_err(&led->client->dev, "Fail writing initialization values\n");
283 if (led->enable_gpio)
284 gpiod_direction_output(led->enable_gpio, 0);
286 if (led->regulator) {
287 reg_ret = regulator_disable(led->regulator);
289 dev_err(&led->client->dev,
296 static int lm3692x_leds_disable(struct lm3692x_led *led)
300 if (!led->enabled)
303 ret = regmap_update_bits(led->regmap, LM3692X_EN, LM3692X_DEVICE_EN, 0);
305 dev_err(&led->client->dev, "Failed to disable regulator: %d\n",
310 if (led->enable_gpio)
311 gpiod_direction_output(led->enable_gpio, 0);
313 if (led->regulator) {
314 ret = regulator_disable(led->regulator);
316 dev_err(&led->client->dev,
320 led->enabled = false;
327 struct lm3692x_led *led =
332 mutex_lock(&led->lock);
335 ret = lm3692x_leds_disable(led);
338 lm3692x_leds_enable(led);
341 ret = lm3692x_fault_check(led);
343 dev_err(&led->client->dev, "Cannot read/clear faults: %d\n",
348 ret = regmap_write(led->regmap, LM3692X_BRT_MSB, brt_val);
350 dev_err(&led->client->dev, "Cannot write MSB: %d\n", ret);
354 ret = regmap_write(led->regmap, LM3692X_BRT_LSB, led_brightness_lsb);
356 dev_err(&led->client->dev, "Cannot write LSB: %d\n", ret);
360 mutex_unlock(&led->lock);
364 static enum led_brightness lm3692x_max_brightness(struct lm3692x_led *led,
377 static int lm3692x_probe_dt(struct lm3692x_led *led)
384 led->enable_gpio = devm_gpiod_get_optional(&led->client->dev,
386 if (IS_ERR(led->enable_gpio)) {
387 ret = PTR_ERR(led->enable_gpio);
388 dev_err(&led->client->dev, "Failed to get enable gpio: %d\n",
393 led->regulator = devm_regulator_get_optional(&led->client->dev, "vled");
394 if (IS_ERR(led->regulator)) {
395 ret = PTR_ERR(led->regulator);
397 return dev_err_probe(&led->client->dev, ret,
400 led->regulator = NULL;
403 led->boost_ctrl = LM3692X_BOOST_SW_1MHZ |
406 ret = device_property_read_u32(&led->client->dev,
409 led->boost_ctrl |= LM3692X_OVP_29V;
415 led->boost_ctrl |= LM3692X_OVP_21V;
418 led->boost_ctrl |= LM3692X_OVP_25V;
421 led->boost_ctrl |= LM3692X_OVP_29V;
424 dev_err(&led->client->dev, "Invalid OVP %d\n", ovp);
429 child = device_get_next_child_node(&led->client->dev, child);
431 dev_err(&led->client->dev, "No LED Child node\n");
435 ret = fwnode_property_read_u32(child, "reg", &led->led_enable);
438 dev_err(&led->client->dev, "reg DT property missing\n");
442 ret = fwnode_property_read_u32(child, "led-max-microamp", &max_cur);
443 led->led_dev.max_brightness = ret ? LED_FULL :
444 lm3692x_max_brightness(led, max_cur);
447 init_data.devicename = led->client->name;
450 ret = devm_led_classdev_register_ext(&led->client->dev, &led->led_dev,
453 dev_err(&led->client->dev, "led register err: %d\n", ret);
462 struct lm3692x_led *led;
465 led = devm_kzalloc(&client->dev, sizeof(*led), GFP_KERNEL);
466 if (!led)
469 mutex_init(&led->lock);
470 led->client = client;
471 led->led_dev.brightness_set_blocking = lm3692x_brightness_set;
472 led->model_id = id->driver_data;
473 i2c_set_clientdata(client, led);
475 led->regmap = devm_regmap_init_i2c(client, &lm3692x_regmap_config);
476 if (IS_ERR(led->regmap)) {
477 ret = PTR_ERR(led->regmap);
483 ret = lm3692x_probe_dt(led);
487 ret = lm3692x_leds_enable(led);
496 struct lm3692x_led *led = i2c_get_clientdata(client);
498 lm3692x_leds_disable(led);
499 mutex_destroy(&led->lock);