Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e3839bd6 authored by Kuninori Morimoto's avatar Kuninori Morimoto Committed by Mark Brown
Browse files

drm: dw-hdmi-i2s: add .get_dai_id callback for ALSA SoC



ALSA SoC needs to know connected DAI ID for probing.
It is not a big problem if device/driver was only for sound,
but getting DAI ID will be difficult if device includes both
Video/Sound, like HDMI.
To solve this issue, this patch adds new .get_dai_id callback
on hdmi_codec_ops.
dw-hdmi-i2s will assume that HDMI sound will be connected
to reg = <2>. Then, ALSA SoC side will recognized it as DAI 0

	ports {
		#address-cells = <1>;
		#size-cells = <0>;
		port@0 {
			reg = <0>;
			/* HDMI Video IN */
		};
		port@1 {
			reg = <1>;
			/* HDMI OUT */
		};
		port@2 {
			reg = <2>;
			/* HDMI Sound IN */
		};
	};

Signed-off-by: default avatarKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Acked-by: default avatarArchit Taneja <architt@codeaurora.org>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 2ea659a9
Loading
Loading
Loading
Loading
+8 −1
Original line number Original line Diff line number Diff line
@@ -25,7 +25,8 @@ Required properties:
- clock-names: Shall contain "iahb" and "isfr" as defined in dw_hdmi.txt.
- clock-names: Shall contain "iahb" and "isfr" as defined in dw_hdmi.txt.
- ports: See dw_hdmi.txt. The DWC HDMI shall have one port numbered 0
- ports: See dw_hdmi.txt. The DWC HDMI shall have one port numbered 0
  corresponding to the video input of the controller and one port numbered 1
  corresponding to the video input of the controller and one port numbered 1
  corresponding to its HDMI output. Each port shall have a single endpoint.
  corresponding to its HDMI output, and one port numbered 2 corresponding to
  sound input of the controller. Each port shall have a single endpoint.


Optional properties:
Optional properties:


@@ -59,6 +60,12 @@ Example:
					remote-endpoint = <&hdmi0_con>;
					remote-endpoint = <&hdmi0_con>;
				};
				};
			};
			};
			port@2 {
				reg = <2>;
				rcar_dw_hdmi0_sound_in: endpoint {
					remote-endpoint = <&hdmi_sound_out>;
				};
			};
		};
		};
	};
	};


+21 −0
Original line number Original line Diff line number Diff line
@@ -82,9 +82,30 @@ static void dw_hdmi_i2s_audio_shutdown(struct device *dev, void *data)
	hdmi_write(audio, HDMI_AUD_CONF0_SW_RESET, HDMI_AUD_CONF0);
	hdmi_write(audio, HDMI_AUD_CONF0_SW_RESET, HDMI_AUD_CONF0);
}
}


static int dw_hdmi_i2s_get_dai_id(struct snd_soc_component *component,
				  struct device_node *endpoint)
{
	struct of_endpoint of_ep;
	int ret;

	ret = of_graph_parse_endpoint(endpoint, &of_ep);
	if (ret < 0)
		return ret;

	/*
	 * HDMI sound should be located as reg = <2>
	 * Then, it is sound port 0
	 */
	if (of_ep.port == 2)
		return 0;

	return -EINVAL;
}

static struct hdmi_codec_ops dw_hdmi_i2s_ops = {
static struct hdmi_codec_ops dw_hdmi_i2s_ops = {
	.hw_params	= dw_hdmi_i2s_hw_params,
	.hw_params	= dw_hdmi_i2s_hw_params,
	.audio_shutdown	= dw_hdmi_i2s_audio_shutdown,
	.audio_shutdown	= dw_hdmi_i2s_audio_shutdown,
	.get_dai_id	= dw_hdmi_i2s_get_dai_id,
};
};


static int snd_dw_hdmi_probe(struct platform_device *pdev)
static int snd_dw_hdmi_probe(struct platform_device *pdev)