Загрузка данных


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 = &lt9611_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>;
		/* ... остальные свойства вашего узла кодека оставляем как есть ... */
	};
};