On Fri, Jul 5, 2019 at 12:26 PM Cheng-Yi Chiang cychiang@chromium.org wrote:
diff --git a/sound/soc/rockchip/rockchip_max98090.c b/sound/soc/rockchip/rockchip_max98090.c index c5fc24675a33..195309d1225a 100644 --- a/sound/soc/rockchip/rockchip_max98090.c +++ b/sound/soc/rockchip/rockchip_max98090.c static int rk_aif1_hw_params(struct snd_pcm_substream *substream, @@ -92,38 +95,59 @@ static int rk_aif1_hw_params(struct snd_pcm_substream *substream,
ret = snd_soc_dai_set_sysclk(cpu_dai, 0, mclk, SND_SOC_CLOCK_OUT);
if (ret < 0) {dev_err(codec_dai->dev, "Can't set codec clock %d\n", ret);
if (ret && ret != -ENOTSUPP) {dev_err(cpu_dai->dev, "Can't set cpu dai clock %d\n", ret); return ret; } ret = snd_soc_dai_set_sysclk(codec_dai, 0, mclk, SND_SOC_CLOCK_IN);
if (ret < 0) {dev_err(codec_dai->dev, "Can't set codec clock %d\n", ret);
if (ret && ret != -ENOTSUPP) {dev_err(codec_dai->dev, "Can't set codec dai clock %d\n", ret); return ret; }
Does it imply: it is acceptable even if they are "not supported"?
return ret;
return 0;}
static const struct snd_soc_ops rk_aif1_ops = { .hw_params = rk_aif1_hw_params, };
-SND_SOC_DAILINK_DEFS(hifi, +SND_SOC_DAILINK_DEFS(analog, DAILINK_COMP_ARRAY(COMP_EMPTY()), DAILINK_COMP_ARRAY(COMP_CODEC(NULL, "HiFi")), DAILINK_COMP_ARRAY(COMP_EMPTY()));
-static struct snd_soc_dai_link rk_dailink = {
.name = "max98090",.stream_name = "Audio",.ops = &rk_aif1_ops,/* set max98090 as slave */.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |SND_SOC_DAIFMT_CBS_CFS,SND_SOC_DAILINK_REG(hifi),+SND_SOC_DAILINK_DEFS(hdmi,
DAILINK_COMP_ARRAY(COMP_EMPTY()),DAILINK_COMP_ARRAY(COMP_CODEC("hdmi-audio-codec.3.auto", "i2s-hifi")),DAILINK_COMP_ARRAY(COMP_EMPTY()));+enum {
DAILINK_MAX98090,DAILINK_HDMI,+};
+/* max98090 and HDMI codec dai_link */ +static struct snd_soc_dai_link rk_dailinks[] = {
[DAILINK_MAX98090] = {.name = "max98090",.stream_name = "Analog",.ops = &rk_aif1_ops,/* set max98090 as slave */.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |SND_SOC_DAIFMT_CBS_CFS,SND_SOC_DAILINK_REG(analog),},[DAILINK_HDMI] = {.name = "HDMI",.stream_name = "HDMI",.ops = &rk_aif1_ops,.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |SND_SOC_DAIFMT_CBS_CFS,SND_SOC_DAILINK_REG(hdmi),}};
static int rk_98090_headset_init(struct snd_soc_component *component); @@ -136,8 +160,8 @@ static struct snd_soc_aux_dev rk_98090_headset_dev = { static struct snd_soc_card snd_soc_card_rk = { .name = "ROCKCHIP-I2S", .owner = THIS_MODULE,
.dai_link = &rk_dailink,.num_links = 1,
.dai_link = rk_dailinks,.num_links = ARRAY_SIZE(rk_dailinks), .aux_dev = &rk_98090_headset_dev, .num_aux_devs = 1, .dapm_widgets = rk_dapm_widgets,@@ -173,27 +197,48 @@ static int snd_rk_mc_probe(struct platform_device *pdev) int ret = 0; struct snd_soc_card *card = &snd_soc_card_rk; struct device_node *np = pdev->dev.of_node;
struct device_node *np_analog;struct device_node *np_cpu;struct of_phandle_args args; /* register the soc card */ card->dev = &pdev->dev;
rk_dailink.codecs->of_node = of_parse_phandle(np,"rockchip,audio-codec", 0);if (!rk_dailink.codecs->of_node) {
np_analog = of_parse_phandle(np, "rockchip,audio-codec", 0);if (!np_analog) { dev_err(&pdev->dev, "Property 'rockchip,audio-codec' missing or invalid\n"); return -EINVAL; }rk_dailinks[DAILINK_MAX98090].codecs->of_node = np_analog;ret = of_parse_phandle_with_fixed_args(np, "rockchip,audio-codec",0, 0, &args);if (ret) {dev_err(&pdev->dev,"Unable to parse property 'rockchip,audio-codec'\n");return ret;}ret = snd_soc_get_dai_name(&args, &rk_dailinks[DAILINK_MAX98090].codecs->dai_name);if (ret) {dev_err(&pdev->dev, "Unable to get codec dai_name\n");return ret;}np_cpu = of_parse_phandle(np, "rockchip,i2s-controller", 0);
rk_dailink.cpus->of_node = of_parse_phandle(np,"rockchip,i2s-controller", 0);if (!rk_dailink.cpus->of_node) {
if (!np_cpu) { dev_err(&pdev->dev, "Property 'rockchip,i2s-controller' missing or invalid\n"); return -EINVAL; }
rk_dailink.platforms->of_node = rk_dailink.cpus->of_node;
rk_dailinks[DAILINK_MAX98090].cpus->of_node = np_cpu;rk_dailinks[DAILINK_MAX98090].platforms->of_node = np_cpu;rk_dailinks[DAILINK_HDMI].cpus->of_node = np_cpu;rk_dailinks[DAILINK_HDMI].platforms->of_node = np_cpu; rk_98090_headset_dev.codec_of_node = of_parse_phandle(np, "rockchip,headset-codec", 0);-- 2.22.0.410.gd8fdbe21b5-goog