0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef __DA7219_AAD_H
0011 #define __DA7219_AAD_H
0012
0013 #include <linux/timer.h>
0014 #include <sound/soc.h>
0015 #include <sound/jack.h>
0016 #include <sound/da7219-aad.h>
0017
0018
0019
0020
0021
0022 #define DA7219_ACCDET_STATUS_A 0xC0
0023 #define DA7219_ACCDET_STATUS_B 0xC1
0024 #define DA7219_ACCDET_IRQ_EVENT_A 0xC2
0025 #define DA7219_ACCDET_IRQ_EVENT_B 0xC3
0026 #define DA7219_ACCDET_IRQ_MASK_A 0xC4
0027 #define DA7219_ACCDET_IRQ_MASK_B 0xC5
0028 #define DA7219_ACCDET_CONFIG_1 0xC6
0029 #define DA7219_ACCDET_CONFIG_2 0xC7
0030 #define DA7219_ACCDET_CONFIG_3 0xC8
0031 #define DA7219_ACCDET_CONFIG_4 0xC9
0032 #define DA7219_ACCDET_CONFIG_5 0xCA
0033 #define DA7219_ACCDET_CONFIG_6 0xCB
0034 #define DA7219_ACCDET_CONFIG_7 0xCC
0035 #define DA7219_ACCDET_CONFIG_8 0xCD
0036
0037
0038
0039
0040
0041
0042
0043 #define DA7219_JACK_INSERTION_STS_SHIFT 0
0044 #define DA7219_JACK_INSERTION_STS_MASK (0x1 << 0)
0045 #define DA7219_JACK_TYPE_STS_SHIFT 1
0046 #define DA7219_JACK_TYPE_STS_MASK (0x1 << 1)
0047 #define DA7219_JACK_PIN_ORDER_STS_SHIFT 2
0048 #define DA7219_JACK_PIN_ORDER_STS_MASK (0x1 << 2)
0049 #define DA7219_MICBIAS_UP_STS_SHIFT 3
0050 #define DA7219_MICBIAS_UP_STS_MASK (0x1 << 3)
0051
0052
0053 #define DA7219_BUTTON_TYPE_STS_SHIFT 0
0054 #define DA7219_BUTTON_TYPE_STS_MASK (0xFF << 0)
0055
0056
0057 #define DA7219_E_JACK_INSERTED_SHIFT 0
0058 #define DA7219_E_JACK_INSERTED_MASK (0x1 << 0)
0059 #define DA7219_E_JACK_REMOVED_SHIFT 1
0060 #define DA7219_E_JACK_REMOVED_MASK (0x1 << 1)
0061 #define DA7219_E_JACK_DETECT_COMPLETE_SHIFT 2
0062 #define DA7219_E_JACK_DETECT_COMPLETE_MASK (0x1 << 2)
0063
0064
0065 #define DA7219_E_BUTTON_A_PRESSED_SHIFT 0
0066 #define DA7219_E_BUTTON_A_PRESSED_MASK (0x1 << 0)
0067 #define DA7219_E_BUTTON_B_PRESSED_SHIFT 1
0068 #define DA7219_E_BUTTON_B_PRESSED_MASK (0x1 << 1)
0069 #define DA7219_E_BUTTON_C_PRESSED_SHIFT 2
0070 #define DA7219_E_BUTTON_C_PRESSED_MASK (0x1 << 2)
0071 #define DA7219_E_BUTTON_D_PRESSED_SHIFT 3
0072 #define DA7219_E_BUTTON_D_PRESSED_MASK (0x1 << 3)
0073 #define DA7219_E_BUTTON_D_RELEASED_SHIFT 4
0074 #define DA7219_E_BUTTON_D_RELEASED_MASK (0x1 << 4)
0075 #define DA7219_E_BUTTON_C_RELEASED_SHIFT 5
0076 #define DA7219_E_BUTTON_C_RELEASED_MASK (0x1 << 5)
0077 #define DA7219_E_BUTTON_B_RELEASED_SHIFT 6
0078 #define DA7219_E_BUTTON_B_RELEASED_MASK (0x1 << 6)
0079 #define DA7219_E_BUTTON_A_RELEASED_SHIFT 7
0080 #define DA7219_E_BUTTON_A_RELEASED_MASK (0x1 << 7)
0081
0082
0083 #define DA7219_M_JACK_INSERTED_SHIFT 0
0084 #define DA7219_M_JACK_INSERTED_MASK (0x1 << 0)
0085 #define DA7219_M_JACK_REMOVED_SHIFT 1
0086 #define DA7219_M_JACK_REMOVED_MASK (0x1 << 1)
0087 #define DA7219_M_JACK_DETECT_COMPLETE_SHIFT 2
0088 #define DA7219_M_JACK_DETECT_COMPLETE_MASK (0x1 << 2)
0089
0090
0091 #define DA7219_M_BUTTON_A_PRESSED_SHIFT 0
0092 #define DA7219_M_BUTTON_A_PRESSED_MASK (0x1 << 0)
0093 #define DA7219_M_BUTTON_B_PRESSED_SHIFT 1
0094 #define DA7219_M_BUTTON_B_PRESSED_MASK (0x1 << 1)
0095 #define DA7219_M_BUTTON_C_PRESSED_SHIFT 2
0096 #define DA7219_M_BUTTON_C_PRESSED_MASK (0x1 << 2)
0097 #define DA7219_M_BUTTON_D_PRESSED_SHIFT 3
0098 #define DA7219_M_BUTTON_D_PRESSED_MASK (0x1 << 3)
0099 #define DA7219_M_BUTTON_D_RELEASED_SHIFT 4
0100 #define DA7219_M_BUTTON_D_RELEASED_MASK (0x1 << 4)
0101 #define DA7219_M_BUTTON_C_RELEASED_SHIFT 5
0102 #define DA7219_M_BUTTON_C_RELEASED_MASK (0x1 << 5)
0103 #define DA7219_M_BUTTON_B_RELEASED_SHIFT 6
0104 #define DA7219_M_BUTTON_B_RELEASED_MASK (0x1 << 6)
0105 #define DA7219_M_BUTTON_A_RELEASED_SHIFT 7
0106 #define DA7219_M_BUTTON_A_RELEASED_MASK (0x1 << 7)
0107
0108
0109 #define DA7219_ACCDET_EN_SHIFT 0
0110 #define DA7219_ACCDET_EN_MASK (0x1 << 0)
0111 #define DA7219_BUTTON_CONFIG_SHIFT 1
0112 #define DA7219_BUTTON_CONFIG_MASK (0x7 << 1)
0113 #define DA7219_MIC_DET_THRESH_SHIFT 4
0114 #define DA7219_MIC_DET_THRESH_MASK (0x3 << 4)
0115 #define DA7219_JACK_TYPE_DET_EN_SHIFT 6
0116 #define DA7219_JACK_TYPE_DET_EN_MASK (0x1 << 6)
0117 #define DA7219_PIN_ORDER_DET_EN_SHIFT 7
0118 #define DA7219_PIN_ORDER_DET_EN_MASK (0x1 << 7)
0119
0120
0121 #define DA7219_ACCDET_PAUSE_SHIFT 0
0122 #define DA7219_ACCDET_PAUSE_MASK (0x1 << 0)
0123 #define DA7219_JACKDET_DEBOUNCE_SHIFT 1
0124 #define DA7219_JACKDET_DEBOUNCE_MASK (0x7 << 1)
0125 #define DA7219_JACK_DETECT_RATE_SHIFT 4
0126 #define DA7219_JACK_DETECT_RATE_MASK (0x3 << 4)
0127 #define DA7219_JACKDET_REM_DEB_SHIFT 6
0128 #define DA7219_JACKDET_REM_DEB_MASK (0x3 << 6)
0129
0130
0131 #define DA7219_A_D_BUTTON_THRESH_SHIFT 0
0132 #define DA7219_A_D_BUTTON_THRESH_MASK (0xFF << 0)
0133
0134
0135 #define DA7219_D_B_BUTTON_THRESH_SHIFT 0
0136 #define DA7219_D_B_BUTTON_THRESH_MASK (0xFF << 0)
0137
0138
0139 #define DA7219_B_C_BUTTON_THRESH_SHIFT 0
0140 #define DA7219_B_C_BUTTON_THRESH_MASK (0xFF << 0)
0141
0142
0143 #define DA7219_C_MIC_BUTTON_THRESH_SHIFT 0
0144 #define DA7219_C_MIC_BUTTON_THRESH_MASK (0xFF << 0)
0145
0146
0147 #define DA7219_BUTTON_AVERAGE_SHIFT 0
0148 #define DA7219_BUTTON_AVERAGE_MASK (0x3 << 0)
0149 #define DA7219_ADC_1_BIT_REPEAT_SHIFT 2
0150 #define DA7219_ADC_1_BIT_REPEAT_MASK (0x3 << 2)
0151 #define DA7219_PIN_ORDER_FORCE_SHIFT 4
0152 #define DA7219_PIN_ORDER_FORCE_MASK (0x1 << 4)
0153 #define DA7219_JACK_TYPE_FORCE_SHIFT 5
0154 #define DA7219_JACK_TYPE_FORCE_MASK (0x1 << 5)
0155
0156
0157 #define DA7219_HPTEST_EN_SHIFT 0
0158 #define DA7219_HPTEST_EN_MASK (0x1 << 0)
0159 #define DA7219_HPTEST_RES_SEL_SHIFT 1
0160 #define DA7219_HPTEST_RES_SEL_MASK (0x3 << 1)
0161 #define DA7219_HPTEST_RES_SEL_1KOHMS (0x0 << 1)
0162 #define DA7219_HPTEST_COMP_SHIFT 4
0163 #define DA7219_HPTEST_COMP_MASK (0x1 << 4)
0164
0165
0166 #define DA7219_AAD_MAX_BUTTONS 4
0167 #define DA7219_AAD_REPORT_ALL_MASK (SND_JACK_MECHANICAL | \
0168 SND_JACK_HEADSET | SND_JACK_LINEOUT | \
0169 SND_JACK_BTN_0 | SND_JACK_BTN_1 | \
0170 SND_JACK_BTN_2 | SND_JACK_BTN_3)
0171
0172 #define DA7219_AAD_MICBIAS_CHK_DELAY 10
0173 #define DA7219_AAD_MICBIAS_CHK_RETRIES 5
0174
0175 #define DA7219_AAD_HPTEST_RAMP_FREQ 0x28
0176 #define DA7219_AAD_HPTEST_RAMP_FREQ_INT_OSC 0x4D
0177 #define DA7219_AAD_HPTEST_PERIOD 65
0178 #define DA7219_AAD_HPTEST_INT_OSC_PATH_DELAY 20
0179
0180 enum da7219_aad_event_regs {
0181 DA7219_AAD_IRQ_REG_A = 0,
0182 DA7219_AAD_IRQ_REG_B,
0183 DA7219_AAD_IRQ_REG_MAX,
0184 };
0185
0186
0187 struct da7219_aad_priv {
0188 struct snd_soc_component *component;
0189 int irq;
0190
0191 u8 micbias_pulse_lvl;
0192 u32 micbias_pulse_time;
0193
0194 u8 btn_cfg;
0195
0196 struct work_struct btn_det_work;
0197 struct work_struct hptest_work;
0198
0199 struct snd_soc_jack *jack;
0200 bool micbias_resume_enable;
0201 bool jack_inserted;
0202 };
0203
0204
0205 void da7219_aad_jack_det(struct snd_soc_component *component, struct snd_soc_jack *jack);
0206
0207
0208 void da7219_aad_suspend(struct snd_soc_component *component);
0209 void da7219_aad_resume(struct snd_soc_component *component);
0210
0211
0212 int da7219_aad_init(struct snd_soc_component *component);
0213 void da7219_aad_exit(struct snd_soc_component *component);
0214
0215
0216 int da7219_aad_probe(struct i2c_client *i2c);
0217
0218 #endif