/* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (c) 2015-2019, The Linux Foundation. All rights reserved. */ #ifndef WCD9335_H #define WCD9335_H #include #include #include #include #include #define TASHA_REG_VAL(reg, val) {reg, 0, val} #define TASHA_REGISTER_START_OFFSET 0x800 #define TASHA_SB_PGD_PORT_RX_BASE 0x40 #define TASHA_SB_PGD_PORT_TX_BASE 0x50 #define TASHA_ZDET_SUPPORTED true /* z value defined in milliohm */ #define TASHA_ZDET_VAL_32 32000 #define TASHA_ZDET_VAL_400 400000 #define TASHA_ZDET_VAL_1200 1200000 #define TASHA_ZDET_VAL_100K 100000000 /* z floating defined in ohms */ #define TASHA_ZDET_FLOATING_IMPEDANCE 0x0FFFFFFE #define WCD9335_DMIC_CLK_DIV_2 0x0 #define WCD9335_DMIC_CLK_DIV_3 0x1 #define WCD9335_DMIC_CLK_DIV_4 0x2 #define WCD9335_DMIC_CLK_DIV_6 0x3 #define WCD9335_DMIC_CLK_DIV_8 0x4 #define WCD9335_DMIC_CLK_DIV_16 0x5 #define WCD9335_DMIC_CLK_DRIVE_DEFAULT 0x02 #define WCD9335_ANC_DMIC_X2_FULL_RATE 1 #define WCD9335_ANC_DMIC_X2_HALF_RATE 0 /* Number of input and output Slimbus port */ enum { TASHA_RX0 = 0, TASHA_RX1, TASHA_RX2, TASHA_RX3, TASHA_RX4, TASHA_RX5, TASHA_RX6, TASHA_RX7, TASHA_RX8, TASHA_RX9, TASHA_RX10, TASHA_RX11, TASHA_RX12, TASHA_RX_MAX, }; enum { TASHA_TX0 = 0, TASHA_TX1, TASHA_TX2, TASHA_TX3, TASHA_TX4, TASHA_TX5, TASHA_TX6, TASHA_TX7, TASHA_TX8, TASHA_TX9, TASHA_TX10, TASHA_TX11, TASHA_TX12, TASHA_TX13, TASHA_TX14, TASHA_TX15, TASHA_TX_MAX, }; enum wcd9335_codec_event { WCD9335_CODEC_EVENT_CODEC_UP = 0, }; enum tasha_on_demand_supply { ON_DEMAND_MICBIAS = 0, ON_DEMAND_TX_SUPPLY, ON_DEMAND_RX_SUPPLY, ON_DEMAND_SUPPLIES_MAX, }; /* structure used to put the defined * ondemand supply for codec * and count being used. */ struct on_demand_supply { struct regulator *supply; int ondemand_supply_count; }; /* Dai data structure holds the * dai specific info like rate, * channel number etc. */ struct tasha_codec_dai_data { u32 rate; u32 *ch_num; u32 ch_act; u32 ch_tot; }; /* Structure used to update codec * register defaults after reset */ struct tasha_reg_mask_val { u16 reg; u8 mask; u8 val; }; /* Selects compander and smart boost settings * for a given speaker mode */ enum { SPKR_MODE_DEFAULT, SPKR_MODE_1, /* COMP Gain = 12dB, Smartboost Max = 5.5V */ }; /* * Rx path gain offsets */ enum { RX_GAIN_OFFSET_M1P5_DB, RX_GAIN_OFFSET_0_DB, }; #if IS_ENABLED(CONFIG_SND_SOC_WCD9335) extern void *tasha_get_afe_config(struct snd_soc_component *component, enum afe_config_type config_type); extern int tasha_cdc_mclk_enable(struct snd_soc_component *component, int enable, bool dapm); extern int tasha_cdc_mclk_tx_enable(struct snd_soc_component *component, int enable, bool dapm); extern int tasha_enable_efuse_sensing(struct snd_soc_component *component); extern int tasha_mbhc_hs_detect(struct snd_soc_component *component, struct wcd_mbhc_config *mbhc_cfg); extern void tasha_mbhc_hs_detect_exit(struct snd_soc_component *component); extern void tasha_mbhc_zdet_gpio_ctrl( int (*zdet_gpio_cb)(struct snd_soc_component *component, bool high), struct snd_soc_component *component); extern int tasha_codec_info_create_codec_entry( struct snd_info_entry *codec_root, struct snd_soc_component *component); extern void tasha_event_register( int (*machine_event_cb)(struct snd_soc_component *component, enum wcd9335_codec_event), struct snd_soc_component *component); extern int tasha_codec_enable_standalone_micbias( struct snd_soc_component *component, int micb_num, bool enable); extern int tasha_set_spkr_mode(struct snd_soc_component *component, int mode); extern int tasha_set_spkr_gain_offset(struct snd_soc_component *component, int offset); extern enum codec_variant tasha_codec_ver(void); #else /* CONFIG_SND_SOC_WCD9335 */ static inline void *tasha_get_afe_config(struct snd_soc_component *component, enum afe_config_type config_type) { return NULL; } static inline int tasha_cdc_mclk_enable(struct snd_soc_component *component, int enable, bool dapm) { return 0; } static inline int tasha_cdc_mclk_tx_enable(struct snd_soc_component *component, int enable, bool dapm) { return 0; } static inline int tasha_enable_efuse_sensing( struct snd_soc_component *component) { return 0; } static inline int tasha_mbhc_hs_detect(struct snd_soc_component *component, struct wcd_mbhc_config *mbhc_cfg) { return 0; } static inline void tasha_mbhc_hs_detect_exit( struct snd_soc_component *component) { } static inline void tasha_mbhc_zdet_gpio_ctrl( int (*zdet_gpio_cb)(struct snd_soc_component *component, bool high), struct snd_soc_component *component) { } static inline int tasha_codec_info_create_codec_entry( struct snd_info_entry *codec_root, struct snd_soc_component *component) { return 0; } static inline void tasha_event_register( int (*machine_event_cb)(struct snd_soc_component *component, enum wcd9335_codec_event), struct snd_soc_component *component) { } static inline int tasha_codec_enable_standalone_micbias( struct snd_soc_component *component, int micb_num, bool enable) { return 0; } static inline int tasha_set_spkr_mode(struct snd_soc_component *component, int mode) { return 0; } static inline int tasha_set_spkr_gain_offset( struct snd_soc_component *component, int offset) { return 0; } static inline enum codec_variant tasha_codec_ver(void) { return 0; } #endif /* CONFIG_SND_SOC_WCD9335 */ #endif