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

Unverified Commit 53ccd1aa authored by Mark Brown's avatar Mark Brown
Browse files

Merge remote-tracking branches 'asoc/topic/arizona', 'asoc/topic/atmel',...

Merge remote-tracking branches 'asoc/topic/arizona', 'asoc/topic/atmel', 'asoc/topic/bd28623', 'asoc/topic/blackfin' and 'asoc/topic/bt-sco' into asoc-next
Loading
Loading
Loading
Loading
+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>;
	};
+0 −7
Original line number Diff line number Diff line
@@ -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
+0 −1
Original line number Diff line number Diff line
@@ -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"
+0 −1
Original line number Diff line number Diff line
@@ -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/
+29 −32
Original line number Diff line number Diff line
@@ -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;
@@ -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");
@@ -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 */
@@ -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;
@@ -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;
}
@@ -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;
@@ -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);

@@ -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);
}
@@ -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));
@@ -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;
@@ -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;
}
@@ -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;
@@ -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;
	}

@@ -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