Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dc23fba7 authored by Masashi Kimoto's avatar Masashi Kimoto Committed by Paul Mackerras
Browse files

[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: default avatarGeert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>
Signed-off-by: default avatarGeoff Levand <geoffrey.levand@am.sony.com>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent 670ad354
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -143,6 +143,14 @@ static u32 ps3av_vid_video2av(int vid)
	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 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 */
	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);
	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;
	if (id & PS3AV_MODE_DITHER) {
		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->video_out_format = PS3AV_CMD_VIDEO_OUT_FORMAT_RGB_12BIT;
	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;

	pr_debug("%s: video_mode:vid:%x width:%d height:%d pitch:%d out_format:%d format:%x order:%x\n",
+9 −3
Original line number Diff line number Diff line
@@ -159,6 +159,9 @@
#define PS3AV_CMD_VIDEO_FMT_X8R8G8B8			0x0000
/* video_out_format */
#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 */
#define PS3AV_CMD_VIDEO_SYNC_VSYNC			0x0001
#define PS3AV_CMD_VIDEO_SYNC_CSYNC			0x0004
@@ -311,6 +314,8 @@
#define PS3AV_MODE_MASK				0x000F
#define PS3AV_MODE_HDCP_OFF			0x1000	/* Retail PS3 product doesn't support this */
#define PS3AV_MODE_DITHER			0x0800
#define PS3AV_MODE_COLOR			0x0400
#define PS3AV_MODE_WHITE			0x0200
#define PS3AV_MODE_FULL				0x0080
#define PS3AV_MODE_DVI				0x0040
#define PS3AV_MODE_RGB				0x0020
@@ -529,9 +534,9 @@ struct ps3av_pkt_video_mode {
	u32 video_out_format;	/* in: out format */
	u32 video_format;	/* in: input frame buffer format */
	u8 reserved3;
	u8 reserved4;
	u8 video_cl_cnv;	/* in: color conversion */
	u16 video_order;	/* in: input RGB order */
	u32 reserved5;
	u32 reserved4;
};

/* video: format */
@@ -539,7 +544,8 @@ struct ps3av_pkt_video_format {
	struct ps3av_send_hdr send_hdr;
	u32 video_head;		/* in: head */
	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 */
};