Commit 80c5d144 authored by Shengjiu Wang's avatar Shengjiu Wang Committed by Liu Ying
Browse files

drm/bridge: dw-hdmi: Add API dw_hdmi_set_sample_iec958() for iec958 format



Add API dw_hdmi_set_sample_iec958() for IEC958 format because audio device
driver needs IEC958 information to configure this specific setting.

Signed-off-by: default avatarShengjiu Wang <shengjiu.wang@nxp.com>
Acked-by: default avatarLiu Ying <victor.liu@nxp.com>
Tested-by: default avatarAlexander Stein <alexander.stein@ew.tq-group.com>
Signed-off-by: default avatarLiu Ying <victor.liu@nxp.com>
Link: https://lore.kernel.org/r/20250923053001.2678596-5-shengjiu.wang@nxp.com
parent 21d4c95e
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -90,6 +90,11 @@ static int audio_hw_params(struct device *dev, void *data,
				   params->iec.status[0] & IEC958_AES0_NONAUDIO);
	dw_hdmi_set_sample_width(dw->data.hdmi, params->sample_width);

	if (daifmt->bit_fmt == SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE)
		dw_hdmi_set_sample_iec958(dw->data.hdmi, 1);
	else
		dw_hdmi_set_sample_iec958(dw->data.hdmi, 0);

	return 0;
}

+11 −1
Original line number Diff line number Diff line
@@ -177,6 +177,7 @@ struct dw_hdmi {

	spinlock_t audio_lock;
	struct mutex audio_mutex;
	unsigned int sample_iec958;
	unsigned int sample_non_pcm;
	unsigned int sample_width;
	unsigned int sample_rate;
@@ -718,6 +719,14 @@ void dw_hdmi_set_sample_non_pcm(struct dw_hdmi *hdmi, unsigned int non_pcm)
}
EXPORT_SYMBOL_GPL(dw_hdmi_set_sample_non_pcm);

void dw_hdmi_set_sample_iec958(struct dw_hdmi *hdmi, unsigned int iec958)
{
	mutex_lock(&hdmi->audio_mutex);
	hdmi->sample_iec958 = iec958;
	mutex_unlock(&hdmi->audio_mutex);
}
EXPORT_SYMBOL_GPL(dw_hdmi_set_sample_iec958);

void dw_hdmi_set_sample_rate(struct dw_hdmi *hdmi, unsigned int rate)
{
	mutex_lock(&hdmi->audio_mutex);
@@ -849,7 +858,8 @@ static void dw_hdmi_gp_audio_enable(struct dw_hdmi *hdmi)
				    hdmi->channels,
				    hdmi->sample_width,
				    hdmi->sample_rate,
				    hdmi->sample_non_pcm);
				    hdmi->sample_non_pcm,
				    hdmi->sample_iec958);
}

static void dw_hdmi_gp_audio_disable(struct dw_hdmi *hdmi)
+2 −1
Original line number Diff line number Diff line
@@ -145,7 +145,7 @@ struct dw_hdmi_plat_data {

	/* Platform-specific audio enable/disable (optional) */
	void (*enable_audio)(struct dw_hdmi *hdmi, int channel,
			     int width, int rate, int non_pcm);
			     int width, int rate, int non_pcm, int iec958);
	void (*disable_audio)(struct dw_hdmi *hdmi);

	/* Vendor PHY support */
@@ -179,6 +179,7 @@ void dw_hdmi_setup_rx_sense(struct dw_hdmi *hdmi, bool hpd, bool rx_sense);
int dw_hdmi_set_plugged_cb(struct dw_hdmi *hdmi, hdmi_codec_plugged_cb fn,
			   struct device *codec_dev);
void dw_hdmi_set_sample_non_pcm(struct dw_hdmi *hdmi, unsigned int non_pcm);
void dw_hdmi_set_sample_iec958(struct dw_hdmi *hdmi, unsigned int iec958);
void dw_hdmi_set_sample_width(struct dw_hdmi *hdmi, unsigned int width);
void dw_hdmi_set_sample_rate(struct dw_hdmi *hdmi, unsigned int rate);
void dw_hdmi_set_channel_count(struct dw_hdmi *hdmi, unsigned int cnt);