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