@ -39,7 +39,9 @@
# define AIC3X_OVRF_STATUS_AND_PLLR_REG 11
/* Audio codec digital filter control register */
# define AIC3X_CODEC_DFILT_CTRL 12
/* Headset/button press detection register */
# define AIC3X_HEADSET_DETECT_CTRL_A 13
# define AIC3X_HEADSET_DETECT_CTRL_B 14
/* ADC PGA Gain control registers */
# define LADC_VOL 15
# define RADC_VOL 16
@ -233,7 +235,49 @@ enum {
void aic3x_set_gpio ( struct snd_soc_codec * codec , int gpio , int state ) ;
int aic3x_get_gpio ( struct snd_soc_codec * codec , int gpio ) ;
/* headset detection / button API */
/* The AIC3x supports detection of stereo headsets (GND + left + right signal)
* and cellular headsets ( GND + speaker output + microphone input ) .
* It is recommended to enable MIC bias for this function to work properly .
* For more information , please refer to the datasheet . */
enum {
AIC3X_HEADSET_DETECT_OFF = 0 ,
AIC3X_HEADSET_DETECT_STEREO = 1 ,
AIC3X_HEADSET_DETECT_CELLULAR = 2 ,
AIC3X_HEADSET_DETECT_BOTH = 3
} ;
enum {
AIC3X_HEADSET_DEBOUNCE_16MS = 0 ,
AIC3X_HEADSET_DEBOUNCE_32MS = 1 ,
AIC3X_HEADSET_DEBOUNCE_64MS = 2 ,
AIC3X_HEADSET_DEBOUNCE_128MS = 3 ,
AIC3X_HEADSET_DEBOUNCE_256MS = 4 ,
AIC3X_HEADSET_DEBOUNCE_512MS = 5
} ;
enum {
AIC3X_BUTTON_DEBOUNCE_0MS = 0 ,
AIC3X_BUTTON_DEBOUNCE_8MS = 1 ,
AIC3X_BUTTON_DEBOUNCE_16MS = 2 ,
AIC3X_BUTTON_DEBOUNCE_32MS = 3
} ;
# define AIC3X_HEADSET_DETECT_ENABLED 0x80
# define AIC3X_HEADSET_DETECT_SHIFT 5
# define AIC3X_HEADSET_DETECT_MASK 3
# define AIC3X_HEADSET_DEBOUNCE_SHIFT 2
# define AIC3X_HEADSET_DEBOUNCE_MASK 7
# define AIC3X_BUTTON_DEBOUNCE_SHIFT 0
# define AIC3X_BUTTON_DEBOUNCE_MASK 3
/* see the enums above for valid parameters to this function */
void aic3x_set_headset_detection ( struct snd_soc_codec * codec , int detect ,
int headset_debounce , int button_debounce ) ;
int aic3x_headset_detected ( struct snd_soc_codec * codec ) ;
int aic3x_button_pressed ( struct snd_soc_codec * codec ) ;
struct aic3x_setup_data {
int i2c_bus ;