Lines Matching +full:gpio +full:- +full:backlight
1 // SPDX-License-Identifier: GPL-2.0-only
3 * Backlight driver for the Kinetic KTD253
4 * Based on code and know-how from the Samsung GT-S7710
7 #include <linux/backlight.h>
10 #include <linux/gpio/consumer.h>
39 gpiod_set_value_cansleep(ktd253->gpiod, 1); in ktd253_backlight_set_max_ratio()
47 * These GPIO operations absolutely can NOT sleep so no _cansleep in ktd253_backlight_stepdown()
48 * suffixes, and no using GPIO expanders on slow buses for this! in ktd253_backlight_stepdown()
57 * top so we have the backlight in a known state. in ktd253_backlight_stepdown()
62 gpiod_set_value(ktd253->gpiod, 0); in ktd253_backlight_stepdown()
64 gpiod_set_value(ktd253->gpiod, 1); in ktd253_backlight_stepdown()
65 ns = ktime_get_ns() - ns; in ktd253_backlight_stepdown()
67 dev_err(ktd253->dev, "PCM on backlight took too long (%llu ns)\n", ns); in ktd253_backlight_stepdown()
68 return -EAGAIN; in ktd253_backlight_stepdown()
79 u16 current_ratio = ktd253->ratio; in ktd253_backlight_update_status()
82 dev_dbg(ktd253->dev, "new brightness/ratio: %d/32\n", brightness); in ktd253_backlight_update_status()
91 gpiod_set_value_cansleep(ktd253->gpiod, 0); in ktd253_backlight_update_status()
93 * We need to keep the GPIO low for at least this long in ktd253_backlight_update_status()
97 ktd253->ratio = 0; in ktd253_backlight_update_status()
108 * These GPIO operations absolutely can NOT sleep so no in ktd253_backlight_update_status()
109 * _cansleep suffixes, and no using GPIO expanders on in ktd253_backlight_update_status()
113 if (ret == -EAGAIN) { in ktd253_backlight_update_status()
115 * Something disturbed the backlight setting code when in ktd253_backlight_update_status()
119 gpiod_set_value_cansleep(ktd253->gpiod, 0); in ktd253_backlight_update_status()
127 current_ratio--; in ktd253_backlight_update_status()
130 ktd253->ratio = current_ratio; in ktd253_backlight_update_status()
132 dev_dbg(ktd253->dev, "new ratio set to %d/32\n", target_ratio); in ktd253_backlight_update_status()
144 struct device *dev = &pdev->dev; in ktd253_backlight_probe()
153 return -ENOMEM; in ktd253_backlight_probe()
154 ktd253->dev = dev; in ktd253_backlight_probe()
156 ret = device_property_read_u32(dev, "max-brightness", &max_brightness); in ktd253_backlight_probe()
165 ret = device_property_read_u32(dev, "default-brightness", &brightness); in ktd253_backlight_probe()
174 ktd253->gpiod = devm_gpiod_get(dev, "enable", GPIOD_OUT_LOW); in ktd253_backlight_probe()
175 if (IS_ERR(ktd253->gpiod)) in ktd253_backlight_probe()
176 return dev_err_probe(dev, PTR_ERR(ktd253->gpiod), in ktd253_backlight_probe()
177 "gpio line missing or invalid.\n"); in ktd253_backlight_probe()
178 gpiod_set_consumer_name(ktd253->gpiod, dev_name(dev)); in ktd253_backlight_probe()
179 /* Bring backlight to a known off state */ in ktd253_backlight_probe()
185 dev_err(dev, "failed to register backlight\n"); in ktd253_backlight_probe()
188 bl->props.max_brightness = max_brightness; in ktd253_backlight_probe()
189 /* When we just enable the GPIO line we set max brightness */ in ktd253_backlight_probe()
191 bl->props.brightness = brightness; in ktd253_backlight_probe()
192 bl->props.power = BACKLIGHT_POWER_ON; in ktd253_backlight_probe()
194 bl->props.brightness = 0; in ktd253_backlight_probe()
195 bl->props.power = BACKLIGHT_POWER_OFF; in ktd253_backlight_probe()
198 ktd253->bl = bl; in ktd253_backlight_probe()
214 .name = "ktd253-backlight",
222 MODULE_DESCRIPTION("Kinetic KTD253 Backlight Driver");
224 MODULE_ALIAS("platform:ktd253-backlight");