Commit 0b818573 authored by Kim, Milo's avatar Kim, Milo Committed by Linus Torvalds

backlight: lp855x: move backlight mode platform data

The brightness of LP855x devices is controlled by I2C register or PWM
input .  This mode was selected through the platform data, but it can be
chosen by the driver internally without platform data configuration.

How to decide the control mode:
  If the PWM period has specific value, the mode is PWM input.
  On the other hand, the mode is register-based.
  This mode selection is done on the _probe().

Move 'mode' from a header file to the driver private data structure,
'lp855 x'.  And correlated code was replaced.
Signed-off-by: default avatarMilo(Woogyom) Kim <milo.kim@ti.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 600ffd33
...@@ -32,7 +32,6 @@ Platform data for lp855x ...@@ -32,7 +32,6 @@ Platform data for lp855x
For supporting platform specific data, the lp855x platform data can be used. For supporting platform specific data, the lp855x platform data can be used.
* name : Backlight driver name. If it is not defined, default name is set. * name : Backlight driver name. If it is not defined, default name is set.
* mode : Brightness control mode. PWM or register based.
* device_control : Value of DEVICE CONTROL register. * device_control : Value of DEVICE CONTROL register.
* initial_brightness : Initial value of backlight brightness. * initial_brightness : Initial value of backlight brightness.
* period_ns : Platform specific PWM period value. unit is nano. * period_ns : Platform specific PWM period value. unit is nano.
...@@ -54,7 +53,6 @@ static struct lp855x_rom_data lp8552_eeprom_arr[] = { ...@@ -54,7 +53,6 @@ static struct lp855x_rom_data lp8552_eeprom_arr[] = {
static struct lp855x_platform_data lp8552_pdata = { static struct lp855x_platform_data lp8552_pdata = {
.name = "lcd-bl", .name = "lcd-bl",
.mode = REGISTER_BASED,
.device_control = I2C_CONFIG(LP8552), .device_control = I2C_CONFIG(LP8552),
.initial_brightness = INITIAL_BRT, .initial_brightness = INITIAL_BRT,
.load_new_rom_data = 1, .load_new_rom_data = 1,
...@@ -65,7 +63,6 @@ static struct lp855x_platform_data lp8552_pdata = { ...@@ -65,7 +63,6 @@ static struct lp855x_platform_data lp8552_pdata = {
example 2) lp8556 platform data : pwm input mode with default rom data example 2) lp8556 platform data : pwm input mode with default rom data
static struct lp855x_platform_data lp8556_pdata = { static struct lp855x_platform_data lp8556_pdata = {
.mode = PWM_BASED,
.device_control = PWM_CONFIG(LP8556), .device_control = PWM_CONFIG(LP8556),
.initial_brightness = INITIAL_BRT, .initial_brightness = INITIAL_BRT,
.period_ns = 1000000, .period_ns = 1000000,
......
...@@ -38,6 +38,11 @@ ...@@ -38,6 +38,11 @@
#define DEFAULT_BL_NAME "lcd-backlight" #define DEFAULT_BL_NAME "lcd-backlight"
#define MAX_BRIGHTNESS 255 #define MAX_BRIGHTNESS 255
enum lp855x_brightness_ctrl_mode {
PWM_BASED = 1,
REGISTER_BASED,
};
struct lp855x; struct lp855x;
/* /*
...@@ -57,6 +62,7 @@ struct lp855x_device_config { ...@@ -57,6 +62,7 @@ struct lp855x_device_config {
struct lp855x { struct lp855x {
const char *chipname; const char *chipname;
enum lp855x_chip_id chip_id; enum lp855x_chip_id chip_id;
enum lp855x_brightness_ctrl_mode mode;
struct lp855x_device_config *cfg; struct lp855x_device_config *cfg;
struct i2c_client *client; struct i2c_client *client;
struct backlight_device *bl; struct backlight_device *bl;
...@@ -238,18 +244,17 @@ static void lp855x_pwm_ctrl(struct lp855x *lp, int br, int max_br) ...@@ -238,18 +244,17 @@ static void lp855x_pwm_ctrl(struct lp855x *lp, int br, int max_br)
static int lp855x_bl_update_status(struct backlight_device *bl) static int lp855x_bl_update_status(struct backlight_device *bl)
{ {
struct lp855x *lp = bl_get_data(bl); struct lp855x *lp = bl_get_data(bl);
enum lp855x_brightness_ctrl_mode mode = lp->pdata->mode;
if (bl->props.state & BL_CORE_SUSPENDED) if (bl->props.state & BL_CORE_SUSPENDED)
bl->props.brightness = 0; bl->props.brightness = 0;
if (mode == PWM_BASED) { if (lp->mode == PWM_BASED) {
int br = bl->props.brightness; int br = bl->props.brightness;
int max_br = bl->props.max_brightness; int max_br = bl->props.max_brightness;
lp855x_pwm_ctrl(lp, br, max_br); lp855x_pwm_ctrl(lp, br, max_br);
} else if (mode == REGISTER_BASED) { } else if (lp->mode == REGISTER_BASED) {
u8 val = bl->props.brightness; u8 val = bl->props.brightness;
lp855x_write_byte(lp, lp->cfg->reg_brightness, val); lp855x_write_byte(lp, lp->cfg->reg_brightness, val);
} }
...@@ -310,12 +315,11 @@ static ssize_t lp855x_get_bl_ctl_mode(struct device *dev, ...@@ -310,12 +315,11 @@ static ssize_t lp855x_get_bl_ctl_mode(struct device *dev,
struct device_attribute *attr, char *buf) struct device_attribute *attr, char *buf)
{ {
struct lp855x *lp = dev_get_drvdata(dev); struct lp855x *lp = dev_get_drvdata(dev);
enum lp855x_brightness_ctrl_mode mode = lp->pdata->mode;
char *strmode = NULL; char *strmode = NULL;
if (mode == PWM_BASED) if (lp->mode == PWM_BASED)
strmode = "pwm based"; strmode = "pwm based";
else if (mode == REGISTER_BASED) else if (lp->mode == REGISTER_BASED)
strmode = "register based"; strmode = "register based";
return scnprintf(buf, PAGE_SIZE, "%s\n", strmode); return scnprintf(buf, PAGE_SIZE, "%s\n", strmode);
...@@ -352,6 +356,11 @@ static int lp855x_probe(struct i2c_client *cl, const struct i2c_device_id *id) ...@@ -352,6 +356,11 @@ static int lp855x_probe(struct i2c_client *cl, const struct i2c_device_id *id)
if (!lp) if (!lp)
return -ENOMEM; return -ENOMEM;
if (pdata->period_ns > 0)
lp->mode = PWM_BASED;
else
lp->mode = REGISTER_BASED;
lp->client = cl; lp->client = cl;
lp->dev = &cl->dev; lp->dev = &cl->dev;
lp->pdata = pdata; lp->pdata = pdata;
......
...@@ -69,11 +69,6 @@ enum lp855x_chip_id { ...@@ -69,11 +69,6 @@ enum lp855x_chip_id {
LP8557, LP8557,
}; };
enum lp855x_brightness_ctrl_mode {
PWM_BASED = 1,
REGISTER_BASED,
};
enum lp8550_brighntess_source { enum lp8550_brighntess_source {
LP8550_PWM_ONLY, LP8550_PWM_ONLY,
LP8550_I2C_ONLY = 2, LP8550_I2C_ONLY = 2,
...@@ -116,7 +111,6 @@ struct lp855x_rom_data { ...@@ -116,7 +111,6 @@ struct lp855x_rom_data {
/** /**
* struct lp855x_platform_data * struct lp855x_platform_data
* @name : Backlight driver name. If it is not defined, default name is set. * @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 * @device_control : value of DEVICE CONTROL register
* @initial_brightness : initial value of backlight brightness * @initial_brightness : initial value of backlight brightness
* @period_ns : platform specific pwm period value. unit is nano. * @period_ns : platform specific pwm period value. unit is nano.
...@@ -129,7 +123,6 @@ struct lp855x_rom_data { ...@@ -129,7 +123,6 @@ struct lp855x_rom_data {
*/ */
struct lp855x_platform_data { struct lp855x_platform_data {
const char *name; const char *name;
enum lp855x_brightness_ctrl_mode mode;
u8 device_control; u8 device_control;
int initial_brightness; int initial_brightness;
unsigned int period_ns; unsigned int period_ns;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment