root/sound/soc/codecs/wm8994.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  * wm8994.h  --  WM8994 Soc Audio driver
   4  */
   5 
   6 #ifndef _WM8994_H
   7 #define _WM8994_H
   8 
   9 #include <sound/soc.h>
  10 #include <linux/firmware.h>
  11 #include <linux/completion.h>
  12 #include <linux/workqueue.h>
  13 #include <linux/mutex.h>
  14 
  15 #include "wm_hubs.h"
  16 
  17 /* Sources for AIF1/2 SYSCLK - use with set_dai_sysclk() */
  18 #define WM8994_SYSCLK_MCLK1 1
  19 #define WM8994_SYSCLK_MCLK2 2
  20 #define WM8994_SYSCLK_FLL1  3
  21 #define WM8994_SYSCLK_FLL2  4
  22 
  23 /* OPCLK is also configured with set_dai_sysclk, specify division*10 as rate. */
  24 #define WM8994_SYSCLK_OPCLK 5
  25 
  26 #define WM8994_FLL1 1
  27 #define WM8994_FLL2 2
  28 
  29 #define WM8994_FLL_SRC_MCLK1    1
  30 #define WM8994_FLL_SRC_MCLK2    2
  31 #define WM8994_FLL_SRC_LRCLK    3
  32 #define WM8994_FLL_SRC_BCLK     4
  33 #define WM8994_FLL_SRC_INTERNAL 5
  34 
  35 enum wm8994_vmid_mode {
  36         WM8994_VMID_NORMAL,
  37         WM8994_VMID_FORCE,
  38 };
  39 
  40 typedef void (*wm1811_micdet_cb)(void *data);
  41 typedef void (*wm1811_mic_id_cb)(void *data, u16 status);
  42 
  43 int wm8994_mic_detect(struct snd_soc_component *component, struct snd_soc_jack *jack,
  44                       int micbias);
  45 int wm8958_mic_detect(struct snd_soc_component *component, struct snd_soc_jack *jack,
  46                       wm1811_micdet_cb cb, void *det_cb_data,
  47                       wm1811_mic_id_cb id_cb, void *id_cb_data);
  48 
  49 int wm8994_vmid_mode(struct snd_soc_component *component, enum wm8994_vmid_mode mode);
  50 
  51 int wm8958_aif_ev(struct snd_soc_dapm_widget *w,
  52                   struct snd_kcontrol *kcontrol, int event);
  53 
  54 void wm8958_dsp2_init(struct snd_soc_component *component);
  55 
  56 struct wm8994_micdet {
  57         struct snd_soc_jack *jack;
  58         bool detecting;
  59 };
  60 
  61 /* codec private data */
  62 struct wm8994_fll_config {
  63         int src;
  64         int in;
  65         int out;
  66 };
  67 
  68 #define WM8994_NUM_DRC 3
  69 #define WM8994_NUM_EQ  3
  70 
  71 struct wm8994;
  72 
  73 struct wm8994_priv {
  74         struct wm_hubs_data hubs;
  75         struct wm8994 *wm8994;
  76         int sysclk[2];
  77         int sysclk_rate[2];
  78         int mclk[2];
  79         int aifclk[2];
  80         int aifdiv[2];
  81         int channels[2];
  82         struct wm8994_fll_config fll[2], fll_suspend[2];
  83         struct completion fll_locked[2];
  84         bool fll_locked_irq;
  85         bool fll_byp;
  86         bool clk_has_run;
  87 
  88         int vmid_refcount;
  89         int active_refcount;
  90         enum wm8994_vmid_mode vmid_mode;
  91 
  92         int dac_rates[2];
  93         int lrclk_shared[2];
  94 
  95         int mbc_ena[3];
  96         int hpf1_ena[3];
  97         int hpf2_ena[3];
  98         int vss_ena[3];
  99         int enh_eq_ena[3];
 100 
 101         /* Platform dependant DRC configuration */
 102         const char **drc_texts;
 103         int drc_cfg[WM8994_NUM_DRC];
 104         struct soc_enum drc_enum;
 105 
 106         /* Platform dependant ReTune mobile configuration */
 107         int num_retune_mobile_texts;
 108         const char **retune_mobile_texts;
 109         int retune_mobile_cfg[WM8994_NUM_EQ];
 110         struct soc_enum retune_mobile_enum;
 111 
 112         /* Platform dependant MBC configuration */
 113         int mbc_cfg;
 114         const char **mbc_texts;
 115         struct soc_enum mbc_enum;
 116 
 117         /* Platform dependant VSS configuration */
 118         int vss_cfg;
 119         const char **vss_texts;
 120         struct soc_enum vss_enum;
 121 
 122         /* Platform dependant VSS HPF configuration */
 123         int vss_hpf_cfg;
 124         const char **vss_hpf_texts;
 125         struct soc_enum vss_hpf_enum;
 126 
 127         /* Platform dependant enhanced EQ configuration */
 128         int enh_eq_cfg;
 129         const char **enh_eq_texts;
 130         struct soc_enum enh_eq_enum;
 131 
 132         struct mutex accdet_lock;
 133         struct wm8994_micdet micdet[2];
 134         struct delayed_work mic_work;
 135         struct delayed_work open_circuit_work;
 136         struct delayed_work mic_complete_work;
 137         u16 mic_status;
 138         bool mic_detecting;
 139         bool jack_mic;
 140         int btn_mask;
 141         bool jackdet;
 142         int jackdet_mode;
 143         struct delayed_work jackdet_bootstrap;
 144 
 145         int micdet_irq;
 146         wm1811_micdet_cb micd_cb;
 147         void *micd_cb_data;
 148         wm1811_mic_id_cb mic_id_cb;
 149         void *mic_id_cb_data;
 150 
 151         unsigned int aif1clk_enable:1;
 152         unsigned int aif2clk_enable:1;
 153 
 154         unsigned int aif1clk_disable:1;
 155         unsigned int aif2clk_disable:1;
 156 
 157         struct mutex fw_lock;
 158         int dsp_active;
 159         const struct firmware *cur_fw;
 160         const struct firmware *mbc;
 161         const struct firmware *mbc_vss;
 162         const struct firmware *enh_eq;
 163 };
 164 
 165 #endif

/* [<][>][^][v][top][bottom][index][help] */