static const struct hdmi_codec_ops lt9611_codec_ops = {
.hw_params = lt9611_hdmi_hw_params,
.audio_shutdown = lt9611_audio_shutdown,
.audio_startup = lt9611_audio_startup,
.get_dai_id = lt9611_hdmi_i2s_get_dai_id,
};
/* Мы убрали глобальную статическую структуру `codec_data` */
static int lt9611_audio_init(struct device *dev, struct lt9611 *lt9611, bool is_i2s)
{
struct hdmi_codec_pdata local_codec_data = { 0 };
local_codec_data.ops = <9611_codec_ops;
local_codec_data.data = lt9611;
if (is_i2s) {
dev_info(dev, "LT9611: Registering HDMI Codec with I2S capability\n");
local_codec_data.i2s = 1; /* Включаем поддержку I2S */
local_codec_data.max_i2s_channels = 8;
} else {
dev_info(dev, "LT9611: Registering HDMI Codec with SPDIF capability\n");
local_codec_data.spdif = 1; /* Включаем поддержку SPDIF */
}
/* Регистрируем платформенное устройство, передавая динамически собранную структуру */
lt9611->audio_pdev = platform_device_register_data(dev,
HDMI_CODEC_DRV_NAME,
PLATFORM_DEVID_AUTO,
&local_codec_data,
sizeof(local_codec_data));
return PTR_ERR_OR_ZERO(lt9611->audio_pdev);
}
static void lt9611_audio_exit(struct lt9611 *lt9611)
{
if (lt9611->audio_pdev) {
platform_device_unregister(lt9611->audio_pdev);
lt9611->audio_pdev = NULL;
}
}
/* Внутри функции lt9611_probe: */
bool is_i2s = true;
/* Проверяем, есть ли в узле DTS флаг переключения на SPDIF.
Если флаг присутствует, is_i2s станет false */
if (of_property_read_bool(dev->of_node, "fsl,audio-spdif")) {
is_i2s = false;
}
/* Передаем вычисленный флаг в функцию инициализации аудио */
ret = lt9611_audio_init(dev, lt9611, is_i2s);
if (ret) {
dev_err(dev, "Failed to initialize audio: %d\n", ret);
return ret;
}
&lpi2c2 {
#address-cells = <1>;
#size-cells = <0>;
lt9611_codec: lt9611@3b {
compatible = "lontium,lt9611";
reg = <0x3b>;
#sound-dai-cells = <0>;
/* --- НАШ НОВЫЙ СЛЕПОЙ ФЛАГ ДЛЯ ДРАЙВЕРА --- */
fsl,audio-spdif;
/* ------------------------------------------ */
reset-gpios = <&adp5585 4 GPIO_ACTIVE_HIGH>;
interrupts-extended = <&gpio3 27 IRQ_TYPE_EDGE_FALLING>;
/* ... остальные свойства вашего узла кодека оставляем как есть ... */
};
};