On HP 800 G4 DM, if HDMI cable isn't plugged before boot, the HDMI port becomes useless and never responds to cable hotplugging: [ 3.031904] [drm:lspcon_init [i915]] *ERROR* Failed to probe lspcon [ 3.031945] [drm:intel_ddi_init [i915]] *ERROR* LSPCON init failed on port D Seems like the lspcon chip on the system only gets powered after the cable is plugged. Consilidate lspcon_init() into lspcon_resume() to dynamically init lspcon chip, and make HDMI port work. v6: - Rebase on latest for-linux-next. v5: - Consolidate lspcon_resume() with lspcon_init(). - Move more logic into lspcon code. v4: - Trust VBT in intel_infoframe_init(). - Init lspcon in intel_dp_detect(). v3: - Make sure it's handled under long HPD case. v2: - Move lspcon_init() inside of intel_dp_hpd_pulse(). Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/203 Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20200610075542.12882-1-kai.heng.feng@canonical.com
38 lines
1.2 KiB
C
38 lines
1.2 KiB
C
/* SPDX-License-Identifier: MIT */
|
|
/*
|
|
* Copyright © 2019 Intel Corporation
|
|
*/
|
|
|
|
#ifndef __INTEL_LSPCON_H__
|
|
#define __INTEL_LSPCON_H__
|
|
|
|
#include <linux/types.h>
|
|
|
|
struct drm_connector;
|
|
struct drm_connector_state;
|
|
struct intel_crtc_state;
|
|
struct intel_digital_port;
|
|
struct intel_encoder;
|
|
struct intel_lspcon;
|
|
|
|
void lspcon_resume(struct intel_digital_port *dig_port);
|
|
void lspcon_wait_pcon_mode(struct intel_lspcon *lspcon);
|
|
void lspcon_write_infoframe(struct intel_encoder *encoder,
|
|
const struct intel_crtc_state *crtc_state,
|
|
unsigned int type,
|
|
const void *buf, ssize_t len);
|
|
void lspcon_read_infoframe(struct intel_encoder *encoder,
|
|
const struct intel_crtc_state *crtc_state,
|
|
unsigned int type,
|
|
void *frame, ssize_t len);
|
|
void lspcon_set_infoframes(struct intel_encoder *encoder,
|
|
bool enable,
|
|
const struct intel_crtc_state *crtc_state,
|
|
const struct drm_connector_state *conn_state);
|
|
u32 lspcon_infoframes_enabled(struct intel_encoder *encoder,
|
|
const struct intel_crtc_state *pipe_config);
|
|
void lspcon_ycbcr420_config(struct drm_connector *connector,
|
|
struct intel_crtc_state *crtc_state);
|
|
|
|
#endif /* __INTEL_LSPCON_H__ */
|