mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-13 01:52:44 +00:00
drm/i915/hdmi: HDMI source product description infoframe support
Set an SPD infoframe if the sink supports it. Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org> Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
parent
45187ace97
commit
c0864cb39c
2 changed files with 37 additions and 0 deletions
|
@ -184,6 +184,22 @@ struct intel_crtc {
|
||||||
#define DIP_VERSION_AVI 0x2
|
#define DIP_VERSION_AVI 0x2
|
||||||
#define DIP_LEN_AVI 13
|
#define DIP_LEN_AVI 13
|
||||||
|
|
||||||
|
#define DIP_TYPE_SPD 0x3
|
||||||
|
#define DIP_VERSION_SPD 0x1
|
||||||
|
#define DIP_LEN_SPD 25
|
||||||
|
#define DIP_SPD_UNKNOWN 0
|
||||||
|
#define DIP_SPD_DSTB 0x1
|
||||||
|
#define DIP_SPD_DVDP 0x2
|
||||||
|
#define DIP_SPD_DVHS 0x3
|
||||||
|
#define DIP_SPD_HDDVR 0x4
|
||||||
|
#define DIP_SPD_DVC 0x5
|
||||||
|
#define DIP_SPD_DSC 0x6
|
||||||
|
#define DIP_SPD_VCD 0x7
|
||||||
|
#define DIP_SPD_GAME 0x8
|
||||||
|
#define DIP_SPD_PC 0x9
|
||||||
|
#define DIP_SPD_BD 0xa
|
||||||
|
#define DIP_SPD_SCD 0xb
|
||||||
|
|
||||||
struct dip_infoframe {
|
struct dip_infoframe {
|
||||||
uint8_t type; /* HB0 */
|
uint8_t type; /* HB0 */
|
||||||
uint8_t ver; /* HB1 */
|
uint8_t ver; /* HB1 */
|
||||||
|
@ -208,6 +224,11 @@ struct dip_infoframe {
|
||||||
uint16_t left_bar_end;
|
uint16_t left_bar_end;
|
||||||
uint16_t right_bar_start;
|
uint16_t right_bar_start;
|
||||||
} avi;
|
} avi;
|
||||||
|
struct {
|
||||||
|
uint8_t vn[8];
|
||||||
|
uint8_t pd[16];
|
||||||
|
uint8_t sdi;
|
||||||
|
} spd;
|
||||||
uint8_t payload[27];
|
uint8_t payload[27];
|
||||||
} __attribute__ ((packed)) body;
|
} __attribute__ ((packed)) body;
|
||||||
} __attribute__((packed));
|
} __attribute__((packed));
|
||||||
|
|
|
@ -201,6 +201,21 @@ static void intel_hdmi_set_avi_infoframe(struct drm_encoder *encoder)
|
||||||
intel_set_infoframe(encoder, &avi_if);
|
intel_set_infoframe(encoder, &avi_if);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void intel_hdmi_set_spd_infoframe(struct drm_encoder *encoder)
|
||||||
|
{
|
||||||
|
struct dip_infoframe spd_if;
|
||||||
|
|
||||||
|
memset(&spd_if, 0, sizeof(spd_if));
|
||||||
|
spd_if.type = DIP_TYPE_SPD;
|
||||||
|
spd_if.ver = DIP_VERSION_SPD;
|
||||||
|
spd_if.len = DIP_LEN_SPD;
|
||||||
|
strcpy(spd_if.body.spd.vn, "Intel");
|
||||||
|
strcpy(spd_if.body.spd.pd, "Integrated gfx");
|
||||||
|
spd_if.body.spd.sdi = DIP_SPD_PC;
|
||||||
|
|
||||||
|
intel_set_infoframe(encoder, &spd_if);
|
||||||
|
}
|
||||||
|
|
||||||
static void intel_hdmi_mode_set(struct drm_encoder *encoder,
|
static void intel_hdmi_mode_set(struct drm_encoder *encoder,
|
||||||
struct drm_display_mode *mode,
|
struct drm_display_mode *mode,
|
||||||
struct drm_display_mode *adjusted_mode)
|
struct drm_display_mode *adjusted_mode)
|
||||||
|
@ -245,6 +260,7 @@ static void intel_hdmi_mode_set(struct drm_encoder *encoder,
|
||||||
POSTING_READ(intel_hdmi->sdvox_reg);
|
POSTING_READ(intel_hdmi->sdvox_reg);
|
||||||
|
|
||||||
intel_hdmi_set_avi_infoframe(encoder);
|
intel_hdmi_set_avi_infoframe(encoder);
|
||||||
|
intel_hdmi_set_spd_infoframe(encoder);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void intel_hdmi_dpms(struct drm_encoder *encoder, int mode)
|
static void intel_hdmi_dpms(struct drm_encoder *encoder, int mode)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue