From: Jim Liu <[email protected]>

If MIPI panel has LABC feature it can be enabled by Command line
parameter.

Signed-off-by: Jim Liu <[email protected]>
Signed-off-by: Hitesh K. Patel <[email protected]>
---
 drivers/staging/mrst/drv/mdfld_dsi_output.c |   44 ++++++++++++++++++++++-----
 drivers/staging/mrst/drv/psb_drv.h          |    1 +
 2 files changed, 37 insertions(+), 8 deletions(-)

diff --git a/drivers/staging/mrst/drv/mdfld_dsi_output.c 
b/drivers/staging/mrst/drv/mdfld_dsi_output.c
index 31ab4f6..033be2f 100644
--- a/drivers/staging/mrst/drv/mdfld_dsi_output.c
+++ b/drivers/staging/mrst/drv/mdfld_dsi_output.c
@@ -34,15 +34,17 @@
 
 /* get the CABC LABC from command line. */
 static int CABC_control = 1;
+static int LABC_control = 1;
 
 #ifdef MODULE
 module_param (CABC_control, int, 0644);
+module_param (LABC_control, int, 0644);
 #else
 static int __init parse_CABC_control(char *arg)
 {
        /* CABC control can be passed in as a cmdline parameter */
-       /* to enable this feature add cabc=1 to cmdline */
-       /* to disable this feature add cabc=0 to cmdline */
+       /* to enable this feature add CABC=1 to cmdline */
+       /* to disable this feature add CABC=0 to cmdline */
        if (!arg)
                return -EINVAL;
 
@@ -54,6 +56,23 @@ static int __init parse_CABC_control(char *arg)
        return 0;
 }
 early_param ("CABC", parse_CABC_control);
+
+static int __init parse_LABC_control(char *arg)
+{
+       /* LABC control can be passed in as a cmdline parameter */
+       /* to enable this feature add LABC=1 to cmdline */
+       /* to disable this feature add LABC=0 to cmdline */
+       if (!arg)
+               return -EINVAL;
+
+       if (!strcasecmp(arg, "0"))
+               LABC_control = 0;
+       else if (!strcasecmp (arg, "1"))
+               LABC_control = 1;
+
+       return 0;
+}
+early_param ("LABC", parse_LABC_control);
 #endif
 
 /**
@@ -251,7 +270,8 @@ void mdfld_dsi_gen_fifo_ready (struct drm_device *dev, u32 
gen_fifo_stat_reg, u3
  */
 void mdfld_dsi_brightness_init (struct mdfld_dsi_config * dsi_config, int pipe)
 {
-       struct drm_device * dev;
+       struct drm_device * dev = dsi_config->dev;
+       DRM_DRIVER_PRIVATE_T *dev_priv = dev->dev_private;
        u32 hs_gen_ctrl_reg = MIPIA_HS_GEN_CTRL_REG;
        u32 gen_fifo_stat_reg = MIPIA_GEN_FIFO_STAT_REG;
        u32 gen_ctrl_val = 0;
@@ -264,7 +284,6 @@ void mdfld_dsi_brightness_init (struct mdfld_dsi_config * 
dsi_config, int pipe)
        
        PSB_DEBUG_ENTRY("pipe = %d.  \n", pipe);
 
-       dev = dsi_config->dev;
        dcsChannelNumber = dsi_config->channel_num;
 
        if (pipe == 2) {
@@ -302,9 +321,18 @@ void mdfld_dsi_brightness_init (struct mdfld_dsi_config * 
dsi_config, int pipe)
        mdfld_dsi_gen_fifo_ready (dev, gen_fifo_stat_reg, HS_CTRL_FIFO_EMPTY | 
HS_DATA_FIFO_EMPTY);
        mdfld_dsi_write_gamma_setting (dsi_config, pipe);
 
-       /* Enable LABC */
+       /* Enable backlight or/and LABC */
        mdfld_dsi_gen_fifo_ready (dev, gen_fifo_stat_reg, HS_CTRL_FIFO_EMPTY | 
HS_DATA_FIFO_EMPTY);
-       gen_ctrl_val = BRIGHT_CNTL_BLOCK_ON | AMBIENT_LIGHT_SENSE_ON | 
DISPLAY_DIMMING_ON| BACKLIGHT_ON | DISPLAY_BRIGHTNESS_AUTO | GAMMA_AUTO;
+       gen_ctrl_val = BRIGHT_CNTL_BLOCK_ON | DISPLAY_DIMMING_ON| BACKLIGHT_ON;
+
+       if (LABC_control == 1 || CABC_control == 1)
+               gen_ctrl_val |= DISPLAY_DIMMING_ON| DISPLAY_BRIGHTNESS_AUTO | 
GAMMA_AUTO;
+
+       if (LABC_control == 1)
+               gen_ctrl_val |= AMBIENT_LIGHT_SENSE_ON;
+
+       dev_priv->mipi_ctrl_display = gen_ctrl_val;
+
        gen_ctrl_val <<= MCS_PARAMETER_POS;
        gen_ctrl_val |= write_ctrl_display << MCS_COMMANDS_POS;
        gen_ctrl_val |= dcsChannelNumber << DCS_CHANNEL_NUMBER_POS;
@@ -355,13 +383,13 @@ void mdfld_dsi_brightness_control (struct drm_device 
*dev, int pipe, int level)
        mdfld_dsi_gen_fifo_ready (dev, gen_fifo_stat_reg, HS_CTRL_FIFO_EMPTY | 
HS_DATA_FIFO_EMPTY);
        REG_WRITE(hs_gen_ctrl_reg, gen_ctrl_val);
 
-       /* Enable LABC */
+       /* Enable backlight control */
        mdfld_dsi_gen_fifo_ready (dev, gen_fifo_stat_reg, HS_CTRL_FIFO_EMPTY | 
HS_DATA_FIFO_EMPTY);
 
        if (level == 0)
                gen_ctrl_val = 0;
        else 
-               gen_ctrl_val = BRIGHT_CNTL_BLOCK_ON | AMBIENT_LIGHT_SENSE_ON | 
DISPLAY_DIMMING_ON| BACKLIGHT_ON | DISPLAY_BRIGHTNESS_AUTO | GAMMA_AUTO;
+               gen_ctrl_val = dev_priv->mipi_ctrl_display;
 
        gen_ctrl_val <<= MCS_PARAMETER_POS;
        gen_ctrl_val |= write_ctrl_display << MCS_COMMANDS_POS;
diff --git a/drivers/staging/mrst/drv/psb_drv.h 
b/drivers/staging/mrst/drv/psb_drv.h
index 72aec16..44d2cee 100644
--- a/drivers/staging/mrst/drv/psb_drv.h
+++ b/drivers/staging/mrst/drv/psb_drv.h
@@ -585,6 +585,7 @@ struct drm_psb_private {
        bool dual_mipi;
        uint32_t ksel;
        uint32_t mipi_lane_config;
+       uint32_t mipi_ctrl_display;
        /*
         *MRST DSI info
         */
-- 
1.7.1

_______________________________________________
MeeGo-kernel mailing list
[email protected]
http://lists.meego.com/listinfo/meego-kernel

Reply via email to