Lines Matching +full:gpio +full:- +full:backlight
1 // SPDX-License-Identifier: GPL-2.0+
11 #include <backlight.h>
13 #include <asm/gpio.h>
17 * Private information for the PWM backlight
19 * If @num_levels is 0 then the levels are simple values with the backlight
21 * Otherwise the levels are an index into @levels (0..n-1).
23 * @reg: Regulator to enable to turn the backlight on (NULL if none)
24 * @enable, GPIO to set to enable the backlight (can be missing)
25 * @pwm: PWM to use to change the backlight brightness
27 * @period_ns: Period of the backlight in nanoseconds
28 * @levels: Levels for the backlight, or NULL if not using indexed levels
30 * @cur_level: Current level for the backlight (index or value)
31 * @default_level: Default level for the backlight (index or value)
32 * @min_level: Minimum level of the backlight (full off)
33 * @min_level: Maximum level of the backlight (full on)
34 * @enabled: true if backlight is enabled
56 duty_cycle = priv->period_ns * (priv->cur_level - priv->min_level) / in set_pwm()
57 (priv->max_level - priv->min_level + 1); in set_pwm()
58 ret = pwm_set_config(priv->pwm, priv->channel, priv->period_ns, in set_pwm()
71 if (priv->reg) { in enable_sequence()
75 plat = dev_get_uclass_platdata(priv->reg); in enable_sequence()
77 dev->name, priv->reg->name, plat->name); in enable_sequence()
78 ret = regulator_set_enable(priv->reg, true); in enable_sequence()
81 dev->name); in enable_sequence()
89 dm_gpio_set_value(&priv->enable, 1); in enable_sequence()
107 ret = pwm_set_enable(priv->pwm, priv->channel, true); in pwm_backlight_enable()
113 priv->enabled = true; in pwm_backlight_enable()
125 if (!priv->enabled) { in pwm_backlight_set_brightness()
135 level = priv->default_level; in pwm_backlight_set_brightness()
137 if (priv->levels) { in pwm_backlight_set_brightness()
138 level = priv->levels[percent * (priv->num_levels - 1) in pwm_backlight_set_brightness()
141 level = priv->min_level + in pwm_backlight_set_brightness()
142 (priv->max_level - priv->min_level) * in pwm_backlight_set_brightness()
146 priv->cur_level = level; in pwm_backlight_set_brightness()
151 if (!priv->enabled) { in pwm_backlight_set_brightness()
155 priv->enabled = true; in pwm_backlight_set_brightness()
158 dm_gpio_set_value(&priv->enable, 0); in pwm_backlight_set_brightness()
159 if (priv->reg) { in pwm_backlight_set_brightness()
160 ret = regulator_set_enable(priv->reg, false); in pwm_backlight_set_brightness()
164 priv->enabled = false; in pwm_backlight_set_brightness()
179 "power-supply", &priv->reg); in pwm_backlight_ofdata_to_platdata()
182 ret = gpio_request_by_name(dev, "enable-gpios", 0, &priv->enable, in pwm_backlight_ofdata_to_platdata()
185 log_debug("Warning: cannot get enable GPIO: ret=%d\n", ret); in pwm_backlight_ofdata_to_platdata()
186 if (ret != -ENOENT) in pwm_backlight_ofdata_to_platdata()
189 ret = dev_read_phandle_with_args(dev, "pwms", "#pwm-cells", 0, 0, in pwm_backlight_ofdata_to_platdata()
196 ret = uclass_get_device_by_ofnode(UCLASS_PWM, args.node, &priv->pwm); in pwm_backlight_ofdata_to_platdata()
202 return log_msg_ret("Not enough arguments to pwm\n", -EINVAL); in pwm_backlight_ofdata_to_platdata()
203 priv->channel = args.args[0]; in pwm_backlight_ofdata_to_platdata()
204 priv->period_ns = args.args[1]; in pwm_backlight_ofdata_to_platdata()
206 index = dev_read_u32_default(dev, "default-brightness-level", 255); in pwm_backlight_ofdata_to_platdata()
207 cell = dev_read_prop(dev, "brightness-levels", &len); in pwm_backlight_ofdata_to_platdata()
210 priv->levels = malloc(len); in pwm_backlight_ofdata_to_platdata()
211 if (!priv->levels) in pwm_backlight_ofdata_to_platdata()
212 return log_ret(-ENOMEM); in pwm_backlight_ofdata_to_platdata()
213 dev_read_u32_array(dev, "brightness-levels", priv->levels, in pwm_backlight_ofdata_to_platdata()
215 priv->num_levels = count; in pwm_backlight_ofdata_to_platdata()
216 priv->default_level = priv->levels[index]; in pwm_backlight_ofdata_to_platdata()
217 priv->max_level = priv->levels[count - 1]; in pwm_backlight_ofdata_to_platdata()
219 priv->default_level = index; in pwm_backlight_ofdata_to_platdata()
220 priv->max_level = 255; in pwm_backlight_ofdata_to_platdata()
222 priv->cur_level = priv->default_level; in pwm_backlight_ofdata_to_platdata()
240 { .compatible = "pwm-backlight" },