drm/i2c: tda998x: power down pre-filter and color conversion
authorRussell King <rmk+kernel@armlinux.org.uk>
Thu, 3 Nov 2016 15:19:06 +0000 (15:19 +0000)
committerRussell King <rmk+kernel@armlinux.org.uk>
Fri, 18 Nov 2016 00:00:40 +0000 (00:00 +0000)
Disabling the pre-filter block of the TDA998x saves 40mW and the colour
conversion block saves 15mW.  As we always disable these two blocks, we
can power these sections of the chip down to save 55mW of unnecessary
power consumption.

Tested-by: Brian Starkey <brian.starkey@arm.com>
Reviewed-by: Brian Starkey <brian.starkey@arm.com>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
drivers/gpu/drm/i2c/tda998x_drv.c

index ffd87edde840ee707d9d92aeaf94d4e639e28e93..5a97444798d351cba14a4f92b8cb52017b92a2d3 100644 (file)
@@ -107,6 +107,8 @@ struct tda998x_priv {
 # define I2C_MASTER_DIS_FILT      (1 << 1)
 # define I2C_MASTER_APP_STRT_LAT  (1 << 2)
 #define REG_FEAT_POWERDOWN        REG(0x00, 0x0e)     /* read/write */
+# define FEAT_POWERDOWN_PREFILT   BIT(0)
+# define FEAT_POWERDOWN_CSC       BIT(1)
 # define FEAT_POWERDOWN_SPDIF     (1 << 3)
 #define REG_INT_FLAGS_0           REG(0x00, 0x0f)     /* read/write */
 #define REG_INT_FLAGS_1           REG(0x00, 0x10)     /* read/write */
@@ -1284,6 +1286,7 @@ tda998x_encoder_mode_set(struct drm_encoder *encoder,
        /* no pre-filter or interpolator: */
        reg_write(priv, REG_HVF_CNTRL_0, HVF_CNTRL_0_PREFIL(0) |
                        HVF_CNTRL_0_INTPOL(0));
+       reg_set(priv, REG_FEAT_POWERDOWN, FEAT_POWERDOWN_PREFILT);
        reg_write(priv, REG_VIP_CNTRL_5, VIP_CNTRL_5_SP_CNT(0));
        reg_write(priv, REG_VIP_CNTRL_4, VIP_CNTRL_4_BLANKIT(0) |
                        VIP_CNTRL_4_BLC(0));
@@ -1306,6 +1309,7 @@ tda998x_encoder_mode_set(struct drm_encoder *encoder,
        /* set color matrix bypass flag: */
        reg_write(priv, REG_MAT_CONTRL, MAT_CONTRL_MAT_BP |
                                MAT_CONTRL_MAT_SC(1));
+       reg_set(priv, REG_FEAT_POWERDOWN, FEAT_POWERDOWN_CSC);
 
        /* set BIAS tmds value: */
        reg_write(priv, REG_ANA_GENERAL, 0x09);