On 2019-08-12 14:50, Jerome Brunet wrote: > Provide the eld to the generic hdmi-codec driver. > This will let the driver enforce the maximum channel number and set the > channel allocation depending on the hdmi sink. > > Cc: Jonas Karlman <jonas@xxxxxxxxx> > Signed-off-by: Jerome Brunet <jbrunet@xxxxxxxxxxxx> Tested on Rockchip RK3288/RK3328 devices, full ELD is now available to userspace. Please note that the r-b line in patch 2 is mixed in middle of commit message. Reviewed-by: Jonas Karlman <jonas@xxxxxxxxx> Regards, Jonas > --- > drivers/gpu/drm/bridge/synopsys/dw-hdmi-audio.h | 1 + > drivers/gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c | 11 +++++++++++ > drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 1 + > 3 files changed, 13 insertions(+) > > diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-audio.h b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-audio.h > index 63b5756f463b..cb07dc0da5a7 100644 > --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-audio.h > +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-audio.h > @@ -14,6 +14,7 @@ struct dw_hdmi_audio_data { > > struct dw_hdmi_i2s_audio_data { > struct dw_hdmi *hdmi; > + u8 *eld; > > void (*write)(struct dw_hdmi *hdmi, u8 val, int offset); > u8 (*read)(struct dw_hdmi *hdmi, int offset); > diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c > index b8ece9c1ba2c..1d15cf9b6821 100644 > --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c > +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c > @@ -10,6 +10,7 @@ > #include <linux/module.h> > > #include <drm/bridge/dw_hdmi.h> > +#include <drm/drm_crtc.h> > > #include <sound/hdmi-codec.h> > > @@ -121,6 +122,15 @@ static void dw_hdmi_i2s_audio_shutdown(struct device *dev, void *data) > dw_hdmi_audio_disable(hdmi); > } > > +static int dw_hdmi_i2s_get_eld(struct device *dev, void *data, uint8_t *buf, > + size_t len) > +{ > + struct dw_hdmi_i2s_audio_data *audio = data; > + > + memcpy(buf, audio->eld, min_t(size_t, MAX_ELD_BYTES, len)); > + return 0; > +} > + > static int dw_hdmi_i2s_get_dai_id(struct snd_soc_component *component, > struct device_node *endpoint) > { > @@ -144,6 +154,7 @@ static int dw_hdmi_i2s_get_dai_id(struct snd_soc_component *component, > static struct hdmi_codec_ops dw_hdmi_i2s_ops = { > .hw_params = dw_hdmi_i2s_hw_params, > .audio_shutdown = dw_hdmi_i2s_audio_shutdown, > + .get_eld = dw_hdmi_i2s_get_eld, > .get_dai_id = dw_hdmi_i2s_get_dai_id, > }; > > diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c > index bed4bb017afd..8df69c9dbfad 100644 > --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c > +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c > @@ -2797,6 +2797,7 @@ __dw_hdmi_probe(struct platform_device *pdev, > struct dw_hdmi_i2s_audio_data audio; > > audio.hdmi = hdmi; > + audio.eld = hdmi->connector.eld; > audio.write = hdmi_writeb; > audio.read = hdmi_readb; > hdmi->enable_audio = dw_hdmi_i2s_audio_enable; _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel