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

Commit 4c88f89f authored by Arnaud Pouliquen's avatar Arnaud Pouliquen Committed by Mark Brown
Browse files

ASoC: sti: reset refactoring



Reset is common to player and reader, migrate function in sti_uniperif.c

Signed-off-by: default avatarArnaud Pouliquen <arnaud.pouliquen@st.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 748abba8
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@

#include <linux/module.h>
#include <linux/pinctrl/consumer.h>
#include <linux/delay.h>

#include "uniperif.h"

@@ -97,6 +98,28 @@ static const struct of_device_id snd_soc_sti_match[] = {
	{},
};

int  sti_uniperiph_reset(struct uniperif *uni)
{
	int count = 10;

	/* Reset uniperipheral uni */
	SET_UNIPERIF_SOFT_RST_SOFT_RST(uni);

	if (uni->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0) {
		while (GET_UNIPERIF_SOFT_RST_SOFT_RST(uni) && count) {
			udelay(5);
			count--;
		}
	}

	if (!count) {
		dev_err(uni->dev, "Failed to reset uniperif\n");
		return -EIO;
	}

	return 0;
}

int sti_uniperiph_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask,
			       unsigned int rx_mask, int slots,
			       int slot_width)
+2 −0
Original line number Diff line number Diff line
@@ -1397,6 +1397,8 @@ static inline int sti_uniperiph_get_unip_tdm_frame_size(struct uniperif *uni)
	return (uni->tdm_slot.slots * uni->tdm_slot.slot_width / 8);
}

int  sti_uniperiph_reset(struct uniperif *uni);

int sti_uniperiph_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask,
			       unsigned int rx_mask, int slots,
			       int slot_width);
+3 −31
Original line number Diff line number Diff line
@@ -6,7 +6,6 @@
 */

#include <linux/clk.h>
#include <linux/delay.h>
#include <linux/io.h>
#include <linux/mfd/syscon.h>

@@ -55,25 +54,6 @@ static const struct snd_pcm_hardware uni_player_pcm_hw = {
	.buffer_bytes_max = 256 * PAGE_SIZE
};

static inline int reset_player(struct uniperif *player)
{
	int count = 10;

	if (player->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0) {
		while (GET_UNIPERIF_SOFT_RST_SOFT_RST(player) && count) {
			udelay(5);
			count--;
		}
	}

	if (!count) {
		dev_err(player->dev, "Failed to reset uniperif\n");
		return -EIO;
	}

	return 0;
}

/*
 * uni_player_irq_handler
 * In case of error audio stream is stopped; stop action is protected via PCM
@@ -858,10 +838,8 @@ static int uni_player_prepare(struct snd_pcm_substream *substream,

	SET_UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ(player, 0);

	/* Reset uniperipheral player */
	SET_UNIPERIF_SOFT_RST_SOFT_RST(player);

	return reset_player(player);
	return sti_uniperiph_reset(player);
}

static int uni_player_start(struct uniperif *player)
@@ -893,10 +871,7 @@ static int uni_player_start(struct uniperif *player)
		SET_UNIPERIF_ITM_BSET_UNDERFLOW_REC_FAILED(player);
	}

	/* Reset uniperipheral player */
	SET_UNIPERIF_SOFT_RST_SOFT_RST(player);

	ret = reset_player(player);
	ret = sti_uniperiph_reset(player);
	if (ret < 0) {
		clk_disable_unprepare(player->clk);
		return ret;
@@ -945,10 +920,7 @@ static int uni_player_stop(struct uniperif *player)
	/* Turn the player off */
	SET_UNIPERIF_CTRL_OPERATION_OFF(player);

	/* Soft reset the player */
	SET_UNIPERIF_SOFT_RST_SOFT_RST(player);

	ret = reset_player(player);
	ret = sti_uniperiph_reset(player);
	if (ret < 0)
		return ret;

+1 −14
Original line number Diff line number Diff line
@@ -6,7 +6,6 @@
 */

#include <linux/clk.h>
#include <linux/delay.h>
#include <linux/io.h>

#include <sound/soc.h>
@@ -186,7 +185,6 @@ static int uni_reader_prepare(struct snd_pcm_substream *substream,
	struct uniperif *reader = priv->dai_data.uni;
	struct snd_pcm_runtime *runtime = substream->runtime;
	int transfer_size, trigger_limit, ret;
	int count = 10;

	/* The reader should be stopped */
	if (reader->state != UNIPERIF_STATE_STOPPED) {
@@ -288,18 +286,7 @@ static int uni_reader_prepare(struct snd_pcm_substream *substream,
	}

	/* Reset uniperipheral reader */
	SET_UNIPERIF_SOFT_RST_SOFT_RST(reader);

	while (GET_UNIPERIF_SOFT_RST_SOFT_RST(reader)) {
		udelay(5);
		count--;
	}
	if (!count) {
		dev_err(reader->dev, "Failed to reset uniperif\n");
		return -EIO;
	}

	return 0;
	return sti_uniperiph_reset(reader);
}

static int uni_reader_start(struct uniperif *reader)