Lines Matching refs:led

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