blob: aa524918e64fbf7547e8291277b5bc829bae1baa [file] [log] [blame]
Laxminath Kasame562a362018-04-12 00:39:08 +05301/* Copyright (c) 2018, The Linux Foundation. All rights reserved.
2 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 */
12
13#ifndef BOLERO_CDC_H
14#define BOLERO_CDC_H
15
16#include <sound/soc.h>
17#include <linux/regmap.h>
18
19enum {
20 START_MACRO,
21 TX_MACRO = START_MACRO,
22 RX_MACRO,
23 WSA_MACRO,
24 VA_MACRO,
25 MAX_MACRO
26};
27
Laxminath Kasam2df2d612018-05-22 15:45:42 +053028enum mclk_mux {
29 MCLK_MUX0,
30 MCLK_MUX1,
31 MCLK_MUX_MAX
32};
33
Laxminath Kasam497a6512018-09-17 16:11:52 +053034enum {
35 BOLERO_ADC0 = 1,
36 BOLERO_ADC1,
37 BOLERO_ADC2,
38 BOLERO_ADC3,
39 BOLERO_ADC_MAX
40};
41
42enum {
43 BOLERO_MACRO_EVT_RX_MUTE = 1, /* for RX mute/unmute */
44 BOLERO_MACRO_EVT_IMPED_TRUE, /* for imped true */
45 BOLERO_MACRO_EVT_IMPED_FALSE, /* for imped false */
Laxminath Kasamfb0d6832018-09-22 01:49:52 +053046 BOLERO_MACRO_EVT_SSR_DOWN,
47 BOLERO_MACRO_EVT_SSR_UP,
48 BOLERO_MACRO_EVT_WAIT_VA_CLK_RESET
Laxminath Kasam497a6512018-09-17 16:11:52 +053049};
50
Laxminath Kasame562a362018-04-12 00:39:08 +053051struct macro_ops {
52 int (*init)(struct snd_soc_codec *codec);
53 int (*exit)(struct snd_soc_codec *codec);
54 u16 num_dais;
55 struct device *dev;
56 struct snd_soc_dai_driver *dai_ptr;
57 int (*mclk_fn)(struct device *dev, bool enable);
Laxminath Kasam497a6512018-09-17 16:11:52 +053058 int (*event_handler)(struct snd_soc_codec *codec, u16 event,
59 u32 data);
Laxminath Kasame562a362018-04-12 00:39:08 +053060 char __iomem *io_base;
61};
62
63#if IS_ENABLED(CONFIG_SND_SOC_BOLERO)
64int bolero_register_macro(struct device *dev, u16 macro_id,
65 struct macro_ops *ops);
66void bolero_unregister_macro(struct device *dev, u16 macro_id);
67struct device *bolero_get_device_ptr(struct device *dev, u16 macro_id);
Laxminath Kasam2df2d612018-05-22 15:45:42 +053068int bolero_request_clock(struct device *dev, u16 macro_id,
69 enum mclk_mux mclk_mux_id,
70 bool enable);
Laxminath Kasam21c8b222018-06-21 18:47:22 +053071int bolero_info_create_codec_entry(
72 struct snd_info_entry *codec_root,
73 struct snd_soc_codec *codec);
Laxminath Kasam497a6512018-09-17 16:11:52 +053074void bolero_clear_amic_tx_hold(struct device *dev, u16 adc_n);
Laxminath Kasame562a362018-04-12 00:39:08 +053075#else
76static inline int bolero_register_macro(struct device *dev,
77 u16 macro_id,
78 struct macro_ops *ops)
79{
80 return 0;
81}
82
83static inline void bolero_unregister_macro(struct device *dev, u16 macro_id)
84{
85}
86
87static inline struct device *bolero_get_device_ptr(struct device *dev,
Laxminath Kasam2df2d612018-05-22 15:45:42 +053088 u16 macro_id)
Laxminath Kasame562a362018-04-12 00:39:08 +053089{
90 return NULL;
91}
Laxminath Kasam21c8b222018-06-21 18:47:22 +053092
Laxminath Kasam2df2d612018-05-22 15:45:42 +053093static inline int bolero_request_clock(struct device *dev, u16 macro_id,
94 enum mclk_mux mclk_mux_id,
95 bool enable)
96{
97 return 0;
98}
Laxminath Kasam21c8b222018-06-21 18:47:22 +053099
100static int bolero_info_create_codec_entry(
101 struct snd_info_entry *codec_root,
102 struct snd_soc_codec *codec)
103{
104 return 0;
105}
Laxminath Kasam497a6512018-09-17 16:11:52 +0530106
107static inline void bolero_clear_amic_tx_hold(struct device *dev, u16 adc_n)
108{
109}
Laxminath Kasame562a362018-04-12 00:39:08 +0530110#endif /* CONFIG_SND_SOC_BOLERO */
111#endif /* BOLERO_CDC_H */