hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/drivers/gpu/drm/bridge/adv7511/adv7511_audio.c
....@@ -1,10 +1,9 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * Analog Devices ADV7511 HDMI transmitter driver
34 *
45 * Copyright 2012 Analog Devices Inc.
56 * Copyright (c) 2016, Linaro Limited
6
- *
7
- * Licensed under the GPL-2.
87 */
98
109 #include <sound/core.h>
....@@ -122,6 +121,9 @@
122121 audio_source = ADV7511_AUDIO_SOURCE_I2S;
123122 i2s_format = ADV7511_I2S_FORMAT_LEFT_J;
124123 break;
124
+ case HDMI_SPDIF:
125
+ audio_source = ADV7511_AUDIO_SOURCE_SPDIF;
126
+ break;
125127 default:
126128 return -EINVAL;
127129 }
....@@ -178,11 +180,21 @@
178180 /* use Audio infoframe updated info */
179181 regmap_update_bits(adv7511->regmap, ADV7511_REG_GC(1),
180182 BIT(5), 0);
183
+ /* enable SPDIF receiver */
184
+ if (adv7511->audio_source == ADV7511_AUDIO_SOURCE_SPDIF)
185
+ regmap_update_bits(adv7511->regmap, ADV7511_REG_AUDIO_CONFIG,
186
+ BIT(7), BIT(7));
187
+
181188 return 0;
182189 }
183190
184191 static void audio_shutdown(struct device *dev, void *data)
185192 {
193
+ struct adv7511 *adv7511 = dev_get_drvdata(dev);
194
+
195
+ if (adv7511->audio_source == ADV7511_AUDIO_SOURCE_SPDIF)
196
+ regmap_update_bits(adv7511->regmap, ADV7511_REG_AUDIO_CONFIG,
197
+ BIT(7), 0);
186198 }
187199
188200 static int adv7511_hdmi_i2s_get_dai_id(struct snd_soc_component *component,
....@@ -216,6 +228,7 @@
216228 .ops = &adv7511_codec_ops,
217229 .max_i2s_channels = 2,
218230 .i2s = 1,
231
+ .spdif = 1,
219232 };
220233
221234 int adv7511_audio_init(struct device *dev, struct adv7511 *adv7511)