sound:starfive:spdif:Modify format
authorXingyu Wu <xingyu.wu@starfivetech.com>
Thu, 28 Jul 2022 06:54:32 +0000 (14:54 +0800)
committerXingyu Wu <xingyu.wu@starfivetech.com>
Thu, 28 Jul 2022 06:54:43 +0000 (14:54 +0800)
Modify files' format and remove capture.

Signed-off-by: Xingyu Wu <xingyu.wu@starfivetech.com>
sound/soc/starfive/starfive_spdif.c
sound/soc/starfive/starfive_spdif.h
sound/soc/starfive/starfive_spdif_pcm.c

index 34bc721..34eb1e9 100755 (executable)
@@ -1,4 +1,4 @@
-//SPDX-License-Identifier: GPL-2.0
+// SPDX-License-Identifier: GPL-2.0
 /*
  * SPDIF driver for the StarFive JH7110 SoC
  *
@@ -392,17 +392,8 @@ static struct snd_soc_dai_driver sf_spdif_dai = {
                .channels_min = 1,
                .channels_max = 2,
                .rates = SF_PCM_RATE_8000_22050,
-               .formats = SNDRV_PCM_FMTBIT_S16_LE | \
-                          SNDRV_PCM_FMTBIT_S24_LE | \
-                          SNDRV_PCM_FMTBIT_S32_LE,
-       },
-       .capture =  {
-               .stream_name = "Capture",
-               .channels_min = 2,
-               .channels_max = 2,
-               .rates = SF_PCM_RATE_8000_22050,
-               .formats = SNDRV_PCM_FMTBIT_S16_LE | \
-                          SNDRV_PCM_FMTBIT_S24_LE | \
+               .formats = SNDRV_PCM_FMTBIT_S16_LE |
+                          SNDRV_PCM_FMTBIT_S24_LE |
                           SNDRV_PCM_FMTBIT_S32_LE,
        },
        .ops = &sf_spdif_dai_ops,
index 12f76f7..24542f9 100755 (executable)
@@ -1,4 +1,4 @@
-//SPDX-License-Identifier: GPL-2.0
+/* SPDX-License-Identifier: GPL-2.0 */
 /*
  * SPDIF driver for the StarFive JH7110 SoC
  *
@@ -79,7 +79,7 @@
                                 SPDIF_FIOF_AEMPTY | SPDIF_FIFO_FULL | \
                                 SPDIF_FIFO_AFULL | SPDIF_SYNCERR | \
                                 SPDIF_LOCK | SPDIF_BLOCK_BEGIN)
-                                                
+
 #define SPDIF_ERROR_INT_STATUS (SPDIF_PARITYO | \
                                 SPDIF_TDATA_UNDERR | SPDIF_RDATA_OVRERR)
 #define SPDIF_FIFO_INT_STATUS  (SPDIF_FIFO_EMPTY | SPDIF_FIOF_AEMPTY | \
 #define SPDIF_BEGIN_FLAG       (1<<30) /* 1:start a new block */
 #define SPDIF_RIGHT_LEFT       (1<<31) /* 1:left channel received and tx into FIFO; 0:right channel received and tx into FIFO */
 
-#define BIT8TO20MASK   0x1FFF
+#define BIT8TO20MASK   0x1FFF
 #define ALLBITMASK             0xFFFFFFFF
 
 #define SPDIF_STAT             (SPDIF_PARITY_FLAG | SPDIF_UNDERR_FLAG | \
@@ -149,11 +149,11 @@ struct sf_spdif_dev {
        bool channels;
        unsigned int tx_ptr;
        unsigned int rx_ptr;
-       struct clkspdif_apb;
-       struct clkspdif_core;
-       struct clkapb0_clk;
-       struct clkaudio_root;
-       struct clkmclk_inner;
+       struct clk *spdif_apb;
+       struct clk *spdif_core;
+       struct clk *apb0_clk;
+       struct clk *audio_root;
+       struct clk *mclk_inner;
        struct reset_control *rst_apb;
 
        struct snd_dmaengine_dai_dma_data dma_data;
index d249e8d..b958ca8 100755 (executable)
@@ -1,22 +1,23 @@
-/**
-  ******************************************************************************
-  * @file  sf_spdif_pcm.c
-  * @author  StarFive Technology
-  * @version  V1.0
-  * @date  05/27/2021
-  * @brief
-  ******************************************************************************
-  * @copy
-  *
-  * THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
-  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
-  * TIME. AS A RESULT, STARFIVE SHALL NOT BE HELD LIABLE FOR ANY
-  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
-  * FROM THE CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
-  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
-  *
-  * <h2><center>&copy; COPYRIGHT 20120 Shanghai StarFive Technology Co., Ltd. </center></h2>
-  */
+// SPDX-License-Identifier: GPL-2.0
+/*
+ ******************************************************************************
+ * @file  sf_spdif_pcm.c
+ * @author  StarFive Technology
+ * @version  V1.0
+ * @date  05/27/2021
+ * @brief
+ ******************************************************************************
+ * @copy
+ *
+ * THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+ * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
+ * TIME. AS A RESULT, STARFIVE SHALL NOT BE HELD LIABLE FOR ANY
+ * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
+ * FROM THE CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
+ * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+ *
+ * <h2><center>&copy; COPYRIGHT 20120 Shanghai StarFive Technology Co., Ltd. </center></h2>
+ */
 
 #include <linux/io.h>
 #include <linux/rcupdate.h>
 #define PERIOD_BYTES_MIN       4096
 #define PERIODS_MIN            2
 
-static unsigned int sf_spdif_pcm_tx(struct sf_spdif_dev *dev, 
-               struct snd_pcm_runtime *runtime, unsigned int tx_ptr, 
-               bool *period_elapsed, snd_pcm_format_t format) 
-{ 
+static unsigned int sf_spdif_pcm_tx(struct sf_spdif_dev *dev,
+               struct snd_pcm_runtime *runtime, unsigned int tx_ptr,
+               bool *period_elapsed, snd_pcm_format_t format)
+{
        u32 data[2];
-       unsigned int period_pos = tx_ptr % runtime->period_size; 
-       int i;  
+       unsigned int period_pos = tx_ptr % runtime->period_size;
+       int i;
 
        /* two- channel and signal-channel mode */
        if (dev->channels) {
@@ -42,19 +43,19 @@ static unsigned int sf_spdif_pcm_tx(struct sf_spdif_dev *dev,
                const u32 (*p32)[2] = (void *)runtime->dma_area;
 
                for (i = 0; i < dev->fifo_th; i++) {
-                       if (SNDRV_PCM_FORMAT_S16_LE == format) {
+                       if (format == SNDRV_PCM_FORMAT_S16_LE) {
                                data[0] = p16[tx_ptr][0];
                                data[0] = data[0]<<8;
                                data[0] &= 0x00ffff00;
                                data[1] = p16[tx_ptr][1];
                                data[1] = data[1]<<8;
                                data[1] &= 0x00ffff00;
-                       } else if (SNDRV_PCM_FORMAT_S24_LE == format) {
+                       } else if (format == SNDRV_PCM_FORMAT_S24_LE) {
                                data[0] = p32[tx_ptr][0];
                                data[0] &= 0x00ffffff;
                                data[1] = p32[tx_ptr][1];
                                data[1] &= 0x00ffffff;
-                       } else if (SNDRV_PCM_FORMAT_S32_LE == format) {
+                       } else if (format == SNDRV_PCM_FORMAT_S32_LE) {
                                data[0] = p32[tx_ptr][0];
                                data[0] = data[0]>>8;
                                data[1] = p32[tx_ptr][1];
@@ -64,70 +65,68 @@ static unsigned int sf_spdif_pcm_tx(struct sf_spdif_dev *dev,
                        iowrite32(data[0], dev->spdif_base + SPDIF_FIFO_ADDR);
                        iowrite32(data[1], dev->spdif_base + SPDIF_FIFO_ADDR);
                        period_pos++;
-                       if (++tx_ptr >= runtime->buffer_size) {
+                       if (++tx_ptr >= runtime->buffer_size)
                                tx_ptr = 0;
-                       }
                }
        } else {
                const u16 (*p16) = (void *)runtime->dma_area;
                const u32 (*p32) = (void *)runtime->dma_area;
 
                for (i = 0; i < dev->fifo_th; i++) {
-                       if (SNDRV_PCM_FORMAT_S16_LE == format) {
+                       if (format == SNDRV_PCM_FORMAT_S16_LE) {
                                data[0] = p16[tx_ptr];
                                data[0] = data[0]<<8;
                                data[0] &= 0x00ffff00;
-                       } else if (SNDRV_PCM_FORMAT_S24_LE == format) {
+                       } else if (format == SNDRV_PCM_FORMAT_S24_LE) {
                                data[0] = p32[tx_ptr];
                                data[0] &= 0x00ffffff;
-                       } else if (SNDRV_PCM_FORMAT_S32_LE == format) {
+                       } else if (format == SNDRV_PCM_FORMAT_S32_LE) {
                                data[0] = p32[tx_ptr];
                                data[0] = data[0]>>8;
                        }
 
                        iowrite32(data[0], dev->spdif_base + SPDIF_FIFO_ADDR);
                        period_pos++;
-                       if (++tx_ptr >= runtime->buffer_size) {
+                       if (++tx_ptr >= runtime->buffer_size)
                                tx_ptr = 0;
-                       }
                }
        }
 
-       *period_elapsed = period_pos >= runtime->period_size; 
-       return tx_ptr; 
+       *period_elapsed = period_pos >= runtime->period_size;
+       return tx_ptr;
 }
 
-static unsigned int sf_spdif_pcm_rx(struct sf_spdif_dev *dev, 
-               struct snd_pcm_runtime *runtime, unsigned int rx_ptr, 
-               bool *period_elapsed, snd_pcm_format_t format) 
-{ 
-       u16 (*p16)[2] = (void *)runtime->dma_area; 
-       u32 (*p32)[2] = (void *)runtime->dma_area; 
+static unsigned int sf_spdif_pcm_rx(struct sf_spdif_dev *dev,
+               struct snd_pcm_runtime *runtime, unsigned int rx_ptr,
+               bool *period_elapsed, snd_pcm_format_t format)
+{
+       u16 (*p16)[2] = (void *)runtime->dma_area;
+       u32 (*p32)[2] = (void *)runtime->dma_area;
        u32 data[2];
-       unsigned int period_pos = rx_ptr % runtime->period_size; 
-       int i; 
+       unsigned int period_pos = rx_ptr % runtime->period_size;
+       int i;
 
-       for (i = 0; i < dev->fifo_th; i++) { 
+       for (i = 0; i < dev->fifo_th; i++) {
                data[0] = ioread32(dev->spdif_base + SPDIF_FIFO_ADDR);
                data[1] = ioread32(dev->spdif_base + SPDIF_FIFO_ADDR);
-               if (SNDRV_PCM_FORMAT_S16_LE == format) {
+               if (format == SNDRV_PCM_FORMAT_S16_LE) {
                        p16[rx_ptr][0] = data[0]>>8;
                        p16[rx_ptr][1] = data[1]>>8;
-               } else if (SNDRV_PCM_FORMAT_S24_LE == format) {
+               } else if (format == SNDRV_PCM_FORMAT_S24_LE) {
                        p32[rx_ptr][0] = data[0];
                        p32[rx_ptr][1] = data[1];
-               } else if (SNDRV_PCM_FORMAT_S32_LE == format) {
+               } else if (format == SNDRV_PCM_FORMAT_S32_LE) {
                        p32[rx_ptr][0] = data[0]<<8;
                        p32[rx_ptr][1] = data[1]<<8;
-               } 
-               
-               period_pos++; 
-               if (++rx_ptr >= runtime->buffer_size) 
-                       rx_ptr = 0; 
-       } 
-       
-       *period_elapsed = period_pos >= runtime->period_size; 
-       return rx_ptr; 
+               }
+
+               period_pos++;
+               if (++rx_ptr >= runtime->buffer_size)
+                       rx_ptr = 0;
+       }
+
+       *period_elapsed = period_pos >= runtime->period_size;
+       return rx_ptr;
 }
 
 static const struct snd_pcm_hardware sf_pcm_hardware = {
@@ -296,12 +295,10 @@ static snd_pcm_uframes_t sf_pcm_pointer(struct snd_soc_component *component,
        struct sf_spdif_dev *dev = runtime->private_data;
        snd_pcm_uframes_t pos;
 
-       if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
+       if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
                pos = READ_ONCE(dev->tx_ptr);
-       }
-       else {
+       else
                pos = READ_ONCE(dev->rx_ptr);
-       }
 
        return pos < runtime->buffer_size ? pos : 0;
 }
@@ -317,7 +314,7 @@ static int sf_pcm_new(struct snd_soc_component *component,
 
        return 0;
 }
-                         
+
 static const struct snd_soc_component_driver sf_pcm_component = {
        .open           = sf_pcm_open,
        .close          = sf_pcm_close,