diff options
| author | Shirish S <s.shirish@samsung.com> | 2014-04-03 19:11:02 +0400 | 
|---|---|---|
| committer | Inki Dae <daeinki@gmail.com> | 2014-06-01 21:07:15 +0400 | 
| commit | 6a296e20499f8aa15d4939bf3d4c13dbf81c948c (patch) | |
| tree | 403cb791a1f42c1d17b237e012e20ad537a70c2a | |
| parent | 85a64f7cc95bef1941d923cf6263460638d6e2ab (diff) | |
| download | linux-6a296e20499f8aa15d4939bf3d4c13dbf81c948c.tar.xz | |
drm/exynos: add hdmiphy power on/off sequence
This patch implements the power on/off sequence
of HDMI PHY in exynos5420 and exynos5250 as provided
by the hardware team.
This has been verified for mulitple iterations of
S2R.
Signed-off-by: Shirish S <s.shirish@samsung.com>
Signed-off-by: Rahul Sharma <Rahul.Sharma@samsung.com>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
| -rw-r--r-- | drivers/gpu/drm/exynos/exynos_hdmi.c | 40 | ||||
| -rw-r--r-- | drivers/gpu/drm/exynos/regs-hdmi.h | 7 | 
2 files changed, 40 insertions, 7 deletions
diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c index e05c86af9c35..d0f4f5d5a9f9 100644 --- a/drivers/gpu/drm/exynos/exynos_hdmi.c +++ b/drivers/gpu/drm/exynos/exynos_hdmi.c @@ -1683,16 +1683,44 @@ static void hdmiphy_conf_reset(struct hdmi_context *hdata)  static void hdmiphy_poweron(struct hdmi_context *hdata)  { -	if (hdata->type == HDMI_TYPE14) -		hdmi_reg_writemask(hdata, HDMI_PHY_CON_0, 0, -			HDMI_PHY_POWER_OFF_EN); +	if (hdata->type != HDMI_TYPE14) +		return; + +	DRM_DEBUG_KMS("\n"); + +	/* For PHY Mode Setting */ +	hdmiphy_reg_writeb(hdata, HDMIPHY_MODE_SET_DONE, +				HDMI_PHY_ENABLE_MODE_SET); +	/* Phy Power On */ +	hdmiphy_reg_writeb(hdata, HDMIPHY_POWER, +				HDMI_PHY_POWER_ON); +	/* For PHY Mode Setting */ +	hdmiphy_reg_writeb(hdata, HDMIPHY_MODE_SET_DONE, +				HDMI_PHY_DISABLE_MODE_SET); +	/* PHY SW Reset */ +	hdmiphy_conf_reset(hdata);  }  static void hdmiphy_poweroff(struct hdmi_context *hdata)  { -	if (hdata->type == HDMI_TYPE14) -		hdmi_reg_writemask(hdata, HDMI_PHY_CON_0, ~0, -			HDMI_PHY_POWER_OFF_EN); +	if (hdata->type != HDMI_TYPE14) +		return; + +	DRM_DEBUG_KMS("\n"); + +	/* PHY SW Reset */ +	hdmiphy_conf_reset(hdata); +	/* For PHY Mode Setting */ +	hdmiphy_reg_writeb(hdata, HDMIPHY_MODE_SET_DONE, +				HDMI_PHY_ENABLE_MODE_SET); + +	/* PHY Power Off */ +	hdmiphy_reg_writeb(hdata, HDMIPHY_POWER, +				HDMI_PHY_POWER_OFF); + +	/* For PHY Mode Setting */ +	hdmiphy_reg_writeb(hdata, HDMIPHY_MODE_SET_DONE, +				HDMI_PHY_DISABLE_MODE_SET);  }  static void hdmiphy_conf_apply(struct hdmi_context *hdata) diff --git a/drivers/gpu/drm/exynos/regs-hdmi.h b/drivers/gpu/drm/exynos/regs-hdmi.h index 6d846b979045..3f35ac6d8a47 100644 --- a/drivers/gpu/drm/exynos/regs-hdmi.h +++ b/drivers/gpu/drm/exynos/regs-hdmi.h @@ -579,7 +579,12 @@  #define HDMI_TG_3D			HDMI_TG_BASE(0x00F0)  /* HDMI PHY Registers Offsets*/ -#define HDMIPHY_MODE_SET_DONE		(0x7C >> 2) +#define HDMIPHY_POWER		(0x74 >> 2) +#define HDMIPHY_MODE_SET_DONE		(0x7c >> 2) + +/* HDMI PHY Values */ +#define HDMI_PHY_POWER_ON              0x80 +#define HDMI_PHY_POWER_OFF             0xff  /* HDMI PHY Values */  #define HDMI_PHY_DISABLE_MODE_SET	0x80  | 
