Compare commits

...

2 Commits

Author SHA1 Message Date
Dom Cobley
9d8e963f36 fixup! vc4/drm: Ignore vc4_hdmi->output_enabled for allowing audio 2021-12-08 15:26:30 +00:00
Dom Cobley
010586f1bd vc4/drm: Ignore vc4_hdmi->output_enabled for allowing audio
Otherwise we reject audio playback when switching hdmi modes

Signed-off-by: Dom Cobley <popcornmix@gmail.com>
2021-12-08 14:44:35 +00:00
2 changed files with 2 additions and 33 deletions

View File

@@ -213,6 +213,7 @@ vc4_hdmi_connector_detect(struct drm_connector *connector, bool force)
connected = true;
}
vc4_hdmi->encoder.hdmi_monitor = false;
if (connected) {
if (connector->status != connector_status_connected) {
struct edid *edid = drm_get_edid(connector, vc4_hdmi->ddc);
@@ -741,15 +742,6 @@ static void vc4_hdmi_encoder_post_crtc_powerdown(struct drm_encoder *encoder,
mutex_unlock(&vc4_hdmi->mutex);
}
static void vc4_hdmi_encoder_disable(struct drm_encoder *encoder)
{
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
mutex_lock(&vc4_hdmi->mutex);
vc4_hdmi->output_enabled = false;
mutex_unlock(&vc4_hdmi->mutex);
}
static void vc4_hdmi_csc_setup(struct vc4_hdmi *vc4_hdmi, bool enable)
{
unsigned long flags;
@@ -1219,15 +1211,6 @@ static void vc4_hdmi_encoder_post_crtc_enable(struct drm_encoder *encoder,
mutex_unlock(&vc4_hdmi->mutex);
}
static void vc4_hdmi_encoder_enable(struct drm_encoder *encoder)
{
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
mutex_lock(&vc4_hdmi->mutex);
vc4_hdmi->output_enabled = true;
mutex_unlock(&vc4_hdmi->mutex);
}
static void vc4_hdmi_encoder_atomic_mode_set(struct drm_encoder *encoder,
struct drm_crtc_state *crtc_state,
struct drm_connector_state *conn_state)
@@ -1321,8 +1304,6 @@ static const struct drm_encoder_helper_funcs vc4_hdmi_encoder_helper_funcs = {
.atomic_check = vc4_hdmi_encoder_atomic_check,
.atomic_mode_set = vc4_hdmi_encoder_atomic_mode_set,
.mode_valid = vc4_hdmi_encoder_mode_valid,
.disable = vc4_hdmi_encoder_disable,
.enable = vc4_hdmi_encoder_enable,
};
static u32 vc4_hdmi_calc_hsm_clock(struct vc4_hdmi *vc4_hdmi, unsigned long pixel_rate)
@@ -1454,17 +1435,11 @@ static bool vc4_hdmi_audio_can_stream(struct vc4_hdmi *vc4_hdmi)
{
lockdep_assert_held(&vc4_hdmi->mutex);
/*
* If the controller is disabled, prevent any ALSA output.
*/
if (!vc4_hdmi->output_enabled)
return false;
/*
* If the encoder is currently in DVI mode, treat the codec DAI
* as missing.
*/
if (!(HDMI_READ(HDMI_RAM_PACKET_CONFIG) & VC4_HDMI_RAM_PACKET_ENABLE))
if (!vc4_hdmi->encoder.hdmi_monitor)
return false;
return true;

View File

@@ -223,12 +223,6 @@ struct vc4_hdmi {
*/
struct drm_display_mode saved_adjusted_mode;
/**
* @output_enabled: Is the HDMI controller currently active?
* Protected by @mutex.
*/
bool output_enabled;
/**
* @scdc_enabled: Is the HDMI controller currently running with
* the scrambler on? Protected by @mutex.