1*1a59d1b8SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
2ca26308cSMiguel Aguilar /*
3ca26308cSMiguel Aguilar  * DaVinci Voice Codec Core Interface for TI platforms
4ca26308cSMiguel Aguilar  *
5ca26308cSMiguel Aguilar  * Copyright (C) 2010 Texas Instruments, Inc
6ca26308cSMiguel Aguilar  *
7ca26308cSMiguel Aguilar  * Author: Miguel Aguilar <[email protected]>
8ca26308cSMiguel Aguilar  */
9ca26308cSMiguel Aguilar 
10ca26308cSMiguel Aguilar #ifndef __LINUX_MFD_DAVINCI_VOICECODEC_H_
11c593aca4SRasmus Villemoes #define __LINUX_MFD_DAVINCI_VOICECODEC_H_
12ca26308cSMiguel Aguilar 
13ca26308cSMiguel Aguilar #include <linux/kernel.h>
14ca26308cSMiguel Aguilar #include <linux/platform_device.h>
15ca26308cSMiguel Aguilar #include <linux/mfd/core.h>
163ad7a42dSMatt Porter #include <linux/platform_data/edma.h>
17ca26308cSMiguel Aguilar 
18921a2c87SMark Brown struct regmap;
19921a2c87SMark Brown 
20ca26308cSMiguel Aguilar /*
21ca26308cSMiguel Aguilar  * Register values.
22ca26308cSMiguel Aguilar  */
23ca26308cSMiguel Aguilar #define DAVINCI_VC_PID			0x00
24ca26308cSMiguel Aguilar #define DAVINCI_VC_CTRL			0x04
25ca26308cSMiguel Aguilar #define DAVINCI_VC_INTEN		0x08
26ca26308cSMiguel Aguilar #define DAVINCI_VC_INTSTATUS		0x0c
27ca26308cSMiguel Aguilar #define DAVINCI_VC_INTCLR		0x10
28ca26308cSMiguel Aguilar #define DAVINCI_VC_EMUL_CTRL		0x14
29ca26308cSMiguel Aguilar #define DAVINCI_VC_RFIFO		0x20
30ca26308cSMiguel Aguilar #define DAVINCI_VC_WFIFO		0x24
31ca26308cSMiguel Aguilar #define DAVINCI_VC_FIFOSTAT		0x28
32ca26308cSMiguel Aguilar #define DAVINCI_VC_TST_CTRL		0x2C
33ca26308cSMiguel Aguilar #define DAVINCI_VC_REG05		0x94
34ca26308cSMiguel Aguilar #define DAVINCI_VC_REG09		0xA4
35ca26308cSMiguel Aguilar #define DAVINCI_VC_REG12		0xB0
36ca26308cSMiguel Aguilar 
37ca26308cSMiguel Aguilar /* DAVINCI_VC_CTRL bit fields */
38ca26308cSMiguel Aguilar #define DAVINCI_VC_CTRL_MASK		0x5500
39ca26308cSMiguel Aguilar #define DAVINCI_VC_CTRL_RSTADC		BIT(0)
40ca26308cSMiguel Aguilar #define DAVINCI_VC_CTRL_RSTDAC		BIT(1)
41ca26308cSMiguel Aguilar #define DAVINCI_VC_CTRL_RD_BITS_8	BIT(4)
42ca26308cSMiguel Aguilar #define DAVINCI_VC_CTRL_RD_UNSIGNED	BIT(5)
43ca26308cSMiguel Aguilar #define DAVINCI_VC_CTRL_WD_BITS_8	BIT(6)
44ca26308cSMiguel Aguilar #define DAVINCI_VC_CTRL_WD_UNSIGNED	BIT(7)
45ca26308cSMiguel Aguilar #define DAVINCI_VC_CTRL_RFIFOEN		BIT(8)
46ca26308cSMiguel Aguilar #define DAVINCI_VC_CTRL_RFIFOCL		BIT(9)
47ca26308cSMiguel Aguilar #define DAVINCI_VC_CTRL_RFIFOMD_WORD_1	BIT(10)
48ca26308cSMiguel Aguilar #define DAVINCI_VC_CTRL_WFIFOEN		BIT(12)
49ca26308cSMiguel Aguilar #define DAVINCI_VC_CTRL_WFIFOCL		BIT(13)
50ca26308cSMiguel Aguilar #define DAVINCI_VC_CTRL_WFIFOMD_WORD_1	BIT(14)
51ca26308cSMiguel Aguilar 
52ca26308cSMiguel Aguilar /* DAVINCI_VC_INT bit fields */
53ca26308cSMiguel Aguilar #define DAVINCI_VC_INT_MASK		0x3F
54ca26308cSMiguel Aguilar #define DAVINCI_VC_INT_RDRDY_MASK	BIT(0)
55ca26308cSMiguel Aguilar #define DAVINCI_VC_INT_RERROVF_MASK	BIT(1)
56ca26308cSMiguel Aguilar #define DAVINCI_VC_INT_RERRUDR_MASK	BIT(2)
57ca26308cSMiguel Aguilar #define DAVINCI_VC_INT_WDREQ_MASK	BIT(3)
58ca26308cSMiguel Aguilar #define DAVINCI_VC_INT_WERROVF_MASKBIT	BIT(4)
59ca26308cSMiguel Aguilar #define DAVINCI_VC_INT_WERRUDR_MASK	BIT(5)
60ca26308cSMiguel Aguilar 
61ca26308cSMiguel Aguilar /* DAVINCI_VC_REG05 bit fields */
62ca26308cSMiguel Aguilar #define DAVINCI_VC_REG05_PGA_GAIN	0x07
63ca26308cSMiguel Aguilar 
64ca26308cSMiguel Aguilar /* DAVINCI_VC_REG09 bit fields */
65ca26308cSMiguel Aguilar #define DAVINCI_VC_REG09_MUTE		0x40
66ca26308cSMiguel Aguilar #define DAVINCI_VC_REG09_DIG_ATTEN	0x3F
67ca26308cSMiguel Aguilar 
68ca26308cSMiguel Aguilar /* DAVINCI_VC_REG12 bit fields */
69ca26308cSMiguel Aguilar #define DAVINCI_VC_REG12_POWER_ALL_ON	0xFD
70ca26308cSMiguel Aguilar #define DAVINCI_VC_REG12_POWER_ALL_OFF	0x00
71ca26308cSMiguel Aguilar 
72ca26308cSMiguel Aguilar #define DAVINCI_VC_CELLS		2
73ca26308cSMiguel Aguilar 
74ca26308cSMiguel Aguilar enum davinci_vc_cells {
75ca26308cSMiguel Aguilar 	DAVINCI_VC_VCIF_CELL,
76ca26308cSMiguel Aguilar 	DAVINCI_VC_CQ93VC_CELL,
77ca26308cSMiguel Aguilar };
78ca26308cSMiguel Aguilar 
79ca26308cSMiguel Aguilar struct davinci_vcif {
80ca26308cSMiguel Aguilar 	struct platform_device	*pdev;
81ca26308cSMiguel Aguilar 	u32 dma_tx_channel;
82ca26308cSMiguel Aguilar 	u32 dma_rx_channel;
83ca26308cSMiguel Aguilar 	dma_addr_t dma_tx_addr;
84ca26308cSMiguel Aguilar 	dma_addr_t dma_rx_addr;
85ca26308cSMiguel Aguilar };
86ca26308cSMiguel Aguilar 
87ca26308cSMiguel Aguilar struct davinci_vc {
88ca26308cSMiguel Aguilar 	/* Device data */
89ca26308cSMiguel Aguilar 	struct device *dev;
90ca26308cSMiguel Aguilar 	struct platform_device *pdev;
91ca26308cSMiguel Aguilar 	struct clk *clk;
92ca26308cSMiguel Aguilar 
93ca26308cSMiguel Aguilar 	/* Memory resources */
94ca26308cSMiguel Aguilar 	void __iomem *base;
95921a2c87SMark Brown 	struct regmap *regmap;
96ca26308cSMiguel Aguilar 
97ca26308cSMiguel Aguilar 	/* MFD cells */
98ca26308cSMiguel Aguilar 	struct mfd_cell cells[DAVINCI_VC_CELLS];
99ca26308cSMiguel Aguilar 
100ca26308cSMiguel Aguilar 	/* Client devices */
101ca26308cSMiguel Aguilar 	struct davinci_vcif davinci_vcif;
102ca26308cSMiguel Aguilar };
103ca26308cSMiguel Aguilar 
104ca26308cSMiguel Aguilar #endif
105