cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

wm8994.h (3936B)


      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 <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_MCLK
     22};
     23
     24/* Sources for AIF1/2 SYSCLK - use with set_dai_sysclk() */
     25#define WM8994_SYSCLK_MCLK1 1
     26#define WM8994_SYSCLK_MCLK2 2
     27#define WM8994_SYSCLK_FLL1  3
     28#define WM8994_SYSCLK_FLL2  4
     29
     30/* OPCLK is also configured with set_dai_sysclk, specify division*10 as rate. */
     31#define WM8994_SYSCLK_OPCLK 5
     32
     33#define WM8994_FLL1 1
     34#define WM8994_FLL2 2
     35
     36#define WM8994_FLL_SRC_MCLK1    1
     37#define WM8994_FLL_SRC_MCLK2    2
     38#define WM8994_FLL_SRC_LRCLK    3
     39#define WM8994_FLL_SRC_BCLK     4
     40#define WM8994_FLL_SRC_INTERNAL 5
     41
     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 3
     76#define WM8994_NUM_EQ  3
     77
     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#endif