mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-30 13:56:53 +07:00
drm/exynos: set the active aspect ratio as per mode
Now that the drm_display_mode also provides aspect ratio for all resolutions, this patch adds its usage to set the active aspect ratio of AVI info frame packets as per CEA-861-D standard's Table 9. This is also needed to abide by the 7-27 compliance test of HDMI. Signed-off-by: Shirish S <s.shirish@samsung.com> Reviewed-by: Tomasz Figa <t.figa@samsung.com> Signed-off-by: Inki Dae <inki.dae@samsung.com>
This commit is contained in:
parent
e1d883c0e6
commit
4615415288
@ -53,12 +53,13 @@
|
||||
/* AVI header and aspect ratio */
|
||||
#define HDMI_AVI_VERSION 0x02
|
||||
#define HDMI_AVI_LENGTH 0x0D
|
||||
#define AVI_PIC_ASPECT_RATIO_16_9 (2 << 4)
|
||||
#define AVI_SAME_AS_PIC_ASPECT_RATIO 8
|
||||
|
||||
/* AUI header info */
|
||||
#define HDMI_AUI_VERSION 0x01
|
||||
#define HDMI_AUI_LENGTH 0x0A
|
||||
#define AVI_SAME_AS_PIC_ASPECT_RATIO 0x8
|
||||
#define AVI_4_3_CENTER_RATIO 0x9
|
||||
#define AVI_16_9_CENTER_RATIO 0xa
|
||||
|
||||
enum hdmi_type {
|
||||
HDMI_TYPE13,
|
||||
@ -162,6 +163,7 @@ struct hdmi_v14_conf {
|
||||
struct hdmi_conf_regs {
|
||||
int pixel_clock;
|
||||
int cea_video_id;
|
||||
enum hdmi_picture_aspect aspect_ratio;
|
||||
union {
|
||||
struct hdmi_v13_conf v13_conf;
|
||||
struct hdmi_v14_conf v14_conf;
|
||||
@ -713,7 +715,6 @@ static void hdmi_reg_infoframe(struct hdmi_context *hdata,
|
||||
{
|
||||
u32 hdr_sum;
|
||||
u8 chksum;
|
||||
u32 aspect_ratio;
|
||||
u32 mod;
|
||||
u32 vic;
|
||||
|
||||
@ -742,10 +743,28 @@ static void hdmi_reg_infoframe(struct hdmi_context *hdata,
|
||||
AVI_ACTIVE_FORMAT_VALID |
|
||||
AVI_UNDERSCANNED_DISPLAY_VALID);
|
||||
|
||||
aspect_ratio = AVI_PIC_ASPECT_RATIO_16_9;
|
||||
|
||||
hdmi_reg_writeb(hdata, HDMI_AVI_BYTE(2), aspect_ratio |
|
||||
AVI_SAME_AS_PIC_ASPECT_RATIO);
|
||||
/*
|
||||
* Set the aspect ratio as per the mode, mentioned in
|
||||
* Table 9 AVI InfoFrame Data Byte 2 of CEA-861-D Standard
|
||||
*/
|
||||
switch (hdata->mode_conf.aspect_ratio) {
|
||||
case HDMI_PICTURE_ASPECT_4_3:
|
||||
hdmi_reg_writeb(hdata, HDMI_AVI_BYTE(2),
|
||||
hdata->mode_conf.aspect_ratio |
|
||||
AVI_4_3_CENTER_RATIO);
|
||||
break;
|
||||
case HDMI_PICTURE_ASPECT_16_9:
|
||||
hdmi_reg_writeb(hdata, HDMI_AVI_BYTE(2),
|
||||
hdata->mode_conf.aspect_ratio |
|
||||
AVI_16_9_CENTER_RATIO);
|
||||
break;
|
||||
case HDMI_PICTURE_ASPECT_NONE:
|
||||
default:
|
||||
hdmi_reg_writeb(hdata, HDMI_AVI_BYTE(2),
|
||||
hdata->mode_conf.aspect_ratio |
|
||||
AVI_SAME_AS_PIC_ASPECT_RATIO);
|
||||
break;
|
||||
}
|
||||
|
||||
vic = hdata->mode_conf.cea_video_id;
|
||||
hdmi_reg_writeb(hdata, HDMI_AVI_BYTE(4), vic);
|
||||
@ -1466,6 +1485,7 @@ static void hdmi_v13_mode_set(struct hdmi_context *hdata,
|
||||
hdata->mode_conf.cea_video_id =
|
||||
drm_match_cea_mode((struct drm_display_mode *)m);
|
||||
hdata->mode_conf.pixel_clock = m->clock * 1000;
|
||||
hdata->mode_conf.aspect_ratio = m->picture_aspect_ratio;
|
||||
|
||||
hdmi_set_reg(core->h_blank, 2, m->htotal - m->hdisplay);
|
||||
hdmi_set_reg(core->h_v_line, 3, (m->htotal << 12) | m->vtotal);
|
||||
@ -1562,6 +1582,7 @@ static void hdmi_v14_mode_set(struct hdmi_context *hdata,
|
||||
hdata->mode_conf.cea_video_id =
|
||||
drm_match_cea_mode((struct drm_display_mode *)m);
|
||||
hdata->mode_conf.pixel_clock = m->clock * 1000;
|
||||
hdata->mode_conf.aspect_ratio = m->picture_aspect_ratio;
|
||||
|
||||
hdmi_set_reg(core->h_blank, 2, m->htotal - m->hdisplay);
|
||||
hdmi_set_reg(core->v_line, 2, m->vtotal);
|
||||
|
Loading…
Reference in New Issue
Block a user