Loading Documentation/devicetree/bindings/sound/rohm,bd28623.txt 0 → 100644 +29 −0 Original line number Diff line number Diff line ROHM BD28623MUV Class D speaker amplifier for digital input This codec does not have any control buses such as I2C, it detect format and rate of I2S signal automatically. It has two signals that can be connected to GPIOs: reset and mute. Required properties: - compatible : should be "rohm,bd28623" - #sound-dai-cells: should be 0. - VCCA-supply : regulator phandle for the VCCA supply - VCCP1-supply : regulator phandle for the VCCP1 supply - VCCP2-supply : regulator phandle for the VCCP2 supply Optional properties: - reset-gpios : GPIO specifier for the active low reset line - mute-gpios : GPIO specifier for the active low mute line Example: codec { compatible = "rohm,bd28623"; #sound-dai-cells = <0>; VCCA-supply = <&vcc_reg>; VCCP1-supply = <&vcc_reg>; VCCP2-supply = <&vcc_reg>; reset-gpios = <&gpio 0 GPIO_ACTIVE_LOW>; mute-gpios = <&gpio 1 GPIO_ACTIVE_LOW>; }; MAINTAINERS +0 −7 Original line number Diff line number Diff line Loading @@ -841,13 +841,6 @@ F: sound/soc/codecs/ad7* F: sound/soc/codecs/ssm* F: sound/soc/codecs/sigmadsp.* ANALOG DEVICES INC ASOC DRIVERS L: adi-buildroot-devel@lists.sourceforge.net (moderated for non-subscribers) L: alsa-devel@alsa-project.org (moderated for non-subscribers) W: http://blackfin.uclinux.org/ S: Supported F: sound/soc/blackfin/* ANALOG DEVICES INC DMA DRIVERS M: Lars-Peter Clausen <lars@metafoo.de> W: http://ez.analog.com/community/linux-device-drivers Loading sound/soc/Kconfig +0 −1 Original line number Diff line number Diff line Loading @@ -45,7 +45,6 @@ source "sound/soc/amd/Kconfig" source "sound/soc/atmel/Kconfig" source "sound/soc/au1x/Kconfig" source "sound/soc/bcm/Kconfig" source "sound/soc/blackfin/Kconfig" source "sound/soc/cirrus/Kconfig" source "sound/soc/davinci/Kconfig" source "sound/soc/dwc/Kconfig" Loading sound/soc/Makefile +0 −1 Original line number Diff line number Diff line Loading @@ -29,7 +29,6 @@ obj-$(CONFIG_SND_SOC) += amd/ obj-$(CONFIG_SND_SOC) += atmel/ obj-$(CONFIG_SND_SOC) += au1x/ obj-$(CONFIG_SND_SOC) += bcm/ obj-$(CONFIG_SND_SOC) += blackfin/ obj-$(CONFIG_SND_SOC) += cirrus/ obj-$(CONFIG_SND_SOC) += davinci/ obj-$(CONFIG_SND_SOC) += dwc/ Loading sound/soc/atmel/atmel-classd.c +29 −32 Original line number Diff line number Diff line Loading @@ -248,9 +248,9 @@ static const char * const pwm_type[] = { "Single ended", "Differential" }; static int atmel_classd_codec_probe(struct snd_soc_codec *codec) static int atmel_classd_component_probe(struct snd_soc_component *component) { struct snd_soc_card *card = snd_soc_codec_get_drvdata(codec); struct snd_soc_card *card = snd_soc_component_get_drvdata(component); struct atmel_classd *dd = snd_soc_card_get_drvdata(card); const struct atmel_classd_pdata *pdata = dd->pdata; u32 mask, val; Loading Loading @@ -284,16 +284,16 @@ static int atmel_classd_codec_probe(struct snd_soc_codec *codec) default: val |= (CLASSD_MR_NOVR_VAL_10NS << CLASSD_MR_NOVR_VAL_SHIFT); dev_warn(codec->dev, dev_warn(component->dev, "non-overlapping value %d is invalid, the default value 10 is specified\n", pdata->non_overlap_time); break; } } snd_soc_update_bits(codec, CLASSD_MR, mask, val); snd_soc_component_update_bits(component, CLASSD_MR, mask, val); dev_info(codec->dev, dev_info(component->dev, "PWM modulation type is %s, non-overlapping is %s\n", pwm_type[pdata->pwm_type], pdata->non_overlap_enable?"enabled":"disabled"); Loading @@ -301,21 +301,23 @@ static int atmel_classd_codec_probe(struct snd_soc_codec *codec) return 0; } static int atmel_classd_codec_resume(struct snd_soc_codec *codec) static int atmel_classd_component_resume(struct snd_soc_component *component) { struct snd_soc_card *card = snd_soc_codec_get_drvdata(codec); struct snd_soc_card *card = snd_soc_component_get_drvdata(component); struct atmel_classd *dd = snd_soc_card_get_drvdata(card); return regcache_sync(dd->regmap); } static struct snd_soc_codec_driver soc_codec_dev_classd = { .probe = atmel_classd_codec_probe, .resume = atmel_classd_codec_resume, .component_driver = { static struct snd_soc_component_driver soc_component_dev_classd = { .probe = atmel_classd_component_probe, .resume = atmel_classd_component_resume, .controls = atmel_classd_snd_controls, .num_controls = ARRAY_SIZE(atmel_classd_snd_controls), }, .idle_bias_on = 1, .use_pmdown_time = 1, .endianness = 1, .non_legacy_dai_naming = 1, }; /* codec dai component */ Loading @@ -331,7 +333,7 @@ static int atmel_classd_codec_dai_startup(struct snd_pcm_substream *substream, static int atmel_classd_codec_dai_digital_mute(struct snd_soc_dai *codec_dai, int mute) { struct snd_soc_codec *codec = codec_dai->codec; struct snd_soc_component *component = codec_dai->component; u32 mask, val; mask = CLASSD_MR_LMUTE_MASK | CLASSD_MR_RMUTE_MASK; Loading @@ -341,7 +343,7 @@ static int atmel_classd_codec_dai_digital_mute(struct snd_soc_dai *codec_dai, else val = 0; snd_soc_update_bits(codec, CLASSD_MR, mask, val); snd_soc_component_update_bits(component, CLASSD_MR, mask, val); return 0; } Loading Loading @@ -380,7 +382,7 @@ atmel_classd_codec_dai_hw_params(struct snd_pcm_substream *substream, { struct snd_soc_pcm_runtime *rtd = substream->private_data; struct atmel_classd *dd = snd_soc_card_get_drvdata(rtd->card); struct snd_soc_codec *codec = codec_dai->codec; struct snd_soc_component *component = codec_dai->component; int fs; int i, best, best_val, cur_val, ret; u32 mask, val; Loading @@ -398,7 +400,7 @@ atmel_classd_codec_dai_hw_params(struct snd_pcm_substream *substream, } } dev_dbg(codec->dev, dev_dbg(component->dev, "Selected SAMPLE_RATE of %dHz, GCLK_RATE of %ldHz\n", sample_rates[best].rate, sample_rates[best].gclk_rate); Loading @@ -412,7 +414,7 @@ atmel_classd_codec_dai_hw_params(struct snd_pcm_substream *substream, val = (sample_rates[best].dsp_clk << CLASSD_INTPMR_DSP_CLK_FREQ_SHIFT) | (sample_rates[best].sample_rate << CLASSD_INTPMR_FRAME_SHIFT); snd_soc_update_bits(codec, CLASSD_INTPMR, mask, val); snd_soc_component_update_bits(component, CLASSD_INTPMR, mask, val); return clk_prepare_enable(dd->gclk); } Loading @@ -430,9 +432,9 @@ atmel_classd_codec_dai_shutdown(struct snd_pcm_substream *substream, static int atmel_classd_codec_dai_prepare(struct snd_pcm_substream *substream, struct snd_soc_dai *codec_dai) { struct snd_soc_codec *codec = codec_dai->codec; struct snd_soc_component *component = codec_dai->component; snd_soc_update_bits(codec, CLASSD_MR, snd_soc_component_update_bits(component, CLASSD_MR, CLASSD_MR_LEN_MASK | CLASSD_MR_REN_MASK, (CLASSD_MR_LEN_DIS << CLASSD_MR_LEN_SHIFT) |(CLASSD_MR_REN_DIS << CLASSD_MR_REN_SHIFT)); Loading @@ -443,7 +445,7 @@ static int atmel_classd_codec_dai_prepare(struct snd_pcm_substream *substream, static int atmel_classd_codec_dai_trigger(struct snd_pcm_substream *substream, int cmd, struct snd_soc_dai *codec_dai) { struct snd_soc_codec *codec = codec_dai->codec; struct snd_soc_component *component = codec_dai->component; u32 mask, val; mask = CLASSD_MR_LEN_MASK | CLASSD_MR_REN_MASK; Loading @@ -464,7 +466,7 @@ static int atmel_classd_codec_dai_trigger(struct snd_pcm_substream *substream, return -EINVAL; } snd_soc_update_bits(codec, CLASSD_MR, mask, val); snd_soc_component_update_bits(component, CLASSD_MR, mask, val); return 0; } Loading Loading @@ -581,11 +583,8 @@ static int atmel_classd_probe(struct platform_device *pdev) res = platform_get_resource(pdev, IORESOURCE_MEM, 0); io_base = devm_ioremap_resource(dev, res); if (IS_ERR(io_base)) { ret = PTR_ERR(io_base); dev_err(dev, "failed to remap register memory: %d\n", ret); return ret; } if (IS_ERR(io_base)) return PTR_ERR(io_base); dd->phy_base = res->start; dd->dev = dev; Loading Loading @@ -614,10 +613,10 @@ static int atmel_classd_probe(struct platform_device *pdev) return ret; } ret = snd_soc_register_codec(dev, &soc_codec_dev_classd, ret = devm_snd_soc_register_component(dev, &soc_component_dev_classd, &atmel_classd_codec_dai, 1); if (ret) { dev_err(dev, "could not register codec: %d\n", ret); dev_err(dev, "could not register component: %d\n", ret); return ret; } Loading Loading @@ -645,13 +644,11 @@ static int atmel_classd_probe(struct platform_device *pdev) return 0; unregister_codec: snd_soc_unregister_codec(dev); return ret; } static int atmel_classd_remove(struct platform_device *pdev) { snd_soc_unregister_codec(&pdev->dev); return 0; } Loading Loading
Documentation/devicetree/bindings/sound/rohm,bd28623.txt 0 → 100644 +29 −0 Original line number Diff line number Diff line ROHM BD28623MUV Class D speaker amplifier for digital input This codec does not have any control buses such as I2C, it detect format and rate of I2S signal automatically. It has two signals that can be connected to GPIOs: reset and mute. Required properties: - compatible : should be "rohm,bd28623" - #sound-dai-cells: should be 0. - VCCA-supply : regulator phandle for the VCCA supply - VCCP1-supply : regulator phandle for the VCCP1 supply - VCCP2-supply : regulator phandle for the VCCP2 supply Optional properties: - reset-gpios : GPIO specifier for the active low reset line - mute-gpios : GPIO specifier for the active low mute line Example: codec { compatible = "rohm,bd28623"; #sound-dai-cells = <0>; VCCA-supply = <&vcc_reg>; VCCP1-supply = <&vcc_reg>; VCCP2-supply = <&vcc_reg>; reset-gpios = <&gpio 0 GPIO_ACTIVE_LOW>; mute-gpios = <&gpio 1 GPIO_ACTIVE_LOW>; };
MAINTAINERS +0 −7 Original line number Diff line number Diff line Loading @@ -841,13 +841,6 @@ F: sound/soc/codecs/ad7* F: sound/soc/codecs/ssm* F: sound/soc/codecs/sigmadsp.* ANALOG DEVICES INC ASOC DRIVERS L: adi-buildroot-devel@lists.sourceforge.net (moderated for non-subscribers) L: alsa-devel@alsa-project.org (moderated for non-subscribers) W: http://blackfin.uclinux.org/ S: Supported F: sound/soc/blackfin/* ANALOG DEVICES INC DMA DRIVERS M: Lars-Peter Clausen <lars@metafoo.de> W: http://ez.analog.com/community/linux-device-drivers Loading
sound/soc/Kconfig +0 −1 Original line number Diff line number Diff line Loading @@ -45,7 +45,6 @@ source "sound/soc/amd/Kconfig" source "sound/soc/atmel/Kconfig" source "sound/soc/au1x/Kconfig" source "sound/soc/bcm/Kconfig" source "sound/soc/blackfin/Kconfig" source "sound/soc/cirrus/Kconfig" source "sound/soc/davinci/Kconfig" source "sound/soc/dwc/Kconfig" Loading
sound/soc/Makefile +0 −1 Original line number Diff line number Diff line Loading @@ -29,7 +29,6 @@ obj-$(CONFIG_SND_SOC) += amd/ obj-$(CONFIG_SND_SOC) += atmel/ obj-$(CONFIG_SND_SOC) += au1x/ obj-$(CONFIG_SND_SOC) += bcm/ obj-$(CONFIG_SND_SOC) += blackfin/ obj-$(CONFIG_SND_SOC) += cirrus/ obj-$(CONFIG_SND_SOC) += davinci/ obj-$(CONFIG_SND_SOC) += dwc/ Loading
sound/soc/atmel/atmel-classd.c +29 −32 Original line number Diff line number Diff line Loading @@ -248,9 +248,9 @@ static const char * const pwm_type[] = { "Single ended", "Differential" }; static int atmel_classd_codec_probe(struct snd_soc_codec *codec) static int atmel_classd_component_probe(struct snd_soc_component *component) { struct snd_soc_card *card = snd_soc_codec_get_drvdata(codec); struct snd_soc_card *card = snd_soc_component_get_drvdata(component); struct atmel_classd *dd = snd_soc_card_get_drvdata(card); const struct atmel_classd_pdata *pdata = dd->pdata; u32 mask, val; Loading Loading @@ -284,16 +284,16 @@ static int atmel_classd_codec_probe(struct snd_soc_codec *codec) default: val |= (CLASSD_MR_NOVR_VAL_10NS << CLASSD_MR_NOVR_VAL_SHIFT); dev_warn(codec->dev, dev_warn(component->dev, "non-overlapping value %d is invalid, the default value 10 is specified\n", pdata->non_overlap_time); break; } } snd_soc_update_bits(codec, CLASSD_MR, mask, val); snd_soc_component_update_bits(component, CLASSD_MR, mask, val); dev_info(codec->dev, dev_info(component->dev, "PWM modulation type is %s, non-overlapping is %s\n", pwm_type[pdata->pwm_type], pdata->non_overlap_enable?"enabled":"disabled"); Loading @@ -301,21 +301,23 @@ static int atmel_classd_codec_probe(struct snd_soc_codec *codec) return 0; } static int atmel_classd_codec_resume(struct snd_soc_codec *codec) static int atmel_classd_component_resume(struct snd_soc_component *component) { struct snd_soc_card *card = snd_soc_codec_get_drvdata(codec); struct snd_soc_card *card = snd_soc_component_get_drvdata(component); struct atmel_classd *dd = snd_soc_card_get_drvdata(card); return regcache_sync(dd->regmap); } static struct snd_soc_codec_driver soc_codec_dev_classd = { .probe = atmel_classd_codec_probe, .resume = atmel_classd_codec_resume, .component_driver = { static struct snd_soc_component_driver soc_component_dev_classd = { .probe = atmel_classd_component_probe, .resume = atmel_classd_component_resume, .controls = atmel_classd_snd_controls, .num_controls = ARRAY_SIZE(atmel_classd_snd_controls), }, .idle_bias_on = 1, .use_pmdown_time = 1, .endianness = 1, .non_legacy_dai_naming = 1, }; /* codec dai component */ Loading @@ -331,7 +333,7 @@ static int atmel_classd_codec_dai_startup(struct snd_pcm_substream *substream, static int atmel_classd_codec_dai_digital_mute(struct snd_soc_dai *codec_dai, int mute) { struct snd_soc_codec *codec = codec_dai->codec; struct snd_soc_component *component = codec_dai->component; u32 mask, val; mask = CLASSD_MR_LMUTE_MASK | CLASSD_MR_RMUTE_MASK; Loading @@ -341,7 +343,7 @@ static int atmel_classd_codec_dai_digital_mute(struct snd_soc_dai *codec_dai, else val = 0; snd_soc_update_bits(codec, CLASSD_MR, mask, val); snd_soc_component_update_bits(component, CLASSD_MR, mask, val); return 0; } Loading Loading @@ -380,7 +382,7 @@ atmel_classd_codec_dai_hw_params(struct snd_pcm_substream *substream, { struct snd_soc_pcm_runtime *rtd = substream->private_data; struct atmel_classd *dd = snd_soc_card_get_drvdata(rtd->card); struct snd_soc_codec *codec = codec_dai->codec; struct snd_soc_component *component = codec_dai->component; int fs; int i, best, best_val, cur_val, ret; u32 mask, val; Loading @@ -398,7 +400,7 @@ atmel_classd_codec_dai_hw_params(struct snd_pcm_substream *substream, } } dev_dbg(codec->dev, dev_dbg(component->dev, "Selected SAMPLE_RATE of %dHz, GCLK_RATE of %ldHz\n", sample_rates[best].rate, sample_rates[best].gclk_rate); Loading @@ -412,7 +414,7 @@ atmel_classd_codec_dai_hw_params(struct snd_pcm_substream *substream, val = (sample_rates[best].dsp_clk << CLASSD_INTPMR_DSP_CLK_FREQ_SHIFT) | (sample_rates[best].sample_rate << CLASSD_INTPMR_FRAME_SHIFT); snd_soc_update_bits(codec, CLASSD_INTPMR, mask, val); snd_soc_component_update_bits(component, CLASSD_INTPMR, mask, val); return clk_prepare_enable(dd->gclk); } Loading @@ -430,9 +432,9 @@ atmel_classd_codec_dai_shutdown(struct snd_pcm_substream *substream, static int atmel_classd_codec_dai_prepare(struct snd_pcm_substream *substream, struct snd_soc_dai *codec_dai) { struct snd_soc_codec *codec = codec_dai->codec; struct snd_soc_component *component = codec_dai->component; snd_soc_update_bits(codec, CLASSD_MR, snd_soc_component_update_bits(component, CLASSD_MR, CLASSD_MR_LEN_MASK | CLASSD_MR_REN_MASK, (CLASSD_MR_LEN_DIS << CLASSD_MR_LEN_SHIFT) |(CLASSD_MR_REN_DIS << CLASSD_MR_REN_SHIFT)); Loading @@ -443,7 +445,7 @@ static int atmel_classd_codec_dai_prepare(struct snd_pcm_substream *substream, static int atmel_classd_codec_dai_trigger(struct snd_pcm_substream *substream, int cmd, struct snd_soc_dai *codec_dai) { struct snd_soc_codec *codec = codec_dai->codec; struct snd_soc_component *component = codec_dai->component; u32 mask, val; mask = CLASSD_MR_LEN_MASK | CLASSD_MR_REN_MASK; Loading @@ -464,7 +466,7 @@ static int atmel_classd_codec_dai_trigger(struct snd_pcm_substream *substream, return -EINVAL; } snd_soc_update_bits(codec, CLASSD_MR, mask, val); snd_soc_component_update_bits(component, CLASSD_MR, mask, val); return 0; } Loading Loading @@ -581,11 +583,8 @@ static int atmel_classd_probe(struct platform_device *pdev) res = platform_get_resource(pdev, IORESOURCE_MEM, 0); io_base = devm_ioremap_resource(dev, res); if (IS_ERR(io_base)) { ret = PTR_ERR(io_base); dev_err(dev, "failed to remap register memory: %d\n", ret); return ret; } if (IS_ERR(io_base)) return PTR_ERR(io_base); dd->phy_base = res->start; dd->dev = dev; Loading Loading @@ -614,10 +613,10 @@ static int atmel_classd_probe(struct platform_device *pdev) return ret; } ret = snd_soc_register_codec(dev, &soc_codec_dev_classd, ret = devm_snd_soc_register_component(dev, &soc_component_dev_classd, &atmel_classd_codec_dai, 1); if (ret) { dev_err(dev, "could not register codec: %d\n", ret); dev_err(dev, "could not register component: %d\n", ret); return ret; } Loading Loading @@ -645,13 +644,11 @@ static int atmel_classd_probe(struct platform_device *pdev) return 0; unregister_codec: snd_soc_unregister_codec(dev); return ret; } static int atmel_classd_remove(struct platform_device *pdev) { snd_soc_unregister_codec(&pdev->dev); return 0; } Loading