From 173357f8c467b9d9963769eff1760a5eb21702af Mon Sep 17 00:00:00 2001 From: "Yong-Joon.Park" Date: Thu, 29 Mar 2012 23:52:31 -0700 Subject: [PATCH] gfx: CABC: Setting changes This patch changes PWM frequency to 5KHz for better VR efficiency and other CABC settings for better power savings. Issue: ANDROID-1551 Signed-off-by: Yong-Joon.Park Signed-off-by: Artem Bityutskiy --- drivers/staging/mrst/drv/tc35876x-dsi-lvds.c | 31 +++++++++++++++++++++------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/drivers/staging/mrst/drv/tc35876x-dsi-lvds.c b/drivers/staging/mrst/drv/tc35876x-dsi-lvds.c index b618ff9..744a1f1 100644 --- a/drivers/staging/mrst/drv/tc35876x-dsi-lvds.c +++ b/drivers/staging/mrst/drv/tc35876x-dsi-lvds.c @@ -466,9 +466,9 @@ static void tc35876x_brightness_init(struct drm_device *dev) clkdiv = calc_clkdiv(SYSTEMCLK, PWM_FREQUENCY); - ret = intel_scu_ipc_iowrite8(PWM0CLKDIV1, (clkdiv >> 8) & 0xff); + ret = intel_scu_ipc_iowrite8(PWM0CLKDIV1, 0x00); if (!ret) - ret = intel_scu_ipc_iowrite8(PWM0CLKDIV0, clkdiv & 0xff); + ret = intel_scu_ipc_iowrite8(PWM0CLKDIV0, 0x25); if (ret) dev_err(&dev->pdev->dev, "PWM0CLKDIV set failed\n"); @@ -490,11 +490,7 @@ void tc35876x_brightness_control(struct drm_device *dev, int level) /* PWM duty cycle 0x00...0x63 corresponds to 0...99% */ duty_val = level * 0x63 / MDFLD_DSI_BRIGHTNESS_MAX_LEVEL; - /* I won't pretend to understand this formula. The panel spec is quite - * bad engrish. - */ - panel_duty_val = (2 * level - 100) * 0xA9 / - MDFLD_DSI_BRIGHTNESS_MAX_LEVEL + 0x56; + panel_duty_val = (230 * (level - 100) / 100) + 255; ret = intel_scu_ipc_iowrite8(PWM0DUTYCYCLE, duty_val); if (ret) @@ -571,7 +567,7 @@ void tc35876x_toshiba_bridge_panel_on(struct drm_device *dev) * 255-allow_distort*2 value. */ ret = i2c_smbus_write_byte_data(cmi_lcd_i2c_client, - PANEL_ALLOW_DISTORT, 0x10); + PANEL_ALLOW_DISTORT, 0x32); if (ret < 0) dev_err(&cmi_lcd_i2c_client->dev, "i2c write failed (%d)\n", ret); @@ -586,6 +582,25 @@ void tc35876x_toshiba_bridge_panel_on(struct drm_device *dev) if (ret < 0) dev_err(&cmi_lcd_i2c_client->dev, "i2c write failed (%d)\n", ret); + + /*changing CABC PWM frequency to 5 Khz */ + ret = i2c_smbus_write_byte_data(cmi_lcd_i2c_client, + PANEL_FREQ_DIVIDER_HI, 0xE0); + if (ret < 0) + dev_err(&cmi_lcd_i2c_client->dev, + "i2c write failed (%d)\n", ret); + ret = i2c_smbus_write_byte_data(cmi_lcd_i2c_client, + PANEL_FREQ_DIVIDER_LO, 0x64); + if (ret < 0) + dev_err(&cmi_lcd_i2c_client->dev, + "i2c write failed (%d)\n", ret); + + /*PANEL_MODIFY_RGB to 0x00 to get rid of flicker*/ + ret = i2c_smbus_write_byte_data(cmi_lcd_i2c_client, + PANEL_MODIFY_RGB, 0x00); + if (ret < 0) + dev_err(&cmi_lcd_i2c_client->dev, + "i2c write failed (%d)\n", ret); } if (pdata->gpio_panel_bl_en != -1) -- 2.7.4