brintos

brintos / linux-shallow public Read only

0
0
Text · 3.8 KiB · bc584b1 Raw
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