Lines Matching +full:pwm +full:- +full:backlight
1 // SPDX-License-Identifier: GPL-2.0-only
3 * Backlight driver for Marvell Semiconductor 88PM8606
15 #include <linux/backlight.h>
29 int pwm; member
39 int ret = -EINVAL; in backlight_power_set()
61 struct pm860x_chip *chip = data->chip; in pm860x_backlight_set()
71 backlight_power_set(chip, data->port, 1); in pm860x_backlight_set()
73 ret = pm860x_reg_write(data->i2c, data->reg_duty_cycle, value); in pm860x_backlight_set()
77 if ((data->current_brightness == 0) && brightness) { in pm860x_backlight_set()
78 if (data->iset) { in pm860x_backlight_set()
79 ret = pm860x_set_bits(data->i2c, data->reg_current, in pm860x_backlight_set()
80 CURRENT_BITMASK, data->iset); in pm860x_backlight_set()
84 if (data->pwm) { in pm860x_backlight_set()
85 ret = pm860x_set_bits(data->i2c, PM8606_PWM, in pm860x_backlight_set()
86 PM8606_PWM_FREQ_MASK, data->pwm); in pm860x_backlight_set()
92 ret = pm860x_set_bits(data->i2c, data->reg_always_on, in pm860x_backlight_set()
98 ret = pm860x_set_bits(data->i2c, data->reg_always_on, in pm860x_backlight_set()
102 ret = pm860x_set_bits(data->i2c, data->reg_always_on, in pm860x_backlight_set()
110 backlight_power_set(chip, data->port, 0); in pm860x_backlight_set()
112 dev_dbg(chip->dev, "set brightness %d\n", value); in pm860x_backlight_set()
113 data->current_brightness = value; in pm860x_backlight_set()
116 dev_dbg(chip->dev, "set brightness %d failure with return value: %d\n", in pm860x_backlight_set()
129 struct pm860x_chip *chip = data->chip; in pm860x_backlight_get_brightness()
132 ret = pm860x_reg_read(data->i2c, data->reg_duty_cycle); in pm860x_backlight_get_brightness()
135 data->current_brightness = ret; in pm860x_backlight_get_brightness()
136 dev_dbg(chip->dev, "get brightness %d\n", data->current_brightness); in pm860x_backlight_get_brightness()
137 return data->current_brightness; in pm860x_backlight_get_brightness()
139 return -EINVAL; in pm860x_backlight_get_brightness()
156 nproot = of_get_child_by_name(pdev->dev.parent->of_node, "backlights"); in pm860x_backlight_dt_init()
158 dev_err(&pdev->dev, "failed to find backlights node\n"); in pm860x_backlight_dt_init()
159 return -ENODEV; in pm860x_backlight_dt_init()
163 of_property_read_u32(np, "marvell,88pm860x-iset", in pm860x_backlight_dt_init()
165 data->iset = PM8606_WLED_CURRENT(iset); in pm860x_backlight_dt_init()
166 of_property_read_u32(np, "marvell,88pm860x-pwm", in pm860x_backlight_dt_init()
167 &data->pwm); in pm860x_backlight_dt_init()
175 #define pm860x_backlight_dt_init(x, y, z) (-1)
180 struct pm860x_chip *chip = dev_get_drvdata(pdev->dev.parent); in pm860x_backlight_probe()
181 struct pm860x_backlight_pdata *pdata = dev_get_platdata(&pdev->dev); in pm860x_backlight_probe()
189 data = devm_kzalloc(&pdev->dev, sizeof(struct pm860x_backlight_data), in pm860x_backlight_probe()
192 return -ENOMEM; in pm860x_backlight_probe()
195 dev_err(&pdev->dev, "No REG resource for duty cycle\n"); in pm860x_backlight_probe()
196 return -ENXIO; in pm860x_backlight_probe()
198 data->reg_duty_cycle = res->start; in pm860x_backlight_probe()
201 dev_err(&pdev->dev, "No REG resource for always on\n"); in pm860x_backlight_probe()
202 return -ENXIO; in pm860x_backlight_probe()
204 data->reg_always_on = res->start; in pm860x_backlight_probe()
207 dev_err(&pdev->dev, "No REG resource for current\n"); in pm860x_backlight_probe()
208 return -ENXIO; in pm860x_backlight_probe()
210 data->reg_current = res->start; in pm860x_backlight_probe()
213 sprintf(name, "backlight-%d", pdev->id); in pm860x_backlight_probe()
214 data->port = pdev->id; in pm860x_backlight_probe()
215 data->chip = chip; in pm860x_backlight_probe()
216 data->i2c = (chip->id == CHIP_PM8606) ? chip->client : chip->companion; in pm860x_backlight_probe()
217 data->current_brightness = MAX_BRIGHTNESS; in pm860x_backlight_probe()
220 data->pwm = pdata->pwm; in pm860x_backlight_probe()
221 data->iset = pdata->iset; in pm860x_backlight_probe()
228 bl = devm_backlight_device_register(&pdev->dev, name, &pdev->dev, data, in pm860x_backlight_probe()
231 dev_err(&pdev->dev, "failed to register backlight\n"); in pm860x_backlight_probe()
234 bl->props.brightness = MAX_BRIGHTNESS; in pm860x_backlight_probe()
238 /* read current backlight */ in pm860x_backlight_probe()
249 .name = "88pm860x-backlight",
256 MODULE_DESCRIPTION("Backlight Driver for Marvell Semiconductor 88PM8606");
259 MODULE_ALIAS("platform:88pm860x-backlight");