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

Commit d0ab92d6 authored by Mark Brown's avatar Mark Brown
Browse files

Merge remote-tracking branches 'asoc/fix/samsung', 'asoc/fix/sgtl5000',...

Merge remote-tracking branches 'asoc/fix/samsung', 'asoc/fix/sgtl5000', 'asoc/fix/simple' and 'asoc/fix/tlv320aic3x' into asoc-linus
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -1277,7 +1277,7 @@ static int sgtl5000_enable_regulators(struct snd_soc_codec *codec)
			return ret;
	}

	ret = devm_regulator_bulk_get(codec->dev, ARRAY_SIZE(sgtl5000->supplies),
	ret = regulator_bulk_get(codec->dev, ARRAY_SIZE(sgtl5000->supplies),
				 sgtl5000->supplies);
	if (ret)
		goto err_ldo_remove;
@@ -1285,13 +1285,16 @@ static int sgtl5000_enable_regulators(struct snd_soc_codec *codec)
	ret = regulator_bulk_enable(ARRAY_SIZE(sgtl5000->supplies),
					sgtl5000->supplies);
	if (ret)
		goto err_ldo_remove;
		goto err_regulator_free;

	/* wait for all power rails bring up */
	udelay(10);

	return 0;

err_regulator_free:
	regulator_bulk_free(ARRAY_SIZE(sgtl5000->supplies),
				sgtl5000->supplies);
err_ldo_remove:
	if (!external_vddd)
		ldo_regulator_remove(codec);
@@ -1361,6 +1364,8 @@ static int sgtl5000_probe(struct snd_soc_codec *codec)
err:
	regulator_bulk_disable(ARRAY_SIZE(sgtl5000->supplies),
						sgtl5000->supplies);
	regulator_bulk_free(ARRAY_SIZE(sgtl5000->supplies),
				sgtl5000->supplies);
	ldo_regulator_remove(codec);

	return ret;
@@ -1374,6 +1379,8 @@ static int sgtl5000_remove(struct snd_soc_codec *codec)

	regulator_bulk_disable(ARRAY_SIZE(sgtl5000->supplies),
						sgtl5000->supplies);
	regulator_bulk_free(ARRAY_SIZE(sgtl5000->supplies),
				sgtl5000->supplies);
	ldo_regulator_remove(codec);

	return 0;
+1 −1
Original line number Diff line number Diff line
@@ -879,7 +879,7 @@ static int aic3x_hw_params(struct snd_pcm_substream *substream,
	case SNDRV_PCM_FORMAT_S20_3LE:
		data |= (0x01 << 4);
		break;
	case SNDRV_PCM_FORMAT_S24_LE:
	case SNDRV_PCM_FORMAT_S24_3LE:
		data |= (0x02 << 4);
		break;
	case SNDRV_PCM_FORMAT_S32_LE:
+7 −6
Original line number Diff line number Diff line
@@ -116,6 +116,7 @@ asoc_simple_card_sub_parse_of(struct device_node *np,
{
	struct device_node *node;
	struct clk *clk;
	u32 val;
	int ret;

	/*
@@ -151,10 +152,8 @@ asoc_simple_card_sub_parse_of(struct device_node *np,
		}

		dai->sysclk = clk_get_rate(clk);
	} else if (of_property_read_bool(np, "system-clock-frequency")) {
		of_property_read_u32(np,
				     "system-clock-frequency",
				     &dai->sysclk);
	} else if (!of_property_read_u32(np, "system-clock-frequency", &val)) {
		dai->sysclk = val;
	} else {
		clk = of_clk_get(node, 0);
		if (!IS_ERR(clk))
@@ -303,6 +302,7 @@ static int asoc_simple_card_parse_of(struct device_node *node,
{
	struct snd_soc_dai_link *dai_link = priv->snd_card.dai_link;
	struct simple_dai_props *dai_props = priv->dai_props;
	u32 val;
	int ret;

	/* parsing the card name from DT */
@@ -325,8 +325,9 @@ static int asoc_simple_card_parse_of(struct device_node *node,
	}

	/* Factor to mclk, used in hw_params() */
	of_property_read_u32(node, "simple-audio-card,mclk-fs",
			     &priv->mclk_fs);
	ret = of_property_read_u32(node, "simple-audio-card,mclk-fs", &val);
	if (ret == 0)
		priv->mclk_fs = val;

	dev_dbg(dev, "New simple-card: %s\n", priv->snd_card.name ?
		priv->snd_card.name : "");
+17 −12
Original line number Diff line number Diff line
@@ -68,6 +68,8 @@ struct i2s_dai {
#define DAI_OPENED	(1 << 0) /* Dai is opened */
#define DAI_MANAGER	(1 << 1) /* Dai is the manager */
	unsigned mode;
	/* CDCLK pin direction: 0  - input, 1 - output */
	unsigned int cdclk_out:1;
	/* Driver for this DAI */
	struct snd_soc_dai_driver i2s_dai_drv;
	/* DMA parameters */
@@ -737,6 +739,9 @@ static int i2s_startup(struct snd_pcm_substream *substream,

	spin_unlock_irqrestore(&lock, flags);

	if (!is_opened(other) && i2s->cdclk_out)
		i2s_set_sysclk(dai, SAMSUNG_I2S_CDCLK,
				0, SND_SOC_CLOCK_OUT);
	return 0;
}

@@ -752,9 +757,13 @@ static void i2s_shutdown(struct snd_pcm_substream *substream,
	i2s->mode &= ~DAI_OPENED;
	i2s->mode &= ~DAI_MANAGER;

	if (is_opened(other))
	if (is_opened(other)) {
		other->mode |= DAI_MANAGER;

	} else {
		u32 mod = readl(i2s->addr + I2SMOD);
		i2s->cdclk_out = !(mod & MOD_CDCLKCON);
		other->cdclk_out = i2s->cdclk_out;
	}
	/* Reset any constraint on RFS and BFS */
	i2s->rfs = 0;
	i2s->bfs = 0;
@@ -920,11 +929,9 @@ static int i2s_suspend(struct snd_soc_dai *dai)
{
	struct i2s_dai *i2s = to_info(dai);

	if (dai->active) {
	i2s->suspend_i2smod = readl(i2s->addr + I2SMOD);
	i2s->suspend_i2scon = readl(i2s->addr + I2SCON);
	i2s->suspend_i2spsr = readl(i2s->addr + I2SPSR);
	}

	return 0;
}
@@ -933,11 +940,9 @@ static int i2s_resume(struct snd_soc_dai *dai)
{
	struct i2s_dai *i2s = to_info(dai);

	if (dai->active) {
	writel(i2s->suspend_i2scon, i2s->addr + I2SCON);
	writel(i2s->suspend_i2smod, i2s->addr + I2SMOD);
	writel(i2s->suspend_i2spsr, i2s->addr + I2SPSR);
	}

	return 0;
}