Lines Matching +full:hdmi +full:- +full:connector

1 // SPDX-License-Identifier: GPL-2.0-only
10 #include <linux/hdmi.h>
12 #include <sound/hdmi-codec.h>
14 #include "hdmi.h"
16 int msm_hdmi_audio_update(struct hdmi *hdmi) in msm_hdmi_audio_update() argument
18 struct hdmi_audio *audio = &hdmi->audio; in msm_hdmi_audio_update()
19 bool enabled = audio->enabled; in msm_hdmi_audio_update()
23 if (!hdmi->connector->display_info.is_hdmi) in msm_hdmi_audio_update()
24 return -EINVAL; in msm_hdmi_audio_update()
27 audio->enabled, audio->channels, audio->rate); in msm_hdmi_audio_update()
29 DBG("video: power_on=%d, pixclock=%lu", hdmi->power_on, hdmi->pixclock); in msm_hdmi_audio_update()
31 if (enabled && !(hdmi->power_on && hdmi->pixclock)) { in msm_hdmi_audio_update()
37 acr_pkt_ctrl = hdmi_read(hdmi, REG_HDMI_ACR_PKT_CTRL); in msm_hdmi_audio_update()
38 vbi_pkt_ctrl = hdmi_read(hdmi, REG_HDMI_VBI_PKT_CTRL); in msm_hdmi_audio_update()
39 aud_pkt_ctrl = hdmi_read(hdmi, REG_HDMI_AUDIO_PKT_CTRL1); in msm_hdmi_audio_update()
40 audio_config = hdmi_read(hdmi, REG_HDMI_AUDIO_CFG); in msm_hdmi_audio_update()
49 drm_hdmi_acr_get_n_cts(hdmi->pixclock, audio->rate, &n, &cts); in msm_hdmi_audio_update()
51 if (audio->rate == 192000 || audio->rate == 176400) { in msm_hdmi_audio_update()
54 } else if (audio->rate == 96000 || audio->rate == 88200) { in msm_hdmi_audio_update()
67 if (audio->rate == 48000 || audio->rate == 96000 || in msm_hdmi_audio_update()
68 audio->rate == 192000) in msm_hdmi_audio_update()
70 else if (audio->rate == 44100 || audio->rate == 88200 || in msm_hdmi_audio_update()
71 audio->rate == 176400) in msm_hdmi_audio_update()
78 hdmi_write(hdmi, REG_HDMI_ACR_0(select - 1), in msm_hdmi_audio_update()
80 hdmi_write(hdmi, REG_HDMI_ACR_1(select - 1), in msm_hdmi_audio_update()
83 hdmi_write(hdmi, REG_HDMI_AUDIO_PKT_CTRL2, in msm_hdmi_audio_update()
84 COND(audio->channels != 2, HDMI_AUDIO_PKT_CTRL2_LAYOUT) | in msm_hdmi_audio_update()
90 hdmi_write(hdmi, REG_HDMI_GC, 0); in msm_hdmi_audio_update()
109 hdmi_write(hdmi, REG_HDMI_ACR_PKT_CTRL, acr_pkt_ctrl); in msm_hdmi_audio_update()
110 hdmi_write(hdmi, REG_HDMI_VBI_PKT_CTRL, vbi_pkt_ctrl); in msm_hdmi_audio_update()
111 hdmi_write(hdmi, REG_HDMI_AUDIO_PKT_CTRL1, aud_pkt_ctrl); in msm_hdmi_audio_update()
113 hdmi_write(hdmi, REG_HDMI_AUD_INT, in msm_hdmi_audio_update()
117 hdmi_write(hdmi, REG_HDMI_AUDIO_CFG, audio_config); in msm_hdmi_audio_update()
126 struct drm_connector *connector, in msm_hdmi_bridge_audio_prepare() argument
131 struct hdmi *hdmi = hdmi_bridge->hdmi; in msm_hdmi_bridge_audio_prepare() local
134 drm_dbg_driver(bridge->dev, "%u Hz, %d bit, %d channels\n", in msm_hdmi_bridge_audio_prepare()
135 params->sample_rate, in msm_hdmi_bridge_audio_prepare()
136 params->sample_width, in msm_hdmi_bridge_audio_prepare()
137 params->cea.channels); in msm_hdmi_bridge_audio_prepare()
139 switch (params->sample_rate) { in msm_hdmi_bridge_audio_prepare()
149 drm_err(bridge->dev, "rate[%d] not supported!\n", in msm_hdmi_bridge_audio_prepare()
150 params->sample_rate); in msm_hdmi_bridge_audio_prepare()
151 return -EINVAL; in msm_hdmi_bridge_audio_prepare()
154 ret = drm_atomic_helper_connector_hdmi_update_audio_infoframe(connector, in msm_hdmi_bridge_audio_prepare()
155 &params->cea); in msm_hdmi_bridge_audio_prepare()
159 hdmi->audio.rate = params->sample_rate; in msm_hdmi_bridge_audio_prepare()
160 hdmi->audio.channels = params->cea.channels; in msm_hdmi_bridge_audio_prepare()
161 hdmi->audio.enabled = true; in msm_hdmi_bridge_audio_prepare()
163 return msm_hdmi_audio_update(hdmi); in msm_hdmi_bridge_audio_prepare()
167 struct drm_connector *connector) in msm_hdmi_bridge_audio_shutdown() argument
170 struct hdmi *hdmi = hdmi_bridge->hdmi; in msm_hdmi_bridge_audio_shutdown() local
172 drm_atomic_helper_connector_hdmi_clear_audio_infoframe(connector); in msm_hdmi_bridge_audio_shutdown()
174 hdmi->audio.rate = 0; in msm_hdmi_bridge_audio_shutdown()
175 hdmi->audio.channels = 2; in msm_hdmi_bridge_audio_shutdown()
176 hdmi->audio.enabled = false; in msm_hdmi_bridge_audio_shutdown()
178 msm_hdmi_audio_update(hdmi); in msm_hdmi_bridge_audio_shutdown()