Lines Matching +full:max +full:- +full:brightness
1 // SPDX-License-Identifier: GPL-2.0
28 int brightness; member
41 switch (su->type) { in to_supply()
51 unsigned int brightness) in as3711_set_brightness_auto_i() argument
54 struct as3711 *as3711 = supply->as3711; in as3711_set_brightness_auto_i()
55 const struct as3711_bl_pdata *pdata = supply->pdata; in as3711_set_brightness_auto_i()
59 if (pdata->su2_auto_curr1) in as3711_set_brightness_auto_i()
60 ret = regmap_write(as3711->regmap, AS3711_CURR1_VALUE, in as3711_set_brightness_auto_i()
61 brightness); in as3711_set_brightness_auto_i()
62 if (!ret && pdata->su2_auto_curr2) in as3711_set_brightness_auto_i()
63 ret = regmap_write(as3711->regmap, AS3711_CURR2_VALUE, in as3711_set_brightness_auto_i()
64 brightness); in as3711_set_brightness_auto_i()
65 if (!ret && pdata->su2_auto_curr3) in as3711_set_brightness_auto_i()
66 ret = regmap_write(as3711->regmap, AS3711_CURR3_VALUE, in as3711_set_brightness_auto_i()
67 brightness); in as3711_set_brightness_auto_i()
73 unsigned int brightness, in as3711_set_brightness_v() argument
76 if (brightness > 31) in as3711_set_brightness_v()
77 return -EINVAL; in as3711_set_brightness_v()
79 return regmap_update_bits(as3711->regmap, reg, 0xf0, in as3711_set_brightness_v()
80 brightness << 4); in as3711_set_brightness_v()
85 struct as3711 *as3711 = supply->as3711; in as3711_bl_su2_reset()
86 int ret = regmap_update_bits(as3711->regmap, AS3711_STEPUP_CONTROL_5, in as3711_bl_su2_reset()
87 3, supply->pdata->su2_fbprot); in as3711_bl_su2_reset()
89 ret = regmap_update_bits(as3711->regmap, in as3711_bl_su2_reset()
92 ret = regmap_update_bits(as3711->regmap, in as3711_bl_su2_reset()
99 * the brightness adjustment procedure.
105 struct as3711 *as3711 = supply->as3711; in as3711_bl_update_status()
106 int brightness; in as3711_bl_update_status() local
109 brightness = backlight_get_brightness(bl); in as3711_bl_update_status()
111 if (data->type == AS3711_BL_SU1) { in as3711_bl_update_status()
112 ret = as3711_set_brightness_v(as3711, brightness, in as3711_bl_update_status()
115 const struct as3711_bl_pdata *pdata = supply->pdata; in as3711_bl_update_status()
117 switch (pdata->su2_feedback) { in as3711_bl_update_status()
119 ret = as3711_set_brightness_v(as3711, brightness, in as3711_bl_update_status()
123 ret = as3711_set_brightness_auto_i(data, brightness / 4); in as3711_bl_update_status()
126 if (brightness) { in as3711_bl_update_status()
131 ret = as3711_set_brightness_auto_i(data, brightness); in as3711_bl_update_status()
133 ret = regmap_update_bits(as3711->regmap, in as3711_bl_update_status()
139 ret = regmap_write(as3711->regmap, AS3711_CURR1_VALUE, in as3711_bl_update_status()
140 brightness); in as3711_bl_update_status()
143 ret = regmap_write(as3711->regmap, AS3711_CURR2_VALUE, in as3711_bl_update_status()
144 brightness); in as3711_bl_update_status()
147 ret = regmap_write(as3711->regmap, AS3711_CURR3_VALUE, in as3711_bl_update_status()
148 brightness); in as3711_bl_update_status()
151 ret = -EINVAL; in as3711_bl_update_status()
155 data->brightness = brightness; in as3711_bl_update_status()
164 return data->brightness; in as3711_bl_get_brightness()
174 struct as3711 *as3711 = supply->as3711; in as3711_bl_init_su2()
175 const struct as3711_bl_pdata *pdata = supply->pdata; in as3711_bl_init_su2()
179 dev_dbg(as3711->dev, "%s(): use %u\n", __func__, pdata->su2_feedback); in as3711_bl_init_su2()
182 ret = regmap_write(as3711->regmap, AS3711_STEPUP_CONTROL_2, 0); in as3711_bl_init_su2()
186 switch (pdata->su2_feedback) { in as3711_bl_init_su2()
188 ret = regmap_update_bits(as3711->regmap, AS3711_STEPUP_CONTROL_4, 3, 0); in as3711_bl_init_su2()
192 ret = regmap_update_bits(as3711->regmap, AS3711_STEPUP_CONTROL_4, 3, 1); in as3711_bl_init_su2()
196 ret = regmap_update_bits(as3711->regmap, AS3711_STEPUP_CONTROL_4, 3, 2); in as3711_bl_init_su2()
200 ret = regmap_update_bits(as3711->regmap, AS3711_STEPUP_CONTROL_4, 3, 3); in as3711_bl_init_su2()
203 if (pdata->su2_auto_curr1) in as3711_bl_init_su2()
205 if (pdata->su2_auto_curr2) in as3711_bl_init_su2()
207 if (pdata->su2_auto_curr3) in as3711_bl_init_su2()
212 return -EINVAL; in as3711_bl_init_su2()
216 ret = regmap_write(as3711->regmap, AS3711_CURR_CONTROL, ctl); in as3711_bl_init_su2()
227 /* max tuning I = 31uA for voltage- and 38250uA for current-feedback */ in as3711_bl_register()
230 bl = devm_backlight_device_register(&pdev->dev, in as3711_bl_register()
231 su->type == AS3711_BL_SU1 ? in as3711_bl_register()
232 "as3711-su1" : "as3711-su2", in as3711_bl_register()
233 &pdev->dev, su, in as3711_bl_register()
236 dev_err(&pdev->dev, "failed to register backlight\n"); in as3711_bl_register()
240 bl->props.brightness = props.max_brightness; in as3711_bl_register()
244 su->bl = bl; in as3711_bl_register()
255 bl = of_get_child_by_name(dev->parent->of_node, "backlight"); in as3711_backlight_parse_dt()
258 return -ENODEV; in as3711_backlight_parse_dt()
261 fb = of_parse_phandle(bl, "su1-dev", 0); in as3711_backlight_parse_dt()
265 pdata->su1_fb = true; in as3711_backlight_parse_dt()
267 ret = of_property_read_u32(bl, "su1-max-uA", &pdata->su1_max_uA); in as3711_backlight_parse_dt()
268 if (pdata->su1_max_uA <= 0) in as3711_backlight_parse_dt()
269 ret = -EINVAL; in as3711_backlight_parse_dt()
274 fb = of_parse_phandle(bl, "su2-dev", 0); in as3711_backlight_parse_dt()
280 pdata->su2_fb = true; in as3711_backlight_parse_dt()
282 ret = of_property_read_u32(bl, "su2-max-uA", &pdata->su2_max_uA); in as3711_backlight_parse_dt()
283 if (pdata->su2_max_uA <= 0) in as3711_backlight_parse_dt()
284 ret = -EINVAL; in as3711_backlight_parse_dt()
288 if (of_property_read_bool(bl, "su2-feedback-voltage")) { in as3711_backlight_parse_dt()
289 pdata->su2_feedback = AS3711_SU2_VOLTAGE; in as3711_backlight_parse_dt()
292 if (of_property_read_bool(bl, "su2-feedback-curr1")) { in as3711_backlight_parse_dt()
293 pdata->su2_feedback = AS3711_SU2_CURR1; in as3711_backlight_parse_dt()
296 if (of_property_read_bool(bl, "su2-feedback-curr2")) { in as3711_backlight_parse_dt()
297 pdata->su2_feedback = AS3711_SU2_CURR2; in as3711_backlight_parse_dt()
300 if (of_property_read_bool(bl, "su2-feedback-curr3")) { in as3711_backlight_parse_dt()
301 pdata->su2_feedback = AS3711_SU2_CURR3; in as3711_backlight_parse_dt()
304 if (of_property_read_bool(bl, "su2-feedback-curr-auto")) { in as3711_backlight_parse_dt()
305 pdata->su2_feedback = AS3711_SU2_CURR_AUTO; in as3711_backlight_parse_dt()
309 ret = -EINVAL; in as3711_backlight_parse_dt()
314 if (of_property_read_bool(bl, "su2-fbprot-lx-sd4")) { in as3711_backlight_parse_dt()
315 pdata->su2_fbprot = AS3711_SU2_LX_SD4; in as3711_backlight_parse_dt()
318 if (of_property_read_bool(bl, "su2-fbprot-gpio2")) { in as3711_backlight_parse_dt()
319 pdata->su2_fbprot = AS3711_SU2_GPIO2; in as3711_backlight_parse_dt()
322 if (of_property_read_bool(bl, "su2-fbprot-gpio3")) { in as3711_backlight_parse_dt()
323 pdata->su2_fbprot = AS3711_SU2_GPIO3; in as3711_backlight_parse_dt()
326 if (of_property_read_bool(bl, "su2-fbprot-gpio4")) { in as3711_backlight_parse_dt()
327 pdata->su2_fbprot = AS3711_SU2_GPIO4; in as3711_backlight_parse_dt()
331 ret = -EINVAL; in as3711_backlight_parse_dt()
336 if (of_property_read_bool(bl, "su2-auto-curr1")) { in as3711_backlight_parse_dt()
337 pdata->su2_auto_curr1 = true; in as3711_backlight_parse_dt()
340 if (of_property_read_bool(bl, "su2-auto-curr2")) { in as3711_backlight_parse_dt()
341 pdata->su2_auto_curr2 = true; in as3711_backlight_parse_dt()
344 if (of_property_read_bool(bl, "su2-auto-curr3")) { in as3711_backlight_parse_dt()
345 pdata->su2_auto_curr3 = true; in as3711_backlight_parse_dt()
350 * At least one su2-auto-curr* must be specified iff in as3711_backlight_parse_dt()
353 if (!count ^ (pdata->su2_feedback != AS3711_SU2_CURR_AUTO)) { in as3711_backlight_parse_dt()
354 ret = -EINVAL; in as3711_backlight_parse_dt()
371 struct as3711_bl_pdata *pdata = dev_get_platdata(&pdev->dev); in as3711_backlight_probe()
372 struct as3711 *as3711 = dev_get_drvdata(pdev->dev.parent); in as3711_backlight_probe()
379 dev_err(&pdev->dev, "No platform data, exiting...\n"); in as3711_backlight_probe()
380 return -ENODEV; in as3711_backlight_probe()
383 if (pdev->dev.parent->of_node) { in as3711_backlight_probe()
384 ret = as3711_backlight_parse_dt(&pdev->dev); in as3711_backlight_probe()
386 return dev_err_probe(&pdev->dev, ret, "DT parsing failed\n"); in as3711_backlight_probe()
389 if (!pdata->su1_fb && !pdata->su2_fb) { in as3711_backlight_probe()
390 dev_err(&pdev->dev, "No framebuffer specified\n"); in as3711_backlight_probe()
391 return -EINVAL; in as3711_backlight_probe()
399 if (pdata->su1_fb || in as3711_backlight_probe()
400 pdata->su2_fbprot != AS3711_SU2_GPIO4 || in as3711_backlight_probe()
401 pdata->su2_feedback != AS3711_SU2_CURR_AUTO) { in as3711_backlight_probe()
402 dev_warn(&pdev->dev, in as3711_backlight_probe()
404 "Please, review the code, enable, test, and report success:-)\n"); in as3711_backlight_probe()
405 return -EINVAL; in as3711_backlight_probe()
408 supply = devm_kzalloc(&pdev->dev, sizeof(*supply), GFP_KERNEL); in as3711_backlight_probe()
410 return -ENOMEM; in as3711_backlight_probe()
412 supply->as3711 = as3711; in as3711_backlight_probe()
413 supply->pdata = pdata; in as3711_backlight_probe()
415 if (pdata->su1_fb) { in as3711_backlight_probe()
416 su = &supply->su1; in as3711_backlight_probe()
417 su->type = AS3711_BL_SU1; in as3711_backlight_probe()
419 max_brightness = min(pdata->su1_max_uA, 31); in as3711_backlight_probe()
425 if (pdata->su2_fb) { in as3711_backlight_probe()
426 su = &supply->su2; in as3711_backlight_probe()
427 su->type = AS3711_BL_SU2; in as3711_backlight_probe()
429 switch (pdata->su2_fbprot) { in as3711_backlight_probe()
436 return -EINVAL; in as3711_backlight_probe()
439 switch (pdata->su2_feedback) { in as3711_backlight_probe()
441 max_brightness = min(pdata->su2_max_uA, 31); in as3711_backlight_probe()
447 max_brightness = min(pdata->su2_max_uA / 150, 255); in as3711_backlight_probe()
450 return -EINVAL; in as3711_backlight_probe()
469 .name = "as3711-backlight",
479 MODULE_ALIAS("platform:as3711-backlight");