Lines Matching refs:led

146 static int lm3692x_fault_check(struct lm3692x_led *led)
151 ret = regmap_read(led->regmap, LM3692X_FAULT_FLAGS, &read_buf);
156 dev_err(&led->client->dev, "Detected a fault 0x%X\n", read_buf);
161 regmap_read(led->regmap, LM3692X_FAULT_FLAGS, &read_buf);
163 dev_err(&led->client->dev, "Second read of fault flags 0x%X\n",
169 static int lm3692x_leds_enable(struct lm3692x_led *led)
174 if (led->enabled)
177 if (led->regulator) {
178 ret = regulator_enable(led->regulator);
180 dev_err(&led->client->dev,
186 if (led->enable_gpio)
187 gpiod_direction_output(led->enable_gpio, 1);
189 ret = lm3692x_fault_check(led);
191 dev_err(&led->client->dev, "Cannot read/clear faults: %d\n",
196 ret = regmap_write(led->regmap, LM3692X_BRT_CTRL, 0x00);
206 ret = regmap_write(led->regmap, LM3692X_EN, LM3692X_DEVICE_EN);
213 ret = regmap_write(led->regmap, LM3692X_BRT_MSB, 0);
217 ret = regmap_write(led->regmap, LM3692X_BRT_LSB, 0);
221 ret = regmap_write(led->regmap, LM3692X_PWM_CTRL,
226 ret = regmap_write(led->regmap, LM3692X_BOOST_CTRL, led->boost_ctrl);
230 ret = regmap_write(led->regmap, LM3692X_AUTO_FREQ_HI, 0x00);
234 ret = regmap_write(led->regmap, LM3692X_AUTO_FREQ_LO, 0x00);
238 ret = regmap_write(led->regmap, LM3692X_BL_ADJ_THRESH, 0x00);
242 ret = regmap_write(led->regmap, LM3692X_BRT_CTRL,
247 switch (led->led_enable) {
250 if (led->model_id == LM36923_MODEL)
265 if (led->model_id == LM36923_MODEL) {
271 dev_err(&led->client->dev,
276 ret = regmap_update_bits(led->regmap, LM3692X_EN, LM3692X_ENABLE_MASK,
279 led->enabled = true;
282 dev_err(&led->client->dev, "Fail writing initialization values\n");
284 if (led->enable_gpio)
285 gpiod_direction_output(led->enable_gpio, 0);
287 if (led->regulator) {
288 reg_ret = regulator_disable(led->regulator);
290 dev_err(&led->client->dev,
297 static int lm3692x_leds_disable(struct lm3692x_led *led)
301 if (!led->enabled)
304 ret = regmap_update_bits(led->regmap, LM3692X_EN, LM3692X_DEVICE_EN, 0);
306 dev_err(&led->client->dev, "Failed to disable regulator: %d\n",
311 if (led->enable_gpio)
312 gpiod_direction_output(led->enable_gpio, 0);
314 if (led->regulator) {
315 ret = regulator_disable(led->regulator);
317 dev_err(&led->client->dev,
321 led->enabled = false;
328 struct lm3692x_led *led =
333 mutex_lock(&led->lock);
336 ret = lm3692x_leds_disable(led);
339 lm3692x_leds_enable(led);
342 ret = lm3692x_fault_check(led);
344 dev_err(&led->client->dev, "Cannot read/clear faults: %d\n",
349 ret = regmap_write(led->regmap, LM3692X_BRT_MSB, brt_val);
351 dev_err(&led->client->dev, "Cannot write MSB: %d\n", ret);
355 ret = regmap_write(led->regmap, LM3692X_BRT_LSB, led_brightness_lsb);
357 dev_err(&led->client->dev, "Cannot write LSB: %d\n", ret);
361 mutex_unlock(&led->lock);
365 static enum led_brightness lm3692x_max_brightness(struct lm3692x_led *led,
378 static int lm3692x_probe_dt(struct lm3692x_led *led)
385 led->enable_gpio = devm_gpiod_get_optional(&led->client->dev,
387 if (IS_ERR(led->enable_gpio)) {
388 ret = PTR_ERR(led->enable_gpio);
389 dev_err(&led->client->dev, "Failed to get enable gpio: %d\n",
394 led->regulator = devm_regulator_get_optional(&led->client->dev, "vled");
395 if (IS_ERR(led->regulator)) {
396 ret = PTR_ERR(led->regulator);
398 return dev_err_probe(&led->client->dev, ret,
401 led->regulator = NULL;
404 led->boost_ctrl = LM3692X_BOOST_SW_1MHZ |
407 ret = device_property_read_u32(&led->client->dev,
410 led->boost_ctrl |= LM3692X_OVP_29V;
416 led->boost_ctrl |= LM3692X_OVP_21V;
419 led->boost_ctrl |= LM3692X_OVP_25V;
422 led->boost_ctrl |= LM3692X_OVP_29V;
425 dev_err(&led->client->dev, "Invalid OVP %d\n", ovp);
430 child = device_get_next_child_node(&led->client->dev, child);
432 dev_err(&led->client->dev, "No LED Child node\n");
436 ret = fwnode_property_read_u32(child, "reg", &led->led_enable);
439 dev_err(&led->client->dev, "reg DT property missing\n");
443 ret = fwnode_property_read_u32(child, "led-max-microamp", &max_cur);
444 led->led_dev.max_brightness = ret ? LED_FULL :
445 lm3692x_max_brightness(led, max_cur);
448 init_data.devicename = led->client->name;
451 ret = devm_led_classdev_register_ext(&led->client->dev, &led->led_dev,
454 dev_err(&led->client->dev, "led register err: %d\n", ret);
463 struct lm3692x_led *led;
466 led = devm_kzalloc(&client->dev, sizeof(*led), GFP_KERNEL);
467 if (!led)
470 mutex_init(&led->lock);
471 led->client = client;
472 led->led_dev.brightness_set_blocking = lm3692x_brightness_set;
473 led->model_id = id->driver_data;
474 i2c_set_clientdata(client, led);
476 led->regmap = devm_regmap_init_i2c(client, &lm3692x_regmap_config);
477 if (IS_ERR(led->regmap)) {
478 ret = PTR_ERR(led->regmap);
484 ret = lm3692x_probe_dt(led);
488 ret = lm3692x_leds_enable(led);
497 struct lm3692x_led *led = i2c_get_clientdata(client);
500 ret = lm3692x_leds_disable(led);
503 mutex_destroy(&led->lock);