[alsa-devel] [PATCH] ASoC: da7219: read fmw property to get mclk for non-dts systems
Non-dts based systems can use ACPI DSDT to pass on the mclk to da7219. This enables da7219 mclk to be linked to system clock. Enable/Disable of the mclk is already handled in the codec so platform drivers don't have to explicitly do handling of mclk.
Signed-off-by: Akshu Agrawal akshu.agrawal@amd.com --- include/sound/da7219.h | 2 ++ sound/soc/codecs/da7219.c | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/include/sound/da7219.h b/include/sound/da7219.h index 1bfcb16..df7ddf4 100644 --- a/include/sound/da7219.h +++ b/include/sound/da7219.h @@ -38,6 +38,8 @@ struct da7219_pdata {
const char *dai_clks_name;
+ const char *mclk_name; + /* Mic */ enum da7219_micbias_voltage micbias_lvl; enum da7219_mic_amp_in_sel mic_amp_in_sel; diff --git a/sound/soc/codecs/da7219.c b/sound/soc/codecs/da7219.c index 980a6a8..47ffb35 100644 --- a/sound/soc/codecs/da7219.c +++ b/sound/soc/codecs/da7219.c @@ -1624,6 +1624,8 @@ static struct da7219_pdata *da7219_fw_to_pdata(struct snd_soc_component *compone dev_warn(dev, "Using default clk name: %s\n", pdata->dai_clks_name);
+ device_property_read_string(dev, "dlg,mclk-name", &pdata->mclk_name); + if (device_property_read_u32(dev, "dlg,micbias-lvl", &of_val32) >= 0) pdata->micbias_lvl = da7219_fw_micbias_lvl(dev, of_val32); else @@ -1905,7 +1907,10 @@ static int da7219_probe(struct snd_soc_component *component) da7219_handle_pdata(component);
/* Check if MCLK provided */ - da7219->mclk = devm_clk_get(component->dev, "mclk"); + if (da7219->pdata->mclk_name) + da7219->mclk = clk_get(NULL, da7219->pdata->mclk_name); + if (!da7219->mclk) + da7219->mclk = devm_clk_get(codec->dev, "mclk"); if (IS_ERR(da7219->mclk)) { if (PTR_ERR(da7219->mclk) != -ENOENT) { ret = PTR_ERR(da7219->mclk);
Non-dts based systems can use ACPI DSDT to pass on the mclk to da7219. This enables da7219 mclk to be linked to system clock. Enable/Disable of the mclk is already handled in the codec so platform drivers don't have to explicitly do handling of mclk.
Signed-off-by: Akshu Agrawal akshu.agrawal@amd.com --- include/sound/da7219.h | 2 ++ sound/soc/codecs/da7219.c | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/include/sound/da7219.h b/include/sound/da7219.h index 1bfcb16..df7ddf4 100644 --- a/include/sound/da7219.h +++ b/include/sound/da7219.h @@ -38,6 +38,8 @@ struct da7219_pdata {
const char *dai_clks_name;
+ const char *mclk_name; + /* Mic */ enum da7219_micbias_voltage micbias_lvl; enum da7219_mic_amp_in_sel mic_amp_in_sel; diff --git a/sound/soc/codecs/da7219.c b/sound/soc/codecs/da7219.c index 980a6a8..47ffb35 100644 --- a/sound/soc/codecs/da7219.c +++ b/sound/soc/codecs/da7219.c @@ -1624,6 +1624,8 @@ static struct da7219_pdata *da7219_fw_to_pdata(struct snd_soc_component *compone dev_warn(dev, "Using default clk name: %s\n", pdata->dai_clks_name);
+ device_property_read_string(dev, "dlg,mclk-name", &pdata->mclk_name); + if (device_property_read_u32(dev, "dlg,micbias-lvl", &of_val32) >= 0) pdata->micbias_lvl = da7219_fw_micbias_lvl(dev, of_val32); else @@ -1905,7 +1907,10 @@ static int da7219_probe(struct snd_soc_component *component) da7219_handle_pdata(component);
/* Check if MCLK provided */ - da7219->mclk = devm_clk_get(component->dev, "mclk"); + if (da7219->pdata->mclk_name) + da7219->mclk = clk_get(NULL, da7219->pdata->mclk_name); + if (!da7219->mclk) + da7219->mclk = devm_clk_get(codec->dev, "mclk"); if (IS_ERR(da7219->mclk)) { if (PTR_ERR(da7219->mclk) != -ENOENT) { ret = PTR_ERR(da7219->mclk);
Hi Akshu,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on asoc/for-next] [also build test ERROR on v4.17-rc3 next-20180426] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Akshu-Agrawal/ASoC-da7219-read-fmw-... base: https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next config: x86_64-randconfig-s1-04301236 (attached as .config) compiler: gcc-6 (Debian 6.4.0-9) 6.4.0 20171026 reproduce: # save the attached .config to linux build tree make ARCH=x86_64
All errors (new ones prefixed by >>):
sound/soc//codecs/da7219.c: In function 'da7219_probe':
sound/soc//codecs/da7219.c:1913:31: error: 'codec' undeclared (first use in this function)
da7219->mclk = devm_clk_get(codec->dev, "mclk"); ^~~~~ sound/soc//codecs/da7219.c:1913:31: note: each undeclared identifier is reported only once for each function it appears in
vim +/codec +1913 sound/soc//codecs/da7219.c
1867 1868 static int da7219_probe(struct snd_soc_component *component) 1869 { 1870 struct da7219_priv *da7219 = snd_soc_component_get_drvdata(component); 1871 unsigned int rev; 1872 int ret; 1873 1874 mutex_init(&da7219->ctrl_lock); 1875 mutex_init(&da7219->pll_lock); 1876 1877 /* Regulator configuration */ 1878 ret = da7219_handle_supplies(component); 1879 if (ret) 1880 return ret; 1881 1882 ret = regmap_read(da7219->regmap, DA7219_CHIP_REVISION, &rev); 1883 if (ret) { 1884 dev_err(component->dev, "Failed to read chip revision: %d\n", ret); 1885 goto err_disable_reg; 1886 } 1887 1888 switch (rev & DA7219_CHIP_MINOR_MASK) { 1889 case 0: 1890 ret = regmap_register_patch(da7219->regmap, da7219_rev_aa_patch, 1891 ARRAY_SIZE(da7219_rev_aa_patch)); 1892 if (ret) { 1893 dev_err(component->dev, "Failed to register AA patch: %d\n", 1894 ret); 1895 goto err_disable_reg; 1896 } 1897 break; 1898 default: 1899 break; 1900 } 1901 1902 /* Handle DT/ACPI/Platform data */ 1903 da7219->pdata = dev_get_platdata(component->dev); 1904 if (!da7219->pdata) 1905 da7219->pdata = da7219_fw_to_pdata(component); 1906 1907 da7219_handle_pdata(component); 1908 1909 /* Check if MCLK provided */ 1910 if (da7219->pdata->mclk_name) 1911 da7219->mclk = clk_get(NULL, da7219->pdata->mclk_name); 1912 if (!da7219->mclk)
1913 da7219->mclk = devm_clk_get(codec->dev, "mclk");
1914 if (IS_ERR(da7219->mclk)) { 1915 if (PTR_ERR(da7219->mclk) != -ENOENT) { 1916 ret = PTR_ERR(da7219->mclk); 1917 goto err_disable_reg; 1918 } else { 1919 da7219->mclk = NULL; 1920 } 1921 } 1922 1923 /* Default PC counter to free-running */ 1924 snd_soc_component_update_bits(component, DA7219_PC_COUNT, DA7219_PC_FREERUN_MASK, 1925 DA7219_PC_FREERUN_MASK); 1926 1927 /* Default gain ramping */ 1928 snd_soc_component_update_bits(component, DA7219_MIXIN_L_CTRL, 1929 DA7219_MIXIN_L_AMP_RAMP_EN_MASK, 1930 DA7219_MIXIN_L_AMP_RAMP_EN_MASK); 1931 snd_soc_component_update_bits(component, DA7219_ADC_L_CTRL, DA7219_ADC_L_RAMP_EN_MASK, 1932 DA7219_ADC_L_RAMP_EN_MASK); 1933 snd_soc_component_update_bits(component, DA7219_DAC_L_CTRL, DA7219_DAC_L_RAMP_EN_MASK, 1934 DA7219_DAC_L_RAMP_EN_MASK); 1935 snd_soc_component_update_bits(component, DA7219_DAC_R_CTRL, DA7219_DAC_R_RAMP_EN_MASK, 1936 DA7219_DAC_R_RAMP_EN_MASK); 1937 snd_soc_component_update_bits(component, DA7219_HP_L_CTRL, 1938 DA7219_HP_L_AMP_RAMP_EN_MASK, 1939 DA7219_HP_L_AMP_RAMP_EN_MASK); 1940 snd_soc_component_update_bits(component, DA7219_HP_R_CTRL, 1941 DA7219_HP_R_AMP_RAMP_EN_MASK, 1942 DA7219_HP_R_AMP_RAMP_EN_MASK); 1943 1944 /* Default minimum gain on HP to avoid pops during DAPM sequencing */ 1945 snd_soc_component_update_bits(component, DA7219_HP_L_CTRL, 1946 DA7219_HP_L_AMP_MIN_GAIN_EN_MASK, 1947 DA7219_HP_L_AMP_MIN_GAIN_EN_MASK); 1948 snd_soc_component_update_bits(component, DA7219_HP_R_CTRL, 1949 DA7219_HP_R_AMP_MIN_GAIN_EN_MASK, 1950 DA7219_HP_R_AMP_MIN_GAIN_EN_MASK); 1951 1952 /* Default infinite tone gen, start/stop by Kcontrol */ 1953 snd_soc_component_write(component, DA7219_TONE_GEN_CYCLES, DA7219_BEEP_CYCLES_MASK); 1954 1955 /* Initialise AAD block */ 1956 ret = da7219_aad_init(component); 1957 if (ret) 1958 goto err_disable_reg; 1959 1960 return 0; 1961 1962 err_disable_reg: 1963 regulator_bulk_disable(DA7219_NUM_SUPPLIES, da7219->supplies); 1964 1965 return ret; 1966 } 1967
--- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Hi Akshu,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on asoc/for-next] [also build test ERROR on v4.17-rc3 next-20180426] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Akshu-Agrawal/ASoC-da7219-read-fmw-... base: https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next config: i386-randconfig-x015-201817 (attached as .config) compiler: gcc-7 (Debian 7.3.0-16) 7.3.0 reproduce: # save the attached .config to linux build tree make ARCH=i386
All errors (new ones prefixed by >>):
sound/soc/codecs/da7219.c: In function 'da7219_probe':
sound/soc/codecs/da7219.c:1913:31: error: 'codec' undeclared (first use in this function); did you mean 'node'?
da7219->mclk = devm_clk_get(codec->dev, "mclk"); ^~~~~ node sound/soc/codecs/da7219.c:1913:31: note: each undeclared identifier is reported only once for each function it appears in
vim +1913 sound/soc/codecs/da7219.c
1867 1868 static int da7219_probe(struct snd_soc_component *component) 1869 { 1870 struct da7219_priv *da7219 = snd_soc_component_get_drvdata(component); 1871 unsigned int rev; 1872 int ret; 1873 1874 mutex_init(&da7219->ctrl_lock); 1875 mutex_init(&da7219->pll_lock); 1876 1877 /* Regulator configuration */ 1878 ret = da7219_handle_supplies(component); 1879 if (ret) 1880 return ret; 1881 1882 ret = regmap_read(da7219->regmap, DA7219_CHIP_REVISION, &rev); 1883 if (ret) { 1884 dev_err(component->dev, "Failed to read chip revision: %d\n", ret); 1885 goto err_disable_reg; 1886 } 1887 1888 switch (rev & DA7219_CHIP_MINOR_MASK) { 1889 case 0: 1890 ret = regmap_register_patch(da7219->regmap, da7219_rev_aa_patch, 1891 ARRAY_SIZE(da7219_rev_aa_patch)); 1892 if (ret) { 1893 dev_err(component->dev, "Failed to register AA patch: %d\n", 1894 ret); 1895 goto err_disable_reg; 1896 } 1897 break; 1898 default: 1899 break; 1900 } 1901 1902 /* Handle DT/ACPI/Platform data */ 1903 da7219->pdata = dev_get_platdata(component->dev); 1904 if (!da7219->pdata) 1905 da7219->pdata = da7219_fw_to_pdata(component); 1906 1907 da7219_handle_pdata(component); 1908 1909 /* Check if MCLK provided */ 1910 if (da7219->pdata->mclk_name) 1911 da7219->mclk = clk_get(NULL, da7219->pdata->mclk_name); 1912 if (!da7219->mclk)
1913 da7219->mclk = devm_clk_get(codec->dev, "mclk");
1914 if (IS_ERR(da7219->mclk)) { 1915 if (PTR_ERR(da7219->mclk) != -ENOENT) { 1916 ret = PTR_ERR(da7219->mclk); 1917 goto err_disable_reg; 1918 } else { 1919 da7219->mclk = NULL; 1920 } 1921 } 1922 1923 /* Default PC counter to free-running */ 1924 snd_soc_component_update_bits(component, DA7219_PC_COUNT, DA7219_PC_FREERUN_MASK, 1925 DA7219_PC_FREERUN_MASK); 1926 1927 /* Default gain ramping */ 1928 snd_soc_component_update_bits(component, DA7219_MIXIN_L_CTRL, 1929 DA7219_MIXIN_L_AMP_RAMP_EN_MASK, 1930 DA7219_MIXIN_L_AMP_RAMP_EN_MASK); 1931 snd_soc_component_update_bits(component, DA7219_ADC_L_CTRL, DA7219_ADC_L_RAMP_EN_MASK, 1932 DA7219_ADC_L_RAMP_EN_MASK); 1933 snd_soc_component_update_bits(component, DA7219_DAC_L_CTRL, DA7219_DAC_L_RAMP_EN_MASK, 1934 DA7219_DAC_L_RAMP_EN_MASK); 1935 snd_soc_component_update_bits(component, DA7219_DAC_R_CTRL, DA7219_DAC_R_RAMP_EN_MASK, 1936 DA7219_DAC_R_RAMP_EN_MASK); 1937 snd_soc_component_update_bits(component, DA7219_HP_L_CTRL, 1938 DA7219_HP_L_AMP_RAMP_EN_MASK, 1939 DA7219_HP_L_AMP_RAMP_EN_MASK); 1940 snd_soc_component_update_bits(component, DA7219_HP_R_CTRL, 1941 DA7219_HP_R_AMP_RAMP_EN_MASK, 1942 DA7219_HP_R_AMP_RAMP_EN_MASK); 1943 1944 /* Default minimum gain on HP to avoid pops during DAPM sequencing */ 1945 snd_soc_component_update_bits(component, DA7219_HP_L_CTRL, 1946 DA7219_HP_L_AMP_MIN_GAIN_EN_MASK, 1947 DA7219_HP_L_AMP_MIN_GAIN_EN_MASK); 1948 snd_soc_component_update_bits(component, DA7219_HP_R_CTRL, 1949 DA7219_HP_R_AMP_MIN_GAIN_EN_MASK, 1950 DA7219_HP_R_AMP_MIN_GAIN_EN_MASK); 1951 1952 /* Default infinite tone gen, start/stop by Kcontrol */ 1953 snd_soc_component_write(component, DA7219_TONE_GEN_CYCLES, DA7219_BEEP_CYCLES_MASK); 1954 1955 /* Initialise AAD block */ 1956 ret = da7219_aad_init(component); 1957 if (ret) 1958 goto err_disable_reg; 1959 1960 return 0; 1961 1962 err_disable_reg: 1963 regulator_bulk_disable(DA7219_NUM_SUPPLIES, da7219->supplies); 1964 1965 return ret; 1966 } 1967
--- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Hi Akshu,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on asoc/for-next] [also build test ERROR on v4.17-rc3 next-20180426] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Akshu-Agrawal/ASoC-da7219-read-fmw-... base: https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next config: xtensa-allmodconfig (attached as .config) compiler: xtensa-linux-gcc (GCC) 7.2.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=xtensa
All errors (new ones prefixed by >>):
sound/soc/codecs/da7219.c: In function 'da7219_probe':
sound/soc/codecs/da7219.c:1913:31: error: 'codec' undeclared (first use in this function); did you mean 'cdev'?
da7219->mclk = devm_clk_get(codec->dev, "mclk"); ^~~~~ cdev sound/soc/codecs/da7219.c:1913:31: note: each undeclared identifier is reported only once for each function it appears in
vim +1913 sound/soc/codecs/da7219.c
1867 1868 static int da7219_probe(struct snd_soc_component *component) 1869 { 1870 struct da7219_priv *da7219 = snd_soc_component_get_drvdata(component); 1871 unsigned int rev; 1872 int ret; 1873 1874 mutex_init(&da7219->ctrl_lock); 1875 mutex_init(&da7219->pll_lock); 1876 1877 /* Regulator configuration */ 1878 ret = da7219_handle_supplies(component); 1879 if (ret) 1880 return ret; 1881 1882 ret = regmap_read(da7219->regmap, DA7219_CHIP_REVISION, &rev); 1883 if (ret) { 1884 dev_err(component->dev, "Failed to read chip revision: %d\n", ret); 1885 goto err_disable_reg; 1886 } 1887 1888 switch (rev & DA7219_CHIP_MINOR_MASK) { 1889 case 0: 1890 ret = regmap_register_patch(da7219->regmap, da7219_rev_aa_patch, 1891 ARRAY_SIZE(da7219_rev_aa_patch)); 1892 if (ret) { 1893 dev_err(component->dev, "Failed to register AA patch: %d\n", 1894 ret); 1895 goto err_disable_reg; 1896 } 1897 break; 1898 default: 1899 break; 1900 } 1901 1902 /* Handle DT/ACPI/Platform data */ 1903 da7219->pdata = dev_get_platdata(component->dev); 1904 if (!da7219->pdata) 1905 da7219->pdata = da7219_fw_to_pdata(component); 1906 1907 da7219_handle_pdata(component); 1908 1909 /* Check if MCLK provided */ 1910 if (da7219->pdata->mclk_name) 1911 da7219->mclk = clk_get(NULL, da7219->pdata->mclk_name); 1912 if (!da7219->mclk)
1913 da7219->mclk = devm_clk_get(codec->dev, "mclk");
1914 if (IS_ERR(da7219->mclk)) { 1915 if (PTR_ERR(da7219->mclk) != -ENOENT) { 1916 ret = PTR_ERR(da7219->mclk); 1917 goto err_disable_reg; 1918 } else { 1919 da7219->mclk = NULL; 1920 } 1921 } 1922 1923 /* Default PC counter to free-running */ 1924 snd_soc_component_update_bits(component, DA7219_PC_COUNT, DA7219_PC_FREERUN_MASK, 1925 DA7219_PC_FREERUN_MASK); 1926 1927 /* Default gain ramping */ 1928 snd_soc_component_update_bits(component, DA7219_MIXIN_L_CTRL, 1929 DA7219_MIXIN_L_AMP_RAMP_EN_MASK, 1930 DA7219_MIXIN_L_AMP_RAMP_EN_MASK); 1931 snd_soc_component_update_bits(component, DA7219_ADC_L_CTRL, DA7219_ADC_L_RAMP_EN_MASK, 1932 DA7219_ADC_L_RAMP_EN_MASK); 1933 snd_soc_component_update_bits(component, DA7219_DAC_L_CTRL, DA7219_DAC_L_RAMP_EN_MASK, 1934 DA7219_DAC_L_RAMP_EN_MASK); 1935 snd_soc_component_update_bits(component, DA7219_DAC_R_CTRL, DA7219_DAC_R_RAMP_EN_MASK, 1936 DA7219_DAC_R_RAMP_EN_MASK); 1937 snd_soc_component_update_bits(component, DA7219_HP_L_CTRL, 1938 DA7219_HP_L_AMP_RAMP_EN_MASK, 1939 DA7219_HP_L_AMP_RAMP_EN_MASK); 1940 snd_soc_component_update_bits(component, DA7219_HP_R_CTRL, 1941 DA7219_HP_R_AMP_RAMP_EN_MASK, 1942 DA7219_HP_R_AMP_RAMP_EN_MASK); 1943 1944 /* Default minimum gain on HP to avoid pops during DAPM sequencing */ 1945 snd_soc_component_update_bits(component, DA7219_HP_L_CTRL, 1946 DA7219_HP_L_AMP_MIN_GAIN_EN_MASK, 1947 DA7219_HP_L_AMP_MIN_GAIN_EN_MASK); 1948 snd_soc_component_update_bits(component, DA7219_HP_R_CTRL, 1949 DA7219_HP_R_AMP_MIN_GAIN_EN_MASK, 1950 DA7219_HP_R_AMP_MIN_GAIN_EN_MASK); 1951 1952 /* Default infinite tone gen, start/stop by Kcontrol */ 1953 snd_soc_component_write(component, DA7219_TONE_GEN_CYCLES, DA7219_BEEP_CYCLES_MASK); 1954 1955 /* Initialise AAD block */ 1956 ret = da7219_aad_init(component); 1957 if (ret) 1958 goto err_disable_reg; 1959 1960 return 0; 1961 1962 err_disable_reg: 1963 regulator_bulk_disable(DA7219_NUM_SUPPLIES, da7219->supplies); 1964 1965 return ret; 1966 } 1967
--- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
participants (2)
-
Akshu Agrawal
-
kbuild test robot