Re: [PATCH 22/22] ASoC: renesas: msiof: Convert to <linux/spi/sh_msiof.h>

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi

> Convert the MSIOF I2S driver to reuse the MSIOF register and register
> bit definitions in the header file shared by the MSIOF SPI driver.
> 
> Signed-off-by: Geert Uytterhoeven <geert+renesas@xxxxxxxxx>
> ---

For MSIOF Sound part

Tested-by: Kuninori Morimoto <kuninori.morimoto.gx@xxxxxxxxxxx>

> Compile-tested and asm-inspected only due to lack of local sound
> hardware.
> ---
>  sound/soc/renesas/rcar/msiof.c | 94 ++++++++++------------------------
>  1 file changed, 28 insertions(+), 66 deletions(-)
> 
> diff --git a/sound/soc/renesas/rcar/msiof.c b/sound/soc/renesas/rcar/msiof.c
> index 75c9e91bada10289..36d31ab8ac6a5f18 100644
> --- a/sound/soc/renesas/rcar/msiof.c
> +++ b/sound/soc/renesas/rcar/msiof.c
> @@ -30,56 +30,15 @@
>  #include <linux/of_graph.h>
>  #include <linux/platform_device.h>
>  #include <linux/pm_runtime.h>
> +#include <linux/spi/sh_msiof.h>
>  #include <sound/dmaengine_pcm.h>
>  #include <sound/soc.h>
>  
> -/* register */
> -#define SITMDR1		0x00
> -#define SITMDR2		0x04
> -#define SITMDR3		0x08
> -#define SIRMDR1		0x10
> -#define SIRMDR2		0x14
> -#define SIRMDR3		0x18
> -#define SICTR		0x28
> -#define SISTR		0x40
> -#define SIIER		0x44
> -#define SITFDR		0x50
> -#define SIRFDR		0x60
> -
> -/* SITMDR1/ SIRMDR1 */
> -#define PCON		(1 << 30)		/* Transfer Signal Connection */
> -#define SYNCMD_LR	(3 << 28)		/* L/R mode */
> -#define SYNCAC		(1 << 25)		/* Sync Polarity (Active-low) */
> -#define DTDL_1		(1 << 20)		/* 1-clock-cycle delay */
> -#define TXSTP		(1 <<  0)		/* Transmission/Reception Stop on FIFO */
> -
> -/* SITMDR2 and SIRMDR2 */
> -#define BITLEN1(x)	(((x) - 1) << 24)	/* Data Size (8-32 bits) */
> -#define GRP		(1 << 30)		/* Group count */
> -
> -/* SICTR */
> -#define TEDG		(1 << 27)		/* Transmit Timing (1 = falling edge) */
> -#define REDG		(1 << 26)		/* Receive  Timing (1 = rising  edge) */
> -#define TXE		(1 <<  9)		/* Transmit Enable */
> -#define RXE		(1 <<  8)		/* Receive Enable */
> -
>  /* SISTR */
> -#define TFSERR		(1 << 21)		/* Transmit Frame Synchronization Error */
> -#define TFOVF		(1 << 20)		/* Transmit FIFO Overflow */
> -#define TFUDF		(1 << 19)		/* Transmit FIFO Underflow */
> -#define RFSERR		(1 <<  5)		/* Receive Frame Synchronization Error */
> -#define RFUDF		(1 <<  4)		/* Receive FIFO Underflow */
> -#define RFOVF		(1 <<  3)		/* Receive FIFO Overflow */
> -#define SISTR_ERR_TX	(TFSERR | TFOVF | TFUDF)
> -#define SISTR_ERR_RX	(RFSERR | RFOVF | RFUDF)
> +#define SISTR_ERR_TX	(SISTR_TFSERR | SISTR_TFOVF | SISTR_TFUDF)
> +#define SISTR_ERR_RX	(SISTR_RFSERR | SISTR_RFOVF | SISTR_RFUDF)
>  #define SISTR_ERR	(SISTR_ERR_TX | SISTR_ERR_RX)
>  
> -/* SIIER */
> -#define TDMAE		(1 << 31)		/* Transmit Data DMA Transfer Req. Enable */
> -#define TDREQE		(1 << 28)		/* Transmit Data Transfer Request Enable */
> -#define RDMAE		(1 << 15)		/* Receive Data DMA Transfer Req. Enable */
> -#define RDREQE		(1 << 12)		/* Receive Data Transfer Request Enable */
> -
>  /*
>   * The data on memory in 24bit case is located at <right> side
>   *	[  xxxxxx]
> @@ -174,42 +133,45 @@ static int msiof_hw_start(struct snd_soc_component *component,
>  
>  	/* SITMDRx */
>  	if (is_play) {
> -		val = PCON | SYNCMD_LR | SYNCAC | TXSTP;
> +		val = SITMDR1_PCON |
> +		      FIELD_PREP(SIMDR1_SYNCMD, SIMDR1_SYNCMD_LR) |
> +		      SIMDR1_SYNCAC | SIMDR1_XXSTP;
>  		if (msiof_flag_has(priv, MSIOF_FLAGS_NEED_DELAY))
> -			val |= DTDL_1;
> +			val |= FIELD_PREP(SIMDR1_DTDL, 1);
>  
>  		msiof_write(priv, SITMDR1, val);
>  
> -		val = BITLEN1(width);
> -		msiof_write(priv, SITMDR2, val | GRP);
> +		val = FIELD_PREP(SIMDR2_BITLEN1, width - 1);
> +		msiof_write(priv, SITMDR2, val | FIELD_PREP(SIMDR2_GRP, 1));
>  		msiof_write(priv, SITMDR3, val);
>  
>  	}
>  	/* SIRMDRx */
>  	else {
> -		val = SYNCMD_LR | SYNCAC;
> +		val = FIELD_PREP(SIMDR1_SYNCMD, SIMDR1_SYNCMD_LR) |
> +		      SIMDR1_SYNCAC;
>  		if (msiof_flag_has(priv, MSIOF_FLAGS_NEED_DELAY))
> -			val |= DTDL_1;
> +			val |= FIELD_PREP(SIMDR1_DTDL, 1);
>  
>  		msiof_write(priv, SIRMDR1, val);
>  
> -		val = BITLEN1(width);
> -		msiof_write(priv, SIRMDR2, val | GRP);
> +		val = FIELD_PREP(SIMDR2_BITLEN1, width - 1);
> +		msiof_write(priv, SIRMDR2, val | FIELD_PREP(SIMDR2_GRP, 1));
>  		msiof_write(priv, SIRMDR3, val);
>  	}
>  
>  	/* SIIER */
>  	if (is_play)
> -		val = TDREQE | TDMAE | SISTR_ERR_TX;
> +		val = SIIER_TDREQE | SIIER_TDMAE | SISTR_ERR_TX;
>  	else
> -		val = RDREQE | RDMAE | SISTR_ERR_RX;
> +		val = SIIER_RDREQE | SIIER_RDMAE | SISTR_ERR_RX;
>  	msiof_update(priv, SIIER, val, val);
>  
>  	/* SICTR */
>  	if (is_play)
> -		val = TXE | TEDG;
> +		val = SICTR_TXE | SICTR_TEDG;
>  	else
> -		val = RXE | REDG;
> +		val = SICTR_RXE | SICTR_REDG;
>  	msiof_update_and_wait(priv, SICTR, val, val, val);
>  
>  	msiof_status_clear(priv);
> @@ -230,9 +192,9 @@ static int msiof_hw_stop(struct snd_soc_component *component,
>  
>  	/* SIIER */
>  	if (is_play)
> -		val = TDREQE | TDMAE | SISTR_ERR_TX;
> +		val = SIIER_TDREQE | SIIER_TDMAE | SISTR_ERR_TX;
>  	else
> -		val = RDREQE | RDMAE | SISTR_ERR_RX;
> +		val = SIIER_RDREQE | SIIER_RDMAE | SISTR_ERR_RX;
>  	msiof_update(priv, SIIER, val, 0);
>  
>  	/* Stop DMAC */
> @@ -240,9 +202,9 @@ static int msiof_hw_stop(struct snd_soc_component *component,
>  
>  	/* SICTR */
>  	if (is_play)
> -		val = TXE;
> +		val = SICTR_TXE;
>  	else
> -		val = RXE;
> +		val = SICTR_RXE;
>  	msiof_update_and_wait(priv, SICTR, val, 0, 0);
>  
>  	/* indicate error status if exist */
> @@ -478,22 +440,22 @@ static irqreturn_t msiof_interrupt(int irq, void *data)
>  	substream = priv->substream[SNDRV_PCM_STREAM_PLAYBACK];
>  	if (substream && (sistr & SISTR_ERR_TX)) {
>  		// snd_pcm_stop_xrun(substream);
> -		if (sistr & TFSERR)
> +		if (sistr & SISTR_TFSERR)
>  			priv->err_syc[SNDRV_PCM_STREAM_PLAYBACK]++;
> -		if (sistr & TFOVF)
> +		if (sistr & SISTR_TFOVF)
>  			priv->err_ovf[SNDRV_PCM_STREAM_PLAYBACK]++;
> -		if (sistr & TFUDF)
> +		if (sistr & SISTR_TFUDF)
>  			priv->err_udf[SNDRV_PCM_STREAM_PLAYBACK]++;
>  	}
>  
>  	substream = priv->substream[SNDRV_PCM_STREAM_CAPTURE];
>  	if (substream && (sistr & SISTR_ERR_RX)) {
>  		// snd_pcm_stop_xrun(substream);
> -		if (sistr & RFSERR)
> +		if (sistr & SISTR_RFSERR)
>  			priv->err_syc[SNDRV_PCM_STREAM_CAPTURE]++;
> -		if (sistr & RFOVF)
> +		if (sistr & SISTR_RFOVF)
>  			priv->err_ovf[SNDRV_PCM_STREAM_CAPTURE]++;
> -		if (sistr & RFUDF)
> +		if (sistr & SISTR_RFUDF)
>  			priv->err_udf[SNDRV_PCM_STREAM_CAPTURE]++;
>  	}
>  
> -- 
> 2.43.0
> 
> 




Thank you for your help !!

Best regards
---
Kuninori Morimoto




[Index of Archives]     [Linux Samsung SOC]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]

  Powered by Linux