Re: [PATCH 2/2] soc: sprd: Add Spreadtrum multi-channel data transfer support

2019-04-21 Thread Baolin Wang
Hi Mark,

On Fri, 19 Apr 2019 at 22:50, Mark Brown  wrote:
>
> On Fri, Apr 19, 2019 at 06:54:32PM +0800, Baolin Wang wrote:
> > On Spreadtrum platform, the audio subsystem will use the multi-channel
> > data transfer controller to transfer sound stream between audio subsystem
> > and other AP/CP subsystem.
> >
> > It can support 10 DAC channel and 10 ADC channel, and each channel has
> > 512 bytes depth data fifo. Moreover each channel can be used DMA mode
> > or interrupt mode to transfer data.
>
> Acked-by: Mark Brown 

Thanks for your reviewing.

>
> However if there's no non-audio users of this DSP then it's probably
> better to just move the driver into sound/soc.

Yes, only audio will use this driver. OK, I will move it into
sound/soc if no other objections. Thanks.

-- 
Baolin Wang
Best Regards


[PATCH 2/2] soc: sprd: Add Spreadtrum multi-channel data transfer support

2019-04-19 Thread Baolin Wang
On Spreadtrum platform, the audio subsystem will use the multi-channel
data transfer controller to transfer sound stream between audio subsystem
and other AP/CP subsystem.

It can support 10 DAC channel and 10 ADC channel, and each channel has
512 bytes depth data fifo. Moreover each channel can be used DMA mode
or interrupt mode to transfer data.

Signed-off-by: Baolin Wang 
---
 drivers/soc/Kconfig   |1 +
 drivers/soc/Makefile  |1 +
 drivers/soc/sprd/Kconfig  |   12 +
 drivers/soc/sprd/Makefile |5 +
 drivers/soc/sprd/mcdt.c   | 1010 +
 include/linux/soc/sprd/mcdt.h |  107 +
 6 files changed, 1136 insertions(+)
 create mode 100644 drivers/soc/sprd/Kconfig
 create mode 100644 drivers/soc/sprd/Makefile
 create mode 100644 drivers/soc/sprd/mcdt.c
 create mode 100644 include/linux/soc/sprd/mcdt.h

diff --git a/drivers/soc/Kconfig b/drivers/soc/Kconfig
index c07b4a8..4fc89de 100644
--- a/drivers/soc/Kconfig
+++ b/drivers/soc/Kconfig
@@ -11,6 +11,7 @@ source "drivers/soc/qcom/Kconfig"
 source "drivers/soc/renesas/Kconfig"
 source "drivers/soc/rockchip/Kconfig"
 source "drivers/soc/samsung/Kconfig"
+source "drivers/soc/sprd/Kconfig"
 source "drivers/soc/sunxi/Kconfig"
 source "drivers/soc/tegra/Kconfig"
 source "drivers/soc/ti/Kconfig"
diff --git a/drivers/soc/Makefile b/drivers/soc/Makefile
index 90b686e..fce8249 100644
--- a/drivers/soc/Makefile
+++ b/drivers/soc/Makefile
@@ -18,6 +18,7 @@ obj-y += qcom/
 obj-y  += renesas/
 obj-$(CONFIG_ARCH_ROCKCHIP)+= rockchip/
 obj-$(CONFIG_SOC_SAMSUNG)  += samsung/
+obj-y  += sprd/
 obj-y  += sunxi/
 obj-$(CONFIG_ARCH_TEGRA)   += tegra/
 obj-$(CONFIG_SOC_TI)   += ti/
diff --git a/drivers/soc/sprd/Kconfig b/drivers/soc/sprd/Kconfig
new file mode 100644
index 000..95fb7fb
--- /dev/null
+++ b/drivers/soc/sprd/Kconfig
@@ -0,0 +1,12 @@
+if ARCH_SPRD || COMPILE_TEST
+
+config SPRD_MCDT
+   bool "Spreadtrum multi-channel data transfer support"
+   help
+ Say y here to enable multi-channel data transfer support. It
+ is used for sound stream transmission between audio subsystem
+ and other AP/CP subsystem.
+
+ If unsure, say N.
+
+endif
diff --git a/drivers/soc/sprd/Makefile b/drivers/soc/sprd/Makefile
new file mode 100644
index 000..696ba27
--- /dev/null
+++ b/drivers/soc/sprd/Makefile
@@ -0,0 +1,5 @@
+#
+# Spreadtrum Soc drivers
+#
+
+obj-$(CONFIG_SPRD_MCDT) += mcdt.o
diff --git a/drivers/soc/sprd/mcdt.c b/drivers/soc/sprd/mcdt.c
new file mode 100644
index 000..2377b29
--- /dev/null
+++ b/drivers/soc/sprd/mcdt.c
@@ -0,0 +1,1010 @@
+// SPDX-License-Identifier: GPL-2.0
+// Copyright (C) 2019 Spreadtrum Communications Inc.
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+/* MCDT registers definition */
+#define MCDT_CH0_TXD   0x0
+#define MCDT_CH0_RXD   0x28
+#define MCDT_DAC0_WTMK 0x60
+#define MCDT_ADC0_WTMK 0x88
+#define MCDT_DMA_EN0xb0
+
+#define MCDT_INT_EN0   0xb4
+#define MCDT_INT_EN1   0xb8
+#define MCDT_INT_EN2   0xbc
+
+#define MCDT_INT_CLR0  0xc0
+#define MCDT_INT_CLR1  0xc4
+#define MCDT_INT_CLR2  0xc8
+
+#define MCDT_INT_RAW1  0xcc
+#define MCDT_INT_RAW2  0xd0
+#define MCDT_INT_RAW3  0xd4
+
+#define MCDT_INT_MSK1  0xd8
+#define MCDT_INT_MSK2  0xdc
+#define MCDT_INT_MSK3  0xe0
+
+#define MCDT_DAC0_FIFO_ADDR_ST 0xe4
+#define MCDT_ADC0_FIFO_ADDR_ST 0xe8
+
+#define MCDT_CH_FIFO_ST0   0x134
+#define MCDT_CH_FIFO_ST1   0x138
+#define MCDT_CH_FIFO_ST2   0x13c
+
+#define MCDT_INT_MSK_CFG0  0x140
+#define MCDT_INT_MSK_CFG1  0x144
+
+#define MCDT_DMA_CFG0  0x148
+#define MCDT_FIFO_CLR  0x14c
+#define MCDT_DMA_CFG1  0x150
+#define MCDT_DMA_CFG2  0x154
+#define MCDT_DMA_CFG3  0x158
+#define MCDT_DMA_CFG4  0x15c
+#define MCDT_DMA_CFG5  0x160
+
+/* Channel water mark definition */
+#define MCDT_CH_FIFO_AE_SHIFT  16
+#define MCDT_CH_FIFO_AE_MASK   GENMASK(24, 16)
+#define MCDT_CH_FIFO_AF_MASK   GENMASK(8, 0)
+
+/* DMA channel select definition */
+#define MCDT_DMA_CH0_SEL_MASK  GENMASK(3, 0)
+#define MCDT_DMA_CH0_SEL_SHIFT 0
+#define MCDT_DMA_CH1_SEL_MASK  GENMASK(7, 4)
+#define MCDT_DMA_CH1_SEL_SHIFT 4
+#define MCDT_DMA_CH2_SEL_MASK  GENMASK(11, 8)
+#define MCDT_DMA_CH2_SEL_SHIFT 8
+#define MCDT_DMA_CH3_SEL_MASK  GENMASK(15, 12)
+#define MCDT_DMA_CH3_SEL_SHIFT 12
+#define MCDT_DMA_CH4_SEL_MASK  GENMASK(19, 16)
+#define MCDT_DMA_CH4_SEL_SHIFT 16
+#define MCDT_DAC_DMA_SHIFT 16
+
+/* DMA channel ACK select definition */
+#define MCDT_DMA_ACK_SEL_MASK  GENMASK(3, 0)
+
+/* Channel FIFO definition */
+#define MCDT_CH_FIFO_ADDR_SHIFT16
+#define 

Re: [PATCH 2/2] soc: sprd: Add Spreadtrum multi-channel data transfer support

2019-04-19 Thread Mark Brown
On Fri, Apr 19, 2019 at 06:54:32PM +0800, Baolin Wang wrote:
> On Spreadtrum platform, the audio subsystem will use the multi-channel
> data transfer controller to transfer sound stream between audio subsystem
> and other AP/CP subsystem.
> 
> It can support 10 DAC channel and 10 ADC channel, and each channel has
> 512 bytes depth data fifo. Moreover each channel can be used DMA mode
> or interrupt mode to transfer data.

Acked-by: Mark Brown 

However if there's no non-audio users of this DSP then it's probably
better to just move the driver into sound/soc.


signature.asc
Description: PGP signature