diff options
author | Masashi Kimoto <Masashi_Kimoto@hq.scei.sony.co.jp> | 2007-06-15 17:19:10 -0400 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2007-06-28 05:16:35 -0400 |
commit | dc23fba7063867ed745cb6f0bd27a0dc5f558dbc (patch) | |
tree | eea65fea0771fca9cfb7f904d10e8e1fa2fb2a8c | |
parent | 670ad354cb6d6d0f5c3fb17e9f1fb67fb32e02e6 (diff) |
[POWERPC] PS3: Add support for HDMI RGB Full Range mode
Add support for HDMI RGB Full Range mode, which is available on system
software 1.80 or newer.
CC: Masashi Kimoto <Masashi_Kimoto@hq.scei.sony.co.jp>
Signed-off-by: Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>
Signed-off-by: Geoff Levand <geoffrey.levand@am.sony.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
-rw-r--r-- | drivers/ps3/ps3av_cmd.c | 16 | ||||
-rw-r--r-- | include/asm-powerpc/ps3av.h | 12 |
2 files changed, 25 insertions, 3 deletions
diff --git a/drivers/ps3/ps3av_cmd.c b/drivers/ps3/ps3av_cmd.c index 0145ea173c42..7c4fb264dda2 100644 --- a/drivers/ps3/ps3av_cmd.c +++ b/drivers/ps3/ps3av_cmd.c | |||
@@ -143,6 +143,14 @@ static u32 ps3av_vid_video2av(int vid) | |||
143 | return PS3AV_CMD_AV_VID_480P; | 143 | return PS3AV_CMD_AV_VID_480P; |
144 | } | 144 | } |
145 | 145 | ||
146 | static int ps3av_hdmi_range(void) | ||
147 | { | ||
148 | if (ps3_compare_firmware_version(1, 8, 0) < 0) | ||
149 | return 0; | ||
150 | else | ||
151 | return 1; /* supported */ | ||
152 | } | ||
153 | |||
146 | int ps3av_cmd_init(void) | 154 | int ps3av_cmd_init(void) |
147 | { | 155 | { |
148 | int res; | 156 | int res; |
@@ -350,6 +358,10 @@ u32 ps3av_cmd_set_av_video_cs(void *p, u32 avport, int video_vid, int cs_out, | |||
350 | /* should be same as video_mode.video_cs_out */ | 358 | /* should be same as video_mode.video_cs_out */ |
351 | av_video_cs->av_cs_in = ps3av_cs_video2av(PS3AV_CMD_VIDEO_CS_RGB_8); | 359 | av_video_cs->av_cs_in = ps3av_cs_video2av(PS3AV_CMD_VIDEO_CS_RGB_8); |
352 | av_video_cs->bitlen_out = ps3av_cs_video2av_bitlen(cs_out); | 360 | av_video_cs->bitlen_out = ps3av_cs_video2av_bitlen(cs_out); |
361 | if ((id & PS3AV_MODE_WHITE) && ps3av_hdmi_range()) | ||
362 | av_video_cs->super_white = PS3AV_CMD_AV_SUPER_WHITE_ON; | ||
363 | else /* default off */ | ||
364 | av_video_cs->super_white = PS3AV_CMD_AV_SUPER_WHITE_OFF; | ||
353 | av_video_cs->aspect = aspect; | 365 | av_video_cs->aspect = aspect; |
354 | if (id & PS3AV_MODE_DITHER) { | 366 | if (id & PS3AV_MODE_DITHER) { |
355 | av_video_cs->dither = PS3AV_CMD_AV_DITHER_ON | 367 | av_video_cs->dither = PS3AV_CMD_AV_DITHER_ON |
@@ -392,6 +404,10 @@ u32 ps3av_cmd_set_video_mode(void *p, u32 head, int video_vid, int video_fmt, | |||
392 | video_mode->pitch = video_mode->width * 4; /* line_length */ | 404 | video_mode->pitch = video_mode->width * 4; /* line_length */ |
393 | video_mode->video_out_format = PS3AV_CMD_VIDEO_OUT_FORMAT_RGB_12BIT; | 405 | video_mode->video_out_format = PS3AV_CMD_VIDEO_OUT_FORMAT_RGB_12BIT; |
394 | video_mode->video_format = ps3av_video_fmt_table[video_fmt].format; | 406 | video_mode->video_format = ps3av_video_fmt_table[video_fmt].format; |
407 | if ((id & PS3AV_MODE_COLOR) && ps3av_hdmi_range()) | ||
408 | video_mode->video_cl_cnv = PS3AV_CMD_VIDEO_CL_CNV_DISABLE_LUT; | ||
409 | else /* default enable */ | ||
410 | video_mode->video_cl_cnv = PS3AV_CMD_VIDEO_CL_CNV_ENABLE_LUT; | ||
395 | video_mode->video_order = ps3av_video_fmt_table[video_fmt].order; | 411 | video_mode->video_order = ps3av_video_fmt_table[video_fmt].order; |
396 | 412 | ||
397 | pr_debug("%s: video_mode:vid:%x width:%d height:%d pitch:%d out_format:%d format:%x order:%x\n", | 413 | pr_debug("%s: video_mode:vid:%x width:%d height:%d pitch:%d out_format:%d format:%x order:%x\n", |
diff --git a/include/asm-powerpc/ps3av.h b/include/asm-powerpc/ps3av.h index 9efc40f1c778..7f5948efca9b 100644 --- a/include/asm-powerpc/ps3av.h +++ b/include/asm-powerpc/ps3av.h | |||
@@ -159,6 +159,9 @@ | |||
159 | #define PS3AV_CMD_VIDEO_FMT_X8R8G8B8 0x0000 | 159 | #define PS3AV_CMD_VIDEO_FMT_X8R8G8B8 0x0000 |
160 | /* video_out_format */ | 160 | /* video_out_format */ |
161 | #define PS3AV_CMD_VIDEO_OUT_FORMAT_RGB_12BIT 0x0000 | 161 | #define PS3AV_CMD_VIDEO_OUT_FORMAT_RGB_12BIT 0x0000 |
162 | /* video_cl_cnv */ | ||
163 | #define PS3AV_CMD_VIDEO_CL_CNV_ENABLE_LUT 0x0000 | ||
164 | #define PS3AV_CMD_VIDEO_CL_CNV_DISABLE_LUT 0x0010 | ||
162 | /* video_sync */ | 165 | /* video_sync */ |
163 | #define PS3AV_CMD_VIDEO_SYNC_VSYNC 0x0001 | 166 | #define PS3AV_CMD_VIDEO_SYNC_VSYNC 0x0001 |
164 | #define PS3AV_CMD_VIDEO_SYNC_CSYNC 0x0004 | 167 | #define PS3AV_CMD_VIDEO_SYNC_CSYNC 0x0004 |
@@ -311,6 +314,8 @@ | |||
311 | #define PS3AV_MODE_MASK 0x000F | 314 | #define PS3AV_MODE_MASK 0x000F |
312 | #define PS3AV_MODE_HDCP_OFF 0x1000 /* Retail PS3 product doesn't support this */ | 315 | #define PS3AV_MODE_HDCP_OFF 0x1000 /* Retail PS3 product doesn't support this */ |
313 | #define PS3AV_MODE_DITHER 0x0800 | 316 | #define PS3AV_MODE_DITHER 0x0800 |
317 | #define PS3AV_MODE_COLOR 0x0400 | ||
318 | #define PS3AV_MODE_WHITE 0x0200 | ||
314 | #define PS3AV_MODE_FULL 0x0080 | 319 | #define PS3AV_MODE_FULL 0x0080 |
315 | #define PS3AV_MODE_DVI 0x0040 | 320 | #define PS3AV_MODE_DVI 0x0040 |
316 | #define PS3AV_MODE_RGB 0x0020 | 321 | #define PS3AV_MODE_RGB 0x0020 |
@@ -529,9 +534,9 @@ struct ps3av_pkt_video_mode { | |||
529 | u32 video_out_format; /* in: out format */ | 534 | u32 video_out_format; /* in: out format */ |
530 | u32 video_format; /* in: input frame buffer format */ | 535 | u32 video_format; /* in: input frame buffer format */ |
531 | u8 reserved3; | 536 | u8 reserved3; |
532 | u8 reserved4; | 537 | u8 video_cl_cnv; /* in: color conversion */ |
533 | u16 video_order; /* in: input RGB order */ | 538 | u16 video_order; /* in: input RGB order */ |
534 | u32 reserved5; | 539 | u32 reserved4; |
535 | }; | 540 | }; |
536 | 541 | ||
537 | /* video: format */ | 542 | /* video: format */ |
@@ -539,7 +544,8 @@ struct ps3av_pkt_video_format { | |||
539 | struct ps3av_send_hdr send_hdr; | 544 | struct ps3av_send_hdr send_hdr; |
540 | u32 video_head; /* in: head */ | 545 | u32 video_head; /* in: head */ |
541 | u32 video_format; /* in: frame buffer format */ | 546 | u32 video_format; /* in: frame buffer format */ |
542 | u16 reserved; | 547 | u8 reserved; |
548 | u8 video_cl_cnv; /* in: color conversion */ | ||
543 | u16 video_order; /* in: input RGB order */ | 549 | u16 video_order; /* in: input RGB order */ |
544 | }; | 550 | }; |
545 | 551 | ||