blob: 3144d88b6c5a75c8e6f57523c566c1be9bf320e1 [file] [log] [blame]
Meng Wang43bbb872018-12-10 12:32:05 +08001/* SPDX-License-Identifier: GPL-2.0-only */
Sudheer Papothif4155002019-12-05 01:36:13 +05302/* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
Laxminath Kasame562a362018-04-12 00:39:08 +05303 */
4
5#ifndef BOLERO_CDC_H
6#define BOLERO_CDC_H
7
8#include <sound/soc.h>
9#include <linux/regmap.h>
10
Laxminath Kasamf1623022019-10-11 18:20:19 +053011#define BOLERO_VERSION_1_0 0x0001
12#define BOLERO_VERSION_1_1 0x0002
13#define BOLERO_VERSION_1_2 0x0003
14#define BOLERO_VERSION_2_0 0x0004
15#define BOLERO_VERSION_2_1 0x0005
16
Laxminath Kasame562a362018-04-12 00:39:08 +053017enum {
18 START_MACRO,
19 TX_MACRO = START_MACRO,
20 RX_MACRO,
21 WSA_MACRO,
22 VA_MACRO,
23 MAX_MACRO
24};
25
Laxminath Kasam2df2d612018-05-22 15:45:42 +053026enum mclk_mux {
27 MCLK_MUX0,
28 MCLK_MUX1,
29 MCLK_MUX_MAX
30};
31
Laxminath Kasam497a6512018-09-17 16:11:52 +053032enum {
33 BOLERO_ADC0 = 1,
34 BOLERO_ADC1,
35 BOLERO_ADC2,
36 BOLERO_ADC3,
37 BOLERO_ADC_MAX
38};
39
40enum {
Sudheer Papothif4155002019-12-05 01:36:13 +053041 CLK_SRC_TX_RCG = 0,
42 CLK_SRC_VA_RCG,
43};
44
45enum {
Laxminath Kasam497a6512018-09-17 16:11:52 +053046 BOLERO_MACRO_EVT_RX_MUTE = 1, /* for RX mute/unmute */
47 BOLERO_MACRO_EVT_IMPED_TRUE, /* for imped true */
48 BOLERO_MACRO_EVT_IMPED_FALSE, /* for imped false */
Laxminath Kasamfb0d6832018-09-22 01:49:52 +053049 BOLERO_MACRO_EVT_SSR_DOWN,
50 BOLERO_MACRO_EVT_SSR_UP,
Aditya Bavanaric4e96122018-11-14 14:46:38 +053051 BOLERO_MACRO_EVT_WAIT_VA_CLK_RESET,
Meng Wang8ef0cc22019-05-08 15:12:56 +080052 BOLERO_MACRO_EVT_CLK_RESET,
Karthikeyan Manic14c27a2019-06-21 14:11:34 -070053 BOLERO_MACRO_EVT_REG_WAKE_IRQ,
Vatsal Buchad06525f2019-10-14 23:14:12 +053054 BOLERO_MACRO_EVT_RX_COMPANDER_SOFT_RST,
55 BOLERO_MACRO_EVT_BCS_CLK_OFF
Laxminath Kasam497a6512018-09-17 16:11:52 +053056};
57
Sudheer Papothid50a5812019-11-21 07:24:42 +053058enum {
59 DMIC_TX = 0,
60 DMIC_VA = 1,
61
62};
63
64enum {
65 DMIC0 = 0,
66 DMIC1,
67 DMIC2,
68 DMIC3,
69 DMIC4,
70 DMIC5,
71 DMIC6,
72 DMIC7,
73 DMIC_MAX
74};
75
Laxminath Kasame562a362018-04-12 00:39:08 +053076struct macro_ops {
Meng Wang15c825d2018-09-06 10:49:18 +080077 int (*init)(struct snd_soc_component *component);
78 int (*exit)(struct snd_soc_component *component);
Laxminath Kasame562a362018-04-12 00:39:08 +053079 u16 num_dais;
80 struct device *dev;
81 struct snd_soc_dai_driver *dai_ptr;
82 int (*mclk_fn)(struct device *dev, bool enable);
Meng Wang15c825d2018-09-06 10:49:18 +080083 int (*event_handler)(struct snd_soc_component *component, u16 event,
Laxminath Kasam497a6512018-09-17 16:11:52 +053084 u32 data);
Meng Wang15c825d2018-09-06 10:49:18 +080085 int (*reg_wake_irq)(struct snd_soc_component *component, u32 data);
Sudheer Papothia3e969d2018-10-27 06:22:10 +053086 int (*set_port_map)(struct snd_soc_component *component, u32 uc,
87 u32 size, void *data);
Sudheer Papothid50a5812019-11-21 07:24:42 +053088 int (*clk_div_get)(struct snd_soc_component *component);
Sudheer Papothif4155002019-12-05 01:36:13 +053089 int (*clk_switch)(struct snd_soc_component *component, int clk_src);
Sudheer Papothi06a4c642019-08-08 05:17:46 +053090 int (*reg_evt_listener)(struct snd_soc_component *component, bool en);
Sudheer Papothifc3adb02019-11-24 10:14:21 +053091 int (*clk_enable)(struct snd_soc_component *c, bool en);
Laxminath Kasame562a362018-04-12 00:39:08 +053092 char __iomem *io_base;
Vidyakumar Athota5d45f4c2019-03-10 22:35:07 -070093 u16 clk_id_req;
94 u16 default_clk_id;
Laxminath Kasame562a362018-04-12 00:39:08 +053095};
96
Vidyakumar Athota5d45f4c2019-03-10 22:35:07 -070097typedef int (*rsc_clk_cb_t)(struct device *dev, u16 event);
98
Laxminath Kasame562a362018-04-12 00:39:08 +053099#if IS_ENABLED(CONFIG_SND_SOC_BOLERO)
Vidyakumar Athota5d45f4c2019-03-10 22:35:07 -0700100int bolero_register_res_clk(struct device *dev, rsc_clk_cb_t cb);
101void bolero_unregister_res_clk(struct device *dev);
Laxminath Kasame562a362018-04-12 00:39:08 +0530102int bolero_register_macro(struct device *dev, u16 macro_id,
103 struct macro_ops *ops);
104void bolero_unregister_macro(struct device *dev, u16 macro_id);
105struct device *bolero_get_device_ptr(struct device *dev, u16 macro_id);
Vidyakumar Athota5d45f4c2019-03-10 22:35:07 -0700106struct device *bolero_get_rsc_clk_device_ptr(struct device *dev);
Laxminath Kasam21c8b222018-06-21 18:47:22 +0530107int bolero_info_create_codec_entry(
108 struct snd_info_entry *codec_root,
Meng Wang15c825d2018-09-06 10:49:18 +0800109 struct snd_soc_component *component);
110int bolero_register_wake_irq(struct snd_soc_component *component, u32 data);
Laxminath Kasam497a6512018-09-17 16:11:52 +0530111void bolero_clear_amic_tx_hold(struct device *dev, u16 adc_n);
Mangesh Kunchamwar920015c2018-11-13 16:16:35 +0530112int bolero_runtime_resume(struct device *dev);
113int bolero_runtime_suspend(struct device *dev);
Sudheer Papothia3e969d2018-10-27 06:22:10 +0530114int bolero_set_port_map(struct snd_soc_component *component, u32 size, void *data);
Sudheer Papothif4155002019-12-05 01:36:13 +0530115int bolero_tx_clk_switch(struct snd_soc_component *component, int clk_src);
Sudheer Papothi06a4c642019-08-08 05:17:46 +0530116int bolero_register_event_listener(struct snd_soc_component *component,
117 bool enable);
Laxminath Kasam069df142019-09-17 23:43:34 +0530118void bolero_wsa_pa_on(struct device *dev);
Aditya Bavanarid577af92019-10-03 21:09:19 +0530119bool bolero_check_core_votes(struct device *dev);
Sudheer Papothifc3adb02019-11-24 10:14:21 +0530120int bolero_tx_mclk_enable(struct snd_soc_component *c, bool enable);
Laxminath Kasamf1623022019-10-11 18:20:19 +0530121int bolero_get_version(struct device *dev);
Sudheer Papothid50a5812019-11-21 07:24:42 +0530122int bolero_dmic_clk_enable(struct snd_soc_component *component,
123 u32 dmic, u32 tx_mode, bool enable);
Laxminath Kasame562a362018-04-12 00:39:08 +0530124#else
Vidyakumar Athota5d45f4c2019-03-10 22:35:07 -0700125static inline int bolero_register_res_clk(struct device *dev, rsc_clk_cb_t cb)
126{
127 return 0;
128}
129static inline void bolero_unregister_res_clk(struct device *dev)
130{
131}
132
Laxminath Kasame562a362018-04-12 00:39:08 +0530133static inline int bolero_register_macro(struct device *dev,
134 u16 macro_id,
135 struct macro_ops *ops)
136{
137 return 0;
138}
139
140static inline void bolero_unregister_macro(struct device *dev, u16 macro_id)
141{
142}
143
144static inline struct device *bolero_get_device_ptr(struct device *dev,
Laxminath Kasam2df2d612018-05-22 15:45:42 +0530145 u16 macro_id)
Laxminath Kasame562a362018-04-12 00:39:08 +0530146{
147 return NULL;
148}
Laxminath Kasam21c8b222018-06-21 18:47:22 +0530149
Laxminath Kasam21c8b222018-06-21 18:47:22 +0530150static int bolero_info_create_codec_entry(
151 struct snd_info_entry *codec_root,
Meng Wang15c825d2018-09-06 10:49:18 +0800152 struct snd_soc_component *component)
Laxminath Kasam21c8b222018-06-21 18:47:22 +0530153{
154 return 0;
155}
Laxminath Kasam497a6512018-09-17 16:11:52 +0530156
157static inline void bolero_clear_amic_tx_hold(struct device *dev, u16 adc_n)
158{
159}
Aditya Bavanaric4e96122018-11-14 14:46:38 +0530160
Meng Wang15c825d2018-09-06 10:49:18 +0800161static inline int bolero_register_wake_irq(struct snd_soc_component *component,
Aditya Bavanaric4e96122018-11-14 14:46:38 +0530162 u32 data)
Sudheer Papothia3e969d2018-10-27 06:22:10 +0530163{
164 return 0;
165}
166
Mangesh Kunchamwar920015c2018-11-13 16:16:35 +0530167static inline int bolero_runtime_resume(struct device *dev)
168{
169 return 0;
170}
Sudheer Papothia3e969d2018-10-27 06:22:10 +0530171
Mangesh Kunchamwar920015c2018-11-13 16:16:35 +0530172static int bolero_runtime_suspend(struct device *dev)
Aditya Bavanaric4e96122018-11-14 14:46:38 +0530173{
174 return 0;
175}
Sudheer Papothia3e969d2018-10-27 06:22:10 +0530176
177static inline int bolero_set_port_map(struct snd_soc_component *component,
178 u32 size, void *data)
179{
180 return 0;
181}
Sudheer Papothi6cc7f522019-06-28 11:04:03 +0530182
Sudheer Papothif4155002019-12-05 01:36:13 +0530183static inline int bolero_tx_clk_switch(struct snd_soc_component *component,
184 int clk_src)
Sudheer Papothi6cc7f522019-06-28 11:04:03 +0530185{
186 return 0;
187}
188
Sudheer Papothi06a4c642019-08-08 05:17:46 +0530189static inline int bolero_register_event_listener(
190 struct snd_soc_component *component,
191 bool enable)
192{
193 return 0;
194}
195
Laxminath Kasam069df142019-09-17 23:43:34 +0530196static void bolero_wsa_pa_on(struct device *dev)
197{
198}
Aditya Bavanarid577af92019-10-03 21:09:19 +0530199
200static inline bool bolero_check_core_votes(struct device *dev)
201{
202 return false;
203}
Laxminath Kasamf1623022019-10-11 18:20:19 +0530204
205static int bolero_get_version(struct device *dev)
206{
207 return 0;
208}
Sudheer Papothid50a5812019-11-21 07:24:42 +0530209
210static int bolero_dmic_clk_enable(struct snd_soc_component *component,
211 u32 dmic, u32 tx_mode, bool enable)
212{
213 return 0;
214}
Sudheer Papothifc3adb02019-11-24 10:14:21 +0530215static int bolero_tx_mclk_enable(struct snd_soc_component *c, bool enable)
216{
217 return 0;
218}
Laxminath Kasame562a362018-04-12 00:39:08 +0530219#endif /* CONFIG_SND_SOC_BOLERO */
220#endif /* BOLERO_CDC_H */