ps3: Fix black and white stripes
Subsystems (3)
PATCH 4/12 ps3: Fix black and white stripes
From: Masashi Kimoto <[email protected]>
Fix the black and white stripes issue with WUXGA monitor via HDMI.
It seems that when we use a VESA resolution from boot up, the AV settings driver could not be initialized correctly.
In that case we need a dummy packet before VESA setting.
[Geert] Refactored to reduce code duplication.
Signed-off-by Geert Uytterhoeven <[email protected]>
CC Geoff Levand <[email protected]>
Signed-off-by Antonino Daplas <[email protected]>
---
drivers/ps3/ps3av.c | 58 +++++++++++++++++++++++++++++++++------------------ 1 files changed, 38 insertions(+), 20 deletions(-)
drivers/ps3/ps3av.c +38 -20
@@ -491,10 +491,10 @@ static int ps3av_set_videomode(void)return 0 ; } -static void ps3av_set_videomode_cont (u32 id,u32 old_id) +static void ps3av_set_videomode_packet (u32 id) {struct ps3av_pkt_avb_param avb_param; -int i; +unsigned int i;u32 len =0 , av_video_cs;const struct avset_video_mode *video_mode;int res;
@@ -507,24 +507,6 @@ static void ps3av_set_videomode_cont(u32 ps3av->av_hw_conf.num_of_avmulti; avb_param.num_of_av_audio_pkt =0 ; -/* video signal off */ -ps3av_set_video_disable_sig (); - -/* Retail PS3 product doesn't support this */ -if (id &PS3AV_MODE_HDCP_OFF ) { - res =ps3av_cmd_av_hdmi_mode (PS3AV_CMD_AV_HDMI_HDCP_OFF ); -if (res ==PS3AV_STATUS_UNSUPPORTED_HDMI_MODE ) -dev_dbg (&ps3av->dev->core,"Not supported\n" ); -else if (res) -dev_dbg (&ps3av->dev->core, -"ps3av_cmd_av_hdmi_mode failed\n" ); - }else if (old_id &PS3AV_MODE_HDCP_OFF ) { - res =ps3av_cmd_av_hdmi_mode (PS3AV_CMD_AV_HDMI_MODE_NORMAL ); -if (res <0 && res !=PS3AV_STATUS_UNSUPPORTED_HDMI_MODE ) -dev_dbg (&ps3av->dev->core, -"ps3av_cmd_av_hdmi_mode failed\n" ); - } -/* video_pkt */ for (i =0 ; i < avb_param.num_of_video_pkt; i++) len += ps3av_cmd_set_video_mode(&avb_param.buf[len],
@@ -555,6 +537,42 @@ #endif __func__); else if (res) dev_dbg(&ps3av->dev->core, "ps3av_cmd_avb_param failed\n"); +} + +static void ps3av_set_videomode_cont (u32 id,u32 old_id) +{ +static int vesa =0 ; +int res; + +/* video signal off */ +ps3av_set_video_disable_sig (); + +/* +* AV backend needs non-VESA mode setting at least one time +* when VESA mode is used. +*/ +if (vesa ==0 && (id &PS3AV_MODE_MASK ) >=11 ) { +/* vesa mode */ +ps3av_set_videomode_packet (2 );/* 480P */ + } + vesa =1 ; + +/* Retail PS3 product doesn't support this */ +if (id &PS3AV_MODE_HDCP_OFF ) { + res =ps3av_cmd_av_hdmi_mode (PS3AV_CMD_AV_HDMI_HDCP_OFF ); +if (res ==PS3AV_STATUS_UNSUPPORTED_HDMI_MODE ) +dev_dbg (&ps3av->dev->core,"Not supported\n" ); +else if (res) +dev_dbg (&ps3av->dev->core, +"ps3av_cmd_av_hdmi_mode failed\n" ); + }else if (old_id &PS3AV_MODE_HDCP_OFF ) { + res =ps3av_cmd_av_hdmi_mode (PS3AV_CMD_AV_HDMI_MODE_NORMAL ); +if (res <0 && res !=PS3AV_STATUS_UNSUPPORTED_HDMI_MODE ) +dev_dbg (&ps3av->dev->core, +"ps3av_cmd_av_hdmi_mode failed\n" ); + } + +ps3av_set_videomode_packet (id);msleep (1500 );/* av video mute */
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/