[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>
This commit is contained in:
parent
670ad354cb
commit
dc23fba706
2 changed files with 25 additions and 3 deletions
|
@ -143,6 +143,14 @@ static u32 ps3av_vid_video2av(int vid)
|
||||||
return PS3AV_CMD_AV_VID_480P;
|
return PS3AV_CMD_AV_VID_480P;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int ps3av_hdmi_range(void)
|
||||||
|
{
|
||||||
|
if (ps3_compare_firmware_version(1, 8, 0) < 0)
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
return 1; /* supported */
|
||||||
|
}
|
||||||
|
|
||||||
int ps3av_cmd_init(void)
|
int ps3av_cmd_init(void)
|
||||||
{
|
{
|
||||||
int res;
|
int res;
|
||||||
|
@ -350,6 +358,10 @@ u32 ps3av_cmd_set_av_video_cs(void *p, u32 avport, int video_vid, int cs_out,
|
||||||
/* should be same as video_mode.video_cs_out */
|
/* should be same as video_mode.video_cs_out */
|
||||||
av_video_cs->av_cs_in = ps3av_cs_video2av(PS3AV_CMD_VIDEO_CS_RGB_8);
|
av_video_cs->av_cs_in = ps3av_cs_video2av(PS3AV_CMD_VIDEO_CS_RGB_8);
|
||||||
av_video_cs->bitlen_out = ps3av_cs_video2av_bitlen(cs_out);
|
av_video_cs->bitlen_out = ps3av_cs_video2av_bitlen(cs_out);
|
||||||
|
if ((id & PS3AV_MODE_WHITE) && ps3av_hdmi_range())
|
||||||
|
av_video_cs->super_white = PS3AV_CMD_AV_SUPER_WHITE_ON;
|
||||||
|
else /* default off */
|
||||||
|
av_video_cs->super_white = PS3AV_CMD_AV_SUPER_WHITE_OFF;
|
||||||
av_video_cs->aspect = aspect;
|
av_video_cs->aspect = aspect;
|
||||||
if (id & PS3AV_MODE_DITHER) {
|
if (id & PS3AV_MODE_DITHER) {
|
||||||
av_video_cs->dither = PS3AV_CMD_AV_DITHER_ON
|
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,
|
||||||
video_mode->pitch = video_mode->width * 4; /* line_length */
|
video_mode->pitch = video_mode->width * 4; /* line_length */
|
||||||
video_mode->video_out_format = PS3AV_CMD_VIDEO_OUT_FORMAT_RGB_12BIT;
|
video_mode->video_out_format = PS3AV_CMD_VIDEO_OUT_FORMAT_RGB_12BIT;
|
||||||
video_mode->video_format = ps3av_video_fmt_table[video_fmt].format;
|
video_mode->video_format = ps3av_video_fmt_table[video_fmt].format;
|
||||||
|
if ((id & PS3AV_MODE_COLOR) && ps3av_hdmi_range())
|
||||||
|
video_mode->video_cl_cnv = PS3AV_CMD_VIDEO_CL_CNV_DISABLE_LUT;
|
||||||
|
else /* default enable */
|
||||||
|
video_mode->video_cl_cnv = PS3AV_CMD_VIDEO_CL_CNV_ENABLE_LUT;
|
||||||
video_mode->video_order = ps3av_video_fmt_table[video_fmt].order;
|
video_mode->video_order = ps3av_video_fmt_table[video_fmt].order;
|
||||||
|
|
||||||
pr_debug("%s: video_mode:vid:%x width:%d height:%d pitch:%d out_format:%d format:%x order:%x\n",
|
pr_debug("%s: video_mode:vid:%x width:%d height:%d pitch:%d out_format:%d format:%x order:%x\n",
|
||||||
|
|
|
@ -159,6 +159,9 @@
|
||||||
#define PS3AV_CMD_VIDEO_FMT_X8R8G8B8 0x0000
|
#define PS3AV_CMD_VIDEO_FMT_X8R8G8B8 0x0000
|
||||||
/* video_out_format */
|
/* video_out_format */
|
||||||
#define PS3AV_CMD_VIDEO_OUT_FORMAT_RGB_12BIT 0x0000
|
#define PS3AV_CMD_VIDEO_OUT_FORMAT_RGB_12BIT 0x0000
|
||||||
|
/* video_cl_cnv */
|
||||||
|
#define PS3AV_CMD_VIDEO_CL_CNV_ENABLE_LUT 0x0000
|
||||||
|
#define PS3AV_CMD_VIDEO_CL_CNV_DISABLE_LUT 0x0010
|
||||||
/* video_sync */
|
/* video_sync */
|
||||||
#define PS3AV_CMD_VIDEO_SYNC_VSYNC 0x0001
|
#define PS3AV_CMD_VIDEO_SYNC_VSYNC 0x0001
|
||||||
#define PS3AV_CMD_VIDEO_SYNC_CSYNC 0x0004
|
#define PS3AV_CMD_VIDEO_SYNC_CSYNC 0x0004
|
||||||
|
@ -311,6 +314,8 @@
|
||||||
#define PS3AV_MODE_MASK 0x000F
|
#define PS3AV_MODE_MASK 0x000F
|
||||||
#define PS3AV_MODE_HDCP_OFF 0x1000 /* Retail PS3 product doesn't support this */
|
#define PS3AV_MODE_HDCP_OFF 0x1000 /* Retail PS3 product doesn't support this */
|
||||||
#define PS3AV_MODE_DITHER 0x0800
|
#define PS3AV_MODE_DITHER 0x0800
|
||||||
|
#define PS3AV_MODE_COLOR 0x0400
|
||||||
|
#define PS3AV_MODE_WHITE 0x0200
|
||||||
#define PS3AV_MODE_FULL 0x0080
|
#define PS3AV_MODE_FULL 0x0080
|
||||||
#define PS3AV_MODE_DVI 0x0040
|
#define PS3AV_MODE_DVI 0x0040
|
||||||
#define PS3AV_MODE_RGB 0x0020
|
#define PS3AV_MODE_RGB 0x0020
|
||||||
|
@ -529,9 +534,9 @@ struct ps3av_pkt_video_mode {
|
||||||
u32 video_out_format; /* in: out format */
|
u32 video_out_format; /* in: out format */
|
||||||
u32 video_format; /* in: input frame buffer format */
|
u32 video_format; /* in: input frame buffer format */
|
||||||
u8 reserved3;
|
u8 reserved3;
|
||||||
u8 reserved4;
|
u8 video_cl_cnv; /* in: color conversion */
|
||||||
u16 video_order; /* in: input RGB order */
|
u16 video_order; /* in: input RGB order */
|
||||||
u32 reserved5;
|
u32 reserved4;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* video: format */
|
/* video: format */
|
||||||
|
@ -539,7 +544,8 @@ struct ps3av_pkt_video_format {
|
||||||
struct ps3av_send_hdr send_hdr;
|
struct ps3av_send_hdr send_hdr;
|
||||||
u32 video_head; /* in: head */
|
u32 video_head; /* in: head */
|
||||||
u32 video_format; /* in: frame buffer format */
|
u32 video_format; /* in: frame buffer format */
|
||||||
u16 reserved;
|
u8 reserved;
|
||||||
|
u8 video_cl_cnv; /* in: color conversion */
|
||||||
u16 video_order; /* in: input RGB order */
|
u16 video_order; /* in: input RGB order */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue