123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
- /* SPDX-License-Identifier: GPL-2.0-only */
- /*
- * Copyright (c) 2015-2019, The Linux Foundation. All rights reserved.
- */
- #ifndef WCD9335_H
- #define WCD9335_H
- #include <sound/soc.h>
- #include <sound/jack.h>
- #include <dsp/apr_audio-v2.h>
- #include <asoc/wcd9xxx-slimslave.h>
- #include <asoc/wcd-mbhc-v2.h>
- #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
|