mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-16 22:06:45 +07:00
8cc9764c9c
The LP855x family devices support the PWM input for the backlight control. Period of the PWM is configurable in the platform side. Platform specific functions are unnecessary anymore because generic PWM functions are used inside the driver. (PWM input mode) To set the brightness, new lp855x_pwm_ctrl() is used. If a PWM device is not allocated, devm_pwm_get() is called. The PWM consumer name is from the chip name such as 'lp8550' and 'lp8556'. To get the brightness value, no additional handling is required. Just the value of 'props.brightness' is returned. If the PWM driver is not ready while initializing the LP855x driver, it's OK. The PWM device can be retrieved later, when the brightness value is changed. Documentation is updated with an example. [akpm@linux-foundation.org: coding-style simplification, per Thierry] Signed-off-by: Milo(Woogyom) Kim <milo.kim@ti.com> Cc: Thierry Reding <thierry.reding@avionic-design.de> Cc: Richard Purdie <rpurdie@rpsys.net> Cc: Bryan Wu <bryan.wu@canonical.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
123 lines
3.2 KiB
C
123 lines
3.2 KiB
C
/*
|
|
* LP855x Backlight Driver
|
|
*
|
|
* Copyright (C) 2011 Texas Instruments
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
*/
|
|
|
|
#ifndef _LP855X_H
|
|
#define _LP855X_H
|
|
|
|
#define BL_CTL_SHFT (0)
|
|
#define BRT_MODE_SHFT (1)
|
|
#define BRT_MODE_MASK (0x06)
|
|
|
|
/* Enable backlight. Only valid when BRT_MODE=10(I2C only) */
|
|
#define ENABLE_BL (1)
|
|
#define DISABLE_BL (0)
|
|
|
|
#define I2C_CONFIG(id) id ## _I2C_CONFIG
|
|
#define PWM_CONFIG(id) id ## _PWM_CONFIG
|
|
|
|
/* DEVICE CONTROL register - LP8550 */
|
|
#define LP8550_PWM_CONFIG (LP8550_PWM_ONLY << BRT_MODE_SHFT)
|
|
#define LP8550_I2C_CONFIG ((ENABLE_BL << BL_CTL_SHFT) | \
|
|
(LP8550_I2C_ONLY << BRT_MODE_SHFT))
|
|
|
|
/* DEVICE CONTROL register - LP8551 */
|
|
#define LP8551_PWM_CONFIG LP8550_PWM_CONFIG
|
|
#define LP8551_I2C_CONFIG LP8550_I2C_CONFIG
|
|
|
|
/* DEVICE CONTROL register - LP8552 */
|
|
#define LP8552_PWM_CONFIG LP8550_PWM_CONFIG
|
|
#define LP8552_I2C_CONFIG LP8550_I2C_CONFIG
|
|
|
|
/* DEVICE CONTROL register - LP8553 */
|
|
#define LP8553_PWM_CONFIG LP8550_PWM_CONFIG
|
|
#define LP8553_I2C_CONFIG LP8550_I2C_CONFIG
|
|
|
|
/* DEVICE CONTROL register - LP8556 */
|
|
#define LP8556_PWM_CONFIG (LP8556_PWM_ONLY << BRT_MODE_SHFT)
|
|
#define LP8556_COMB1_CONFIG (LP8556_COMBINED1 << BRT_MODE_SHFT)
|
|
#define LP8556_I2C_CONFIG ((ENABLE_BL << BL_CTL_SHFT) | \
|
|
(LP8556_I2C_ONLY << BRT_MODE_SHFT))
|
|
#define LP8556_COMB2_CONFIG (LP8556_COMBINED2 << BRT_MODE_SHFT)
|
|
#define LP8556_FAST_CONFIG BIT(7) /* use it if EPROMs should be maintained
|
|
when exiting the low power mode */
|
|
|
|
enum lp855x_chip_id {
|
|
LP8550,
|
|
LP8551,
|
|
LP8552,
|
|
LP8553,
|
|
LP8556,
|
|
};
|
|
|
|
enum lp855x_brightness_ctrl_mode {
|
|
PWM_BASED = 1,
|
|
REGISTER_BASED,
|
|
};
|
|
|
|
enum lp8550_brighntess_source {
|
|
LP8550_PWM_ONLY,
|
|
LP8550_I2C_ONLY = 2,
|
|
};
|
|
|
|
enum lp8551_brighntess_source {
|
|
LP8551_PWM_ONLY = LP8550_PWM_ONLY,
|
|
LP8551_I2C_ONLY = LP8550_I2C_ONLY,
|
|
};
|
|
|
|
enum lp8552_brighntess_source {
|
|
LP8552_PWM_ONLY = LP8550_PWM_ONLY,
|
|
LP8552_I2C_ONLY = LP8550_I2C_ONLY,
|
|
};
|
|
|
|
enum lp8553_brighntess_source {
|
|
LP8553_PWM_ONLY = LP8550_PWM_ONLY,
|
|
LP8553_I2C_ONLY = LP8550_I2C_ONLY,
|
|
};
|
|
|
|
enum lp8556_brightness_source {
|
|
LP8556_PWM_ONLY,
|
|
LP8556_COMBINED1, /* pwm + i2c before the shaper block */
|
|
LP8556_I2C_ONLY,
|
|
LP8556_COMBINED2, /* pwm + i2c after the shaper block */
|
|
};
|
|
|
|
struct lp855x_rom_data {
|
|
u8 addr;
|
|
u8 val;
|
|
};
|
|
|
|
/**
|
|
* struct lp855x_platform_data
|
|
* @name : Backlight driver name. If it is not defined, default name is set.
|
|
* @mode : brightness control by pwm or lp855x register
|
|
* @device_control : value of DEVICE CONTROL register
|
|
* @initial_brightness : initial value of backlight brightness
|
|
* @period_ns : platform specific pwm period value. unit is nano.
|
|
Only valid when mode is PWM_BASED.
|
|
* @load_new_rom_data :
|
|
0 : use default configuration data
|
|
1 : update values of eeprom or eprom registers on loading driver
|
|
* @size_program : total size of lp855x_rom_data
|
|
* @rom_data : list of new eeprom/eprom registers
|
|
*/
|
|
struct lp855x_platform_data {
|
|
char *name;
|
|
enum lp855x_brightness_ctrl_mode mode;
|
|
u8 device_control;
|
|
int initial_brightness;
|
|
unsigned int period_ns;
|
|
u8 load_new_rom_data;
|
|
int size_program;
|
|
struct lp855x_rom_data *rom_data;
|
|
};
|
|
|
|
#endif
|