The current ELD handling takes the internal connector ELD buffer and shares it to the I2S and AHB sub-driver. But with DRM_BRIDGE_ATTACH_NO_CONNECTOR, the connector is created elsewhere (or not), and an eventual connector is known only if the bridge chain up to a connector is enabled. The current dw-hdmi code gets the current connector from atomic_enable() so use the already stored connector pointer and replace the buffer pointer with a callback returning the current connector ELD buffer. Since a connector is not always available, either pass an empty ELD to the alsa HDMI driver or don't call snd_pcm_hw_constraint_eld() in AHB driver. Reported-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com> [narmstrong: fixed typo in commit log] Acked-by: Jernej Skrabec <jernej.skrabec@gmail.com> Link: https://patchwork.freedesktop.org/patch/msgid/20211029135947.3022875-1-narmstrong@baylibre.com
23 lines
460 B
C
23 lines
460 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef DW_HDMI_AUDIO_H
|
|
#define DW_HDMI_AUDIO_H
|
|
|
|
struct dw_hdmi;
|
|
|
|
struct dw_hdmi_audio_data {
|
|
phys_addr_t phys;
|
|
void __iomem *base;
|
|
int irq;
|
|
struct dw_hdmi *hdmi;
|
|
u8 *(*get_eld)(struct dw_hdmi *hdmi);
|
|
};
|
|
|
|
struct dw_hdmi_i2s_audio_data {
|
|
struct dw_hdmi *hdmi;
|
|
|
|
void (*write)(struct dw_hdmi *hdmi, u8 val, int offset);
|
|
u8 (*read)(struct dw_hdmi *hdmi, int offset);
|
|
u8 *(*get_eld)(struct dw_hdmi *hdmi);
|
|
};
|
|
|
|
#endif
|