aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMasashi Kimoto <Masashi_Kimoto@hq.scei.sony.co.jp>2007-06-15 17:19:10 -0400
committerPaul Mackerras <paulus@samba.org>2007-06-28 05:16:35 -0400
commitdc23fba7063867ed745cb6f0bd27a0dc5f558dbc (patch)
treeeea65fea0771fca9cfb7f904d10e8e1fa2fb2a8c
parent670ad354cb6d6d0f5c3fb17e9f1fb67fb32e02e6 (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.c16
-rw-r--r--include/asm-powerpc/ps3av.h12
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
146static 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
146int ps3av_cmd_init(void) 154int 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