Lines Matching +full:default +full:- +full:brightness
1 // SPDX-License-Identifier: GPL-2.0-or-later
90 /* I2C register #0 - Device enable */ in mp3309c_enable_device()
91 ret = regmap_update_bits(chip->regmap, REG_I2C_0, REG_I2C_0_EN, in mp3309c_enable_device()
97 * I2C register #1 - Set working mode: in mp3309c_enable_device()
98 * - set one of the two dimming mode: in mp3309c_enable_device()
99 * - PWM dimming using an external PWM dimming signal in mp3309c_enable_device()
100 * - analog dimming using I2C commands in mp3309c_enable_device()
101 * - enable/disable synchronous mode in mp3309c_enable_device()
102 * - set overvoltage protection (OVP) in mp3309c_enable_device()
105 if (chip->pdata->dimming_mode == DIMMING_PWM) in mp3309c_enable_device()
107 if (chip->pdata->sync_mode) in mp3309c_enable_device()
109 reg_val |= chip->pdata->over_voltage_protection; in mp3309c_enable_device()
110 ret = regmap_write(chip->regmap, REG_I2C_1, reg_val); in mp3309c_enable_device()
120 int brightness = backlight_get_brightness(bl); in mp3309c_bl_update_status() local
125 if (chip->pdata->dimming_mode == DIMMING_PWM) { in mp3309c_bl_update_status()
129 pwm_get_state(chip->pwmd, &pwmstate); in mp3309c_bl_update_status()
131 chip->pdata->levels[brightness], in mp3309c_bl_update_status()
132 chip->pdata->levels[chip->pdata->max_brightness]); in mp3309c_bl_update_status()
134 ret = pwm_apply_state(chip->pwmd, &pwmstate); in mp3309c_bl_update_status()
138 switch (chip->pdata->status) { in mp3309c_bl_update_status()
147 if (brightness > 0) { in mp3309c_bl_update_status()
150 chip->pdata->status = BACKLIGHT_ON; in mp3309c_bl_update_status()
152 chip->pdata->status = BACKLIGHT_OFF; in mp3309c_bl_update_status()
156 if (brightness == 0) in mp3309c_bl_update_status()
157 chip->pdata->status = BACKLIGHT_OFF; in mp3309c_bl_update_status()
164 * The first time, before setting brightness, we must enable the in mp3309c_bl_update_status()
167 if (chip->pdata->status == FIRST_POWER_ON) in mp3309c_bl_update_status()
176 * +--+--+--+--+--+--+--+--+ in mp3309c_bl_update_status()
178 * +--+--+--+--+--+--+--+--+ in mp3309c_bl_update_status()
180 analog_val = brightness; in mp3309c_bl_update_status()
183 bits_val += ((analog_val >> i) & 0x01) << (6 - i); in mp3309c_bl_update_status()
184 ret = regmap_update_bits(chip->regmap, REG_I2C_0, in mp3309c_bl_update_status()
189 if (brightness > 0) in mp3309c_bl_update_status()
190 chip->pdata->status = BACKLIGHT_ON; in mp3309c_bl_update_status()
192 chip->pdata->status = BACKLIGHT_OFF; in mp3309c_bl_update_status()
205 struct device_node *node = chip->dev->of_node; in pm3309c_parse_dt_node()
213 dev_err(chip->dev, "failed to get DT node\n"); in pm3309c_parse_dt_node()
214 return -ENODEV; in pm3309c_parse_dt_node()
220 * - PWM mode in pm3309c_parse_dt_node()
221 * - Analog by I2C control mode (default) in pm3309c_parse_dt_node()
223 * I2C control mode is assumed as default but, if the pwms property is in pm3309c_parse_dt_node()
226 pdata->dimming_mode = DIMMING_ANALOG_I2C; in pm3309c_parse_dt_node()
229 chip->pwmd = devm_pwm_get(chip->dev, NULL); in pm3309c_parse_dt_node()
230 if (IS_ERR(chip->pwmd)) in pm3309c_parse_dt_node()
231 return dev_err_probe(chip->dev, PTR_ERR(chip->pwmd), in pm3309c_parse_dt_node()
233 pdata->dimming_mode = DIMMING_PWM; in pm3309c_parse_dt_node()
234 pwm_apply_args(chip->pwmd); in pm3309c_parse_dt_node()
242 if (pdata->dimming_mode == DIMMING_ANALOG_I2C) { in pm3309c_parse_dt_node()
244 * Analog (by I2C commands) control mode: fixed 0..31 brightness in pm3309c_parse_dt_node()
250 chip->enable_gpio = devm_gpiod_get(chip->dev, "enable", in pm3309c_parse_dt_node()
252 if (IS_ERR(chip->enable_gpio)) in pm3309c_parse_dt_node()
253 return dev_err_probe(chip->dev, in pm3309c_parse_dt_node()
254 PTR_ERR(chip->enable_gpio), in pm3309c_parse_dt_node()
258 * PWM control mode: check for brightness level in DT in pm3309c_parse_dt_node()
260 prop_levels = of_find_property(node, "brightness-levels", in pm3309c_parse_dt_node()
263 /* Read brightness levels from DT */ in pm3309c_parse_dt_node()
266 return -EINVAL; in pm3309c_parse_dt_node()
268 /* Use default brightness levels */ in pm3309c_parse_dt_node()
273 /* Fill brightness levels array */ in pm3309c_parse_dt_node()
274 pdata->levels = devm_kcalloc(chip->dev, num_levels, in pm3309c_parse_dt_node()
275 sizeof(*pdata->levels), GFP_KERNEL); in pm3309c_parse_dt_node()
276 if (!pdata->levels) in pm3309c_parse_dt_node()
277 return -ENOMEM; in pm3309c_parse_dt_node()
279 ret = of_property_read_u32_array(node, "brightness-levels", in pm3309c_parse_dt_node()
280 pdata->levels, in pm3309c_parse_dt_node()
286 pdata->levels[i] = i; in pm3309c_parse_dt_node()
289 pdata->max_brightness = num_levels - 1; in pm3309c_parse_dt_node()
291 ret = of_property_read_u32(node, "default-brightness", in pm3309c_parse_dt_node()
292 &pdata->default_brightness); in pm3309c_parse_dt_node()
294 pdata->default_brightness = pdata->max_brightness; in pm3309c_parse_dt_node()
295 if (pdata->default_brightness > pdata->max_brightness) { in pm3309c_parse_dt_node()
296 dev_err(chip->dev, in pm3309c_parse_dt_node()
297 "default brightness exceeds max brightness\n"); in pm3309c_parse_dt_node()
298 pdata->default_brightness = pdata->max_brightness; in pm3309c_parse_dt_node()
302 * Over-voltage protection (OVP) in pm3309c_parse_dt_node()
306 * - 13.5V in pm3309c_parse_dt_node()
307 * - 24V in pm3309c_parse_dt_node()
308 * - 35.5V (hardware default setting) in pm3309c_parse_dt_node()
310 * If missing, the default value for OVP is 35.5V in pm3309c_parse_dt_node()
312 pdata->over_voltage_protection = REG_I2C_1_OVP1; in pm3309c_parse_dt_node()
313 if (!of_property_read_u32(node, "mps,overvoltage-protection-microvolt", in pm3309c_parse_dt_node()
317 pdata->over_voltage_protection = 0x00; in pm3309c_parse_dt_node()
320 pdata->over_voltage_protection = REG_I2C_1_OVP0; in pm3309c_parse_dt_node()
323 pdata->over_voltage_protection = REG_I2C_1_OVP1; in pm3309c_parse_dt_node()
325 default: in pm3309c_parse_dt_node()
326 return -EINVAL; in pm3309c_parse_dt_node()
330 /* Synchronous (default) and non-synchronous mode */ in pm3309c_parse_dt_node()
331 pdata->sync_mode = true; in pm3309c_parse_dt_node()
332 if (of_property_read_bool(node, "mps,no-sync-mode")) in pm3309c_parse_dt_node()
333 pdata->sync_mode = false; in pm3309c_parse_dt_node()
340 struct mp3309c_platform_data *pdata = dev_get_platdata(&client->dev); in mp3309c_probe()
346 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { in mp3309c_probe()
347 dev_err(&client->dev, "failed to check i2c functionality\n"); in mp3309c_probe()
348 return -EOPNOTSUPP; in mp3309c_probe()
351 chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL); in mp3309c_probe()
353 return -ENOMEM; in mp3309c_probe()
355 chip->dev = &client->dev; in mp3309c_probe()
357 chip->regmap = devm_regmap_init_i2c(client, &mp3309c_regmap); in mp3309c_probe()
358 if (IS_ERR(chip->regmap)) in mp3309c_probe()
359 return dev_err_probe(&client->dev, PTR_ERR(chip->regmap), in mp3309c_probe()
365 pdata = devm_kzalloc(chip->dev, sizeof(*pdata), GFP_KERNEL); in mp3309c_probe()
367 return -ENOMEM; in mp3309c_probe()
373 chip->pdata = pdata; in mp3309c_probe()
376 props.brightness = pdata->default_brightness; in mp3309c_probe()
377 props.max_brightness = pdata->max_brightness; in mp3309c_probe()
382 chip->bl = devm_backlight_device_register(chip->dev, "mp3309c", in mp3309c_probe()
383 chip->dev, chip, in mp3309c_probe()
385 if (IS_ERR(chip->bl)) in mp3309c_probe()
386 return dev_err_probe(chip->dev, PTR_ERR(chip->bl), in mp3309c_probe()
390 if (chip->pdata->dimming_mode == DIMMING_PWM) { in mp3309c_probe()
391 pwm_init_state(chip->pwmd, &pwmstate); in mp3309c_probe()
393 chip->pdata->default_brightness, in mp3309c_probe()
394 chip->pdata->max_brightness); in mp3309c_probe()
396 ret = pwm_apply_state(chip->pwmd, &pwmstate); in mp3309c_probe()
398 return dev_err_probe(chip->dev, ret, in mp3309c_probe()
402 chip->pdata->status = FIRST_POWER_ON; in mp3309c_probe()
403 backlight_update_status(chip->bl); in mp3309c_probe()
411 struct backlight_device *bl = chip->bl; in mp3309c_remove()
413 bl->props.power = FB_BLANK_POWERDOWN; in mp3309c_remove()
414 bl->props.brightness = 0; in mp3309c_remove()
415 backlight_update_status(chip->bl); in mp3309c_remove()