rz-ssi.c (fc30eea1542dd787c6aa46e970014e97e390c5b2) rz-ssi.c (c75ed9f54ce8d349fee557f2b471a4d637ed2a6b)
1// SPDX-License-Identifier: GPL-2.0
2//
3// Renesas RZ/G2L ASoC Serial Sound Interface (SSIF-2) Driver
4//
5// Copyright (C) 2021 Renesas Electronics Corp.
6// Copyright (C) 2019 Chris Brandt.
7//
8

--- 753 unchanged lines hidden (view full) ---

762 return ret;
763}
764
765static int rz_ssi_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
766{
767 struct rz_ssi_priv *ssi = snd_soc_dai_get_drvdata(dai);
768
769 switch (fmt & SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK) {
1// SPDX-License-Identifier: GPL-2.0
2//
3// Renesas RZ/G2L ASoC Serial Sound Interface (SSIF-2) Driver
4//
5// Copyright (C) 2021 Renesas Electronics Corp.
6// Copyright (C) 2019 Chris Brandt.
7//
8

--- 753 unchanged lines hidden (view full) ---

762 return ret;
763}
764
765static int rz_ssi_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
766{
767 struct rz_ssi_priv *ssi = snd_soc_dai_get_drvdata(dai);
768
769 switch (fmt & SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK) {
770 case SND_SOC_DAIFMT_CBC_CFC:
770 case SND_SOC_DAIFMT_BP_FP:
771 break;
772 default:
773 dev_err(ssi->dev, "Codec should be clk and frame consumer\n");
774 return -EINVAL;
775 }
776
777 /*
778 * set clock polarity

--- 122 unchanged lines hidden (view full) ---

901 .channels_min = SSI_CHAN_MIN,
902 .channels_max = SSI_CHAN_MAX,
903 },
904 .ops = &rz_ssi_dai_ops,
905 },
906};
907
908static const struct snd_soc_component_driver rz_ssi_soc_component = {
771 break;
772 default:
773 dev_err(ssi->dev, "Codec should be clk and frame consumer\n");
774 return -EINVAL;
775 }
776
777 /*
778 * set clock polarity

--- 122 unchanged lines hidden (view full) ---

901 .channels_min = SSI_CHAN_MIN,
902 .channels_max = SSI_CHAN_MAX,
903 },
904 .ops = &rz_ssi_dai_ops,
905 },
906};
907
908static const struct snd_soc_component_driver rz_ssi_soc_component = {
909 .name = "rz-ssi",
910 .open = rz_ssi_pcm_open,
911 .pointer = rz_ssi_pcm_pointer,
912 .pcm_construct = rz_ssi_pcm_new,
909 .name = "rz-ssi",
910 .open = rz_ssi_pcm_open,
911 .pointer = rz_ssi_pcm_pointer,
912 .pcm_construct = rz_ssi_pcm_new,
913 .legacy_dai_naming = 1,
913};
914
915static int rz_ssi_probe(struct platform_device *pdev)
916{
917 struct rz_ssi_priv *ssi;
918 struct clk *audio_clk;
919 struct resource *res;
920 int ret;

--- 90 unchanged lines hidden (view full) ---

1011 dev_name(&pdev->dev), ssi);
1012 if (ret < 0)
1013 return dev_err_probe(&pdev->dev, ret,
1014 "irq request error (dma_rx)\n");
1015 }
1016
1017 ssi->rstc = devm_reset_control_get_exclusive(&pdev->dev, NULL);
1018 if (IS_ERR(ssi->rstc)) {
914};
915
916static int rz_ssi_probe(struct platform_device *pdev)
917{
918 struct rz_ssi_priv *ssi;
919 struct clk *audio_clk;
920 struct resource *res;
921 int ret;

--- 90 unchanged lines hidden (view full) ---

1012 dev_name(&pdev->dev), ssi);
1013 if (ret < 0)
1014 return dev_err_probe(&pdev->dev, ret,
1015 "irq request error (dma_rx)\n");
1016 }
1017
1018 ssi->rstc = devm_reset_control_get_exclusive(&pdev->dev, NULL);
1019 if (IS_ERR(ssi->rstc)) {
1019 rz_ssi_release_dma_channels(ssi);
1020 return PTR_ERR(ssi->rstc);
1020 ret = PTR_ERR(ssi->rstc);
1021 goto err_reset;
1021 }
1022
1023 reset_control_deassert(ssi->rstc);
1024 pm_runtime_enable(&pdev->dev);
1025 ret = pm_runtime_resume_and_get(&pdev->dev);
1026 if (ret < 0) {
1022 }
1023
1024 reset_control_deassert(ssi->rstc);
1025 pm_runtime_enable(&pdev->dev);
1026 ret = pm_runtime_resume_and_get(&pdev->dev);
1027 if (ret < 0) {
1027 rz_ssi_release_dma_channels(ssi);
1028 pm_runtime_disable(ssi->dev);
1029 reset_control_assert(ssi->rstc);
1030 return dev_err_probe(ssi->dev, ret, "pm_runtime_resume_and_get failed\n");
1028 dev_err(&pdev->dev, "pm_runtime_resume_and_get failed\n");
1029 goto err_pm;
1031 }
1032
1033 ret = devm_snd_soc_register_component(&pdev->dev, &rz_ssi_soc_component,
1034 rz_ssi_soc_dai,
1035 ARRAY_SIZE(rz_ssi_soc_dai));
1036 if (ret < 0) {
1030 }
1031
1032 ret = devm_snd_soc_register_component(&pdev->dev, &rz_ssi_soc_component,
1033 rz_ssi_soc_dai,
1034 ARRAY_SIZE(rz_ssi_soc_dai));
1035 if (ret < 0) {
1037 rz_ssi_release_dma_channels(ssi);
1038
1039 pm_runtime_put(ssi->dev);
1040 pm_runtime_disable(ssi->dev);
1041 reset_control_assert(ssi->rstc);
1042 dev_err(&pdev->dev, "failed to register snd component\n");
1036 dev_err(&pdev->dev, "failed to register snd component\n");
1037 goto err_snd_soc;
1043 }
1044
1038 }
1039
1040 return 0;
1041
1042err_snd_soc:
1043 pm_runtime_put(ssi->dev);
1044err_pm:
1045 pm_runtime_disable(ssi->dev);
1046 reset_control_assert(ssi->rstc);
1047err_reset:
1048 rz_ssi_release_dma_channels(ssi);
1049
1045 return ret;
1046}
1047
1048static int rz_ssi_remove(struct platform_device *pdev)
1049{
1050 struct rz_ssi_priv *ssi = dev_get_drvdata(&pdev->dev);
1051
1052 rz_ssi_release_dma_channels(ssi);

--- 28 unchanged lines hidden ---
1050 return ret;
1051}
1052
1053static int rz_ssi_remove(struct platform_device *pdev)
1054{
1055 struct rz_ssi_priv *ssi = dev_get_drvdata(&pdev->dev);
1056
1057 rz_ssi_release_dma_channels(ssi);

--- 28 unchanged lines hidden ---