blob: 0239c867ac1fff291a8378618c0efb44a8535445 [file] [log] [blame]
Bhalchandra Gajare87fef4c2013-02-19 14:57:03 -08001/* Copyright (c) 2013, 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 WCD9XXX_CODEC_COMMON
14
15#define WCD9XXX_CODEC_COMMON
16
Joonwoo Parka08e0552013-03-05 18:28:23 -080017#include "wcd9xxx-resmgr.h"
18
Bhalchandra Gajare87fef4c2013-02-19 14:57:03 -080019#define WCD9XXX_CLSH_REQ_ENABLE true
20#define WCD9XXX_CLSH_REQ_DISABLE false
21
22#define WCD9XXX_CLSH_EVENT_PRE_DAC 0x01
23#define WCD9XXX_CLSH_EVENT_POST_PA 0x02
24
25/* Basic states for Class H state machine.
26 * represented as a bit mask within a u8 data type
27 * bit 0: EAR mode
28 * bit 1: HPH Left mode
29 * bit 2: HPH Right mode
30 * bit 3: Lineout mode
31 * bit 4: Ultrasound mode
32 */
33#define WCD9XXX_CLSH_STATE_IDLE 0x00
34#define WCD9XXX_CLSH_STATE_EAR (0x01 << 0)
35#define WCD9XXX_CLSH_STATE_HPHL (0x01 << 1)
36#define WCD9XXX_CLSH_STATE_HPHR (0x01 << 2)
37#define WCD9XXX_CLSH_STATE_LO (0x01 << 3)
38#define NUM_CLSH_STATES ((0x01 << 4) - 1)
39
Damir Didjusto5f553e92013-10-02 14:54:31 -070040#define WCD9XXX_DMIC_SAMPLE_RATE_DIV_2 0x0
41#define WCD9XXX_DMIC_SAMPLE_RATE_DIV_3 0x1
42#define WCD9XXX_DMIC_SAMPLE_RATE_DIV_4 0x2
43
44#define WCD9XXX_DMIC_B1_CTL_DIV_2 0x00
45#define WCD9XXX_DMIC_B1_CTL_DIV_3 0x22
46#define WCD9XXX_DMIC_B1_CTL_DIV_4 0x44
47
48#define WCD9XXX_DMIC_B2_CTL_DIV_2 0x00
49#define WCD9XXX_DMIC_B2_CTL_DIV_3 0x02
50#define WCD9XXX_DMIC_B2_CTL_DIV_4 0x04
51
52#define WCD9XXX_ANC_DMIC_X2_ON 0x1
53#define WCD9XXX_ANC_DMIC_X2_OFF 0x0
54
Bhalchandra Gajare87fef4c2013-02-19 14:57:03 -080055/* Derived State: Bits 1 and 2 should be set for Headphone stereo */
56#define WCD9XXX_CLSH_STATE_HPH_ST (WCD9XXX_CLSH_STATE_HPHL | \
57 WCD9XXX_CLSH_STATE_HPHR)
58
59
60struct wcd9xxx_reg_mask_val {
61 u16 reg;
62 u8 mask;
63 u8 val;
64};
65
66/* Class H data that the codec driver will maintain */
67struct wcd9xxx_clsh_cdc_data {
68 u8 state;
69 int buck_mv;
Bhalchandra Gajare7c739522013-06-20 15:31:02 -070070 bool is_dynamic_vdd_cp;
Joonwoo Parka08e0552013-03-05 18:28:23 -080071 struct wcd9xxx_resmgr *resmgr;
Bhalchandra Gajare87fef4c2013-02-19 14:57:03 -080072};
73
Simmi Pateriyadf675e92013-04-05 01:15:54 +053074struct wcd9xxx_anc_header {
75 u32 reserved[3];
76 u32 num_anc_slots;
77};
Bhalchandra Gajare87fef4c2013-02-19 14:57:03 -080078
79enum wcd9xxx_buck_volt {
80 WCD9XXX_CDC_BUCK_UNSUPPORTED = 0,
81 WCD9XXX_CDC_BUCK_MV_1P8 = 1800000,
82 WCD9XXX_CDC_BUCK_MV_2P15 = 2150000,
83};
84
85extern void wcd9xxx_clsh_fsm(struct snd_soc_codec *codec,
86 struct wcd9xxx_clsh_cdc_data *cdc_clsh_d,
87 u8 req_state, bool req_type, u8 clsh_event);
88
Joonwoo Parka08e0552013-03-05 18:28:23 -080089extern void wcd9xxx_clsh_init(struct wcd9xxx_clsh_cdc_data *clsh,
90 struct wcd9xxx_resmgr *resmgr);
Bhalchandra Gajare87fef4c2013-02-19 14:57:03 -080091
Santosh Mardi93a69192013-07-03 23:37:29 +053092extern void wcd9xxx_clsh_imped_config(struct snd_soc_codec *codec,
93 int imped);
94
Kiran Kandia1bed422013-05-28 18:29:12 -070095enum wcd9xxx_codec_event {
96 WCD9XXX_CODEC_EVENT_CODEC_UP = 0,
97};
98
Phani Kumar Uppalapati01a77e12013-08-08 15:31:35 -070099struct wcd9xxx_register_save_node {
100 struct list_head lh;
101 u16 reg;
102 u16 value;
103};
104
105extern int wcd9xxx_soc_update_bits_push(struct snd_soc_codec *codec,
106 struct list_head *lh,
107 uint16_t reg, uint8_t mask,
108 uint8_t value, int delay);
109extern void wcd9xxx_restore_registers(struct snd_soc_codec *codec,
110 struct list_head *lh);
Damir Didjustod6aea992013-09-03 21:18:59 -0700111enum {
112 RESERVED = 0,
113 AANC_LPF_FF_FB = 1,
114 AANC_LPF_COEFF_MSB,
115 AANC_LPF_COEFF_LSB,
116 HW_MAD_AUDIO_ENABLE,
117 HW_MAD_ULTR_ENABLE,
118 HW_MAD_BEACON_ENABLE,
119 HW_MAD_AUDIO_SLEEP_TIME,
120 HW_MAD_ULTR_SLEEP_TIME,
121 HW_MAD_BEACON_SLEEP_TIME,
122 HW_MAD_TX_AUDIO_SWITCH_OFF,
123 HW_MAD_TX_ULTR_SWITCH_OFF,
124 HW_MAD_TX_BEACON_SWITCH_OFF,
125 MAD_AUDIO_INT_DEST_SELECT_REG,
126 MAD_ULT_INT_DEST_SELECT_REG,
127 MAD_BEACON_INT_DEST_SELECT_REG,
128 MAD_CLIP_INT_DEST_SELECT_REG,
129 MAD_VBAT_INT_DEST_SELECT_REG,
130 MAD_AUDIO_INT_MASK_REG,
131 MAD_ULT_INT_MASK_REG,
132 MAD_BEACON_INT_MASK_REG,
133 MAD_CLIP_INT_MASK_REG,
134 MAD_VBAT_INT_MASK_REG,
135 MAD_AUDIO_INT_STATUS_REG,
136 MAD_ULT_INT_STATUS_REG,
137 MAD_BEACON_INT_STATUS_REG,
138 MAD_CLIP_INT_STATUS_REG,
139 MAD_VBAT_INT_STATUS_REG,
140 MAD_AUDIO_INT_CLEAR_REG,
141 MAD_ULT_INT_CLEAR_REG,
142 MAD_BEACON_INT_CLEAR_REG,
143 MAD_CLIP_INT_CLEAR_REG,
144 MAD_VBAT_INT_CLEAR_REG,
145 SB_PGD_PORT_TX_WATERMARK_N,
146 SB_PGD_PORT_TX_ENABLE_N,
147 SB_PGD_PORT_RX_WATERMARK_N,
148 SB_PGD_PORT_RX_ENABLE_N,
149 SB_PGD_TX_PORTn_MULTI_CHNL_0,
150 SB_PGD_TX_PORTn_MULTI_CHNL_1,
151 SB_PGD_RX_PORTn_MULTI_CHNL_0,
152 SB_PGD_RX_PORTn_MULTI_CHNL_1,
153 AANC_FF_GAIN_ADAPTIVE,
154 AANC_FFGAIN_ADAPTIVE_EN,
155 AANC_GAIN_CONTROL,
156 SPKR_CLIP_PIPE_BANK_SEL,
157 SPKR_CLIPDET_VAL0,
158 SPKR_CLIPDET_VAL1,
159 SPKR_CLIPDET_VAL2,
160 SPKR_CLIPDET_VAL3,
161 SPKR_CLIPDET_VAL4,
162 SPKR_CLIPDET_VAL5,
163 SPKR_CLIPDET_VAL6,
164 SPKR_CLIPDET_VAL7,
165 MAX_CFG_REGISTERS,
166};
167
Bhalchandra Gajare87fef4c2013-02-19 14:57:03 -0800168#endif