1
2
3
4
5
6
7
8 #ifndef __LPASS_H__
9 #define __LPASS_H__
10
11 #include <linux/clk.h>
12 #include <linux/compiler.h>
13 #include <linux/platform_device.h>
14 #include <linux/regmap.h>
15
16 #define LPASS_AHBIX_CLOCK_FREQUENCY 131072000
17 #define LPASS_MAX_MI2S_PORTS (8)
18 #define LPASS_MAX_DMA_CHANNELS (8)
19
20
21 struct lpass_data {
22
23
24 struct clk *ahbix_clk;
25
26
27 struct clk *mi2s_osr_clk[LPASS_MAX_MI2S_PORTS];
28
29
30 struct clk *mi2s_bit_clk[LPASS_MAX_MI2S_PORTS];
31
32
33 void __iomem *lpaif;
34
35
36 struct regmap *lpaif_map;
37
38
39 int lpaif_irq;
40
41
42 struct lpass_variant *variant;
43
44
45 unsigned long dma_ch_bit_map;
46
47
48 struct snd_pcm_substream *substream[LPASS_MAX_DMA_CHANNELS];
49
50
51 struct clk *pcnoc_mport_clk;
52 struct clk *pcnoc_sway_clk;
53
54 };
55
56
57 struct lpass_variant {
58 u32 i2sctrl_reg_base;
59 u32 i2sctrl_reg_stride;
60 u32 i2s_ports;
61 u32 irq_reg_base;
62 u32 irq_reg_stride;
63 u32 irq_ports;
64 u32 rdma_reg_base;
65 u32 rdma_reg_stride;
66 u32 rdma_channels;
67 u32 wrdma_reg_base;
68 u32 wrdma_reg_stride;
69 u32 wrdma_channels;
70
71
72
73
74
75 u32 dmactl_audif_start;
76 u32 wrdma_channel_start;
77
78 int (*init)(struct platform_device *pdev);
79 int (*exit)(struct platform_device *pdev);
80 int (*alloc_dma_channel)(struct lpass_data *data, int direction);
81 int (*free_dma_channel)(struct lpass_data *data, int ch);
82
83
84 struct snd_soc_dai_driver *dai_driver;
85 int num_dai;
86 const char * const *dai_osr_clk_names;
87 const char * const *dai_bit_clk_names;
88 };
89
90
91 int asoc_qcom_lpass_platform_register(struct platform_device *);
92 int asoc_qcom_lpass_cpu_platform_remove(struct platform_device *pdev);
93 int asoc_qcom_lpass_cpu_platform_probe(struct platform_device *pdev);
94 int asoc_qcom_lpass_cpu_dai_probe(struct snd_soc_dai *dai);
95 extern const struct snd_soc_dai_ops asoc_qcom_lpass_cpu_dai_ops;
96
97 #endif