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.
-* mode : Brightness control mode. PWM or register based.
 * device_control : Value of DEVICE CONTROL register.
 * initial_brightness : Initial value of backlight brightness.
 * period_ns : Platform specific PWM period value. unit is nano.
 
 static struct lp855x_platform_data lp8552_pdata = {
        .name = "lcd-bl",
-       .mode = REGISTER_BASED,
        .device_control = I2C_CONFIG(LP8552),
        .initial_brightness = INITIAL_BRT,
        .load_new_rom_data = 1,
 example 2) lp8556 platform data : pwm input mode with default rom data
 
 static struct lp855x_platform_data lp8556_pdata = {
-       .mode = PWM_BASED,
        .device_control = PWM_CONFIG(LP8556),
        .initial_brightness = INITIAL_BRT,
        .period_ns = 1000000,
 
 #define DEFAULT_BL_NAME                "lcd-backlight"
 #define MAX_BRIGHTNESS         255
 
+enum lp855x_brightness_ctrl_mode {
+       PWM_BASED = 1,
+       REGISTER_BASED,
+};
+
 struct lp855x;
 
 /*
 struct lp855x {
        const char *chipname;
        enum lp855x_chip_id chip_id;
+       enum lp855x_brightness_ctrl_mode mode;
        struct lp855x_device_config *cfg;
        struct i2c_client *client;
        struct backlight_device *bl;
 static int lp855x_bl_update_status(struct backlight_device *bl)
 {
        struct lp855x *lp = bl_get_data(bl);
-       enum lp855x_brightness_ctrl_mode mode = lp->pdata->mode;
 
        if (bl->props.state & BL_CORE_SUSPENDED)
                bl->props.brightness = 0;
 
-       if (mode == PWM_BASED) {
+       if (lp->mode == PWM_BASED) {
                int br = bl->props.brightness;
                int max_br = bl->props.max_brightness;
 
                lp855x_pwm_ctrl(lp, br, max_br);
 
-       } else if (mode == REGISTER_BASED) {
+       } else if (lp->mode == REGISTER_BASED) {
                u8 val = bl->props.brightness;
                lp855x_write_byte(lp, lp->cfg->reg_brightness, val);
        }
                                     struct device_attribute *attr, char *buf)
 {
        struct lp855x *lp = dev_get_drvdata(dev);
-       enum lp855x_brightness_ctrl_mode mode = lp->pdata->mode;
        char *strmode = NULL;
 
-       if (mode == PWM_BASED)
+       if (lp->mode == PWM_BASED)
                strmode = "pwm based";
-       else if (mode == REGISTER_BASED)
+       else if (lp->mode == REGISTER_BASED)
                strmode = "register based";
 
        return scnprintf(buf, PAGE_SIZE, "%s\n", strmode);
        if (!lp)
                return -ENOMEM;
 
+       if (pdata->period_ns > 0)
+               lp->mode = PWM_BASED;
+       else
+               lp->mode = REGISTER_BASED;
+
        lp->client = cl;
        lp->dev = &cl->dev;
        lp->pdata = pdata;
 
        LP8557,
 };
 
-enum lp855x_brightness_ctrl_mode {
-       PWM_BASED = 1,
-       REGISTER_BASED,
-};
-
 enum lp8550_brighntess_source {
        LP8550_PWM_ONLY,
        LP8550_I2C_ONLY = 2,
 /**
  * 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.
  */
 struct lp855x_platform_data {
        const char *name;
-       enum lp855x_brightness_ctrl_mode mode;
        u8 device_control;
        int initial_brightness;
        unsigned int period_ns;