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

Commit e10369d8 authored by Kuninori Morimoto's avatar Kuninori Morimoto Committed by Mark Brown
Browse files

ASoC: rsnd: use common rsnd_ssi_status_xxx()



Current ssi.c driver has random access to SSISR register. Let's use
common rsnd_ssi_status_xxx() function

Signed-off-by: default avatarKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 2daf71ad
Loading
Loading
Loading
Loading
+19 −8
Original line number Diff line number Diff line
@@ -105,6 +105,16 @@ int rsnd_ssi_use_busif(struct rsnd_dai_stream *io)
	return use_busif;
}

static void rsnd_ssi_status_clear(struct rsnd_mod *mod)
{
	rsnd_mod_write(mod, SSISR, 0);
}

static u32 rsnd_ssi_status_get(struct rsnd_mod *mod)
{
	return rsnd_mod_read(mod, SSISR);
}

static void rsnd_ssi_status_check(struct rsnd_mod *mod,
				  u32 bit)
{
@@ -114,7 +124,7 @@ static void rsnd_ssi_status_check(struct rsnd_mod *mod,
	int i;

	for (i = 0; i < 1024; i++) {
		status = rsnd_mod_read(mod, SSISR);
		status = rsnd_ssi_status_get(mod);
		if (status & bit)
			return;

@@ -245,7 +255,7 @@ static void rsnd_ssi_hw_start(struct rsnd_ssi *ssi,
		rsnd_mod_write(mod, SSIWSR, CONT);

	/* clear error status */
	rsnd_mod_write(mod, SSISR, 0);
	rsnd_ssi_status_clear(mod);

	ssi->usrcnt++;

@@ -406,17 +416,20 @@ static int rsnd_ssi_hw_params(struct rsnd_mod *mod,
	return 0;
}

static void rsnd_ssi_record_error(struct rsnd_ssi *ssi, u32 status)
static u32 rsnd_ssi_record_error(struct rsnd_ssi *ssi)
{
	struct rsnd_mod *mod = rsnd_mod_get(ssi);
	u32 status = rsnd_ssi_status_get(mod);

	/* under/over flow error */
	if (status & (UIRQ | OIRQ)) {
		ssi->err++;

		/* clear error status */
		rsnd_mod_write(mod, SSISR, 0);
		rsnd_ssi_status_clear(mod);
	}

	return status;
}

static int rsnd_ssi_start(struct rsnd_mod *mod,
@@ -442,7 +455,7 @@ static int rsnd_ssi_stop(struct rsnd_mod *mod,

	rsnd_ssi_irq_disable(mod);

	rsnd_ssi_record_error(ssi, rsnd_mod_read(mod, SSISR));
	rsnd_ssi_record_error(ssi);

	rsnd_ssi_hw_stop(io, ssi);

@@ -467,7 +480,7 @@ static void __rsnd_ssi_interrupt(struct rsnd_mod *mod,
	if (!rsnd_io_is_working(io))
		goto rsnd_ssi_interrupt_out;

	status = rsnd_mod_read(mod, SSISR);
	status = rsnd_ssi_record_error(ssi);

	/* PIO only */
	if (!is_dma && (status & DIRQ)) {
@@ -500,8 +513,6 @@ static void __rsnd_ssi_interrupt(struct rsnd_mod *mod,
		rsnd_ssi_start(mod, io, priv);
	}

	rsnd_ssi_record_error(ssi, status);

	if (ssi->err > 1024) {
		rsnd_ssi_irq_disable(mod);