162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * wm_hubs.h -- WM899x common code 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright 2009 Wolfson Microelectronics plc 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci * Author: Mark Brown <broonie@opensource.wolfsonmicro.com> 862306a36Sopenharmony_ci */ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#ifndef _WM_HUBS_H 1162306a36Sopenharmony_ci#define _WM_HUBS_H 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#include <linux/completion.h> 1462306a36Sopenharmony_ci#include <linux/interrupt.h> 1562306a36Sopenharmony_ci#include <linux/list.h> 1662306a36Sopenharmony_ci#include <sound/control.h> 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_cistruct snd_soc_component; 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ciextern const unsigned int wm_hubs_spkmix_tlv[]; 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci/* This *must* be the first element of the codec->private_data struct */ 2362306a36Sopenharmony_cistruct wm_hubs_data { 2462306a36Sopenharmony_ci int dcs_codes_l; 2562306a36Sopenharmony_ci int dcs_codes_r; 2662306a36Sopenharmony_ci int dcs_readback_mode; 2762306a36Sopenharmony_ci int hp_startup_mode; 2862306a36Sopenharmony_ci int series_startup; 2962306a36Sopenharmony_ci int no_series_update; 3062306a36Sopenharmony_ci bool micd_scthr; 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci bool no_cache_dac_hp_direct; 3362306a36Sopenharmony_ci struct list_head dcs_cache; 3462306a36Sopenharmony_ci bool (*check_class_w_digital)(struct snd_soc_component *); 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci int micb1_delay; 3762306a36Sopenharmony_ci int micb2_delay; 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci bool lineout1_se; 4062306a36Sopenharmony_ci bool lineout1n_ena; 4162306a36Sopenharmony_ci bool lineout1p_ena; 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci bool lineout2_se; 4462306a36Sopenharmony_ci bool lineout2n_ena; 4562306a36Sopenharmony_ci bool lineout2p_ena; 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci bool dcs_done_irq; 4862306a36Sopenharmony_ci struct completion dcs_done; 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci struct snd_soc_component *component; 5162306a36Sopenharmony_ci}; 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ciextern int wm_hubs_add_analogue_controls(struct snd_soc_component *); 5462306a36Sopenharmony_ciextern int wm_hubs_add_analogue_routes(struct snd_soc_component *, int, int); 5562306a36Sopenharmony_ciextern int wm_hubs_handle_analogue_pdata(struct snd_soc_component *, 5662306a36Sopenharmony_ci int lineout1_diff, int lineout2_diff, 5762306a36Sopenharmony_ci int lineout1fb, int lineout2fb, 5862306a36Sopenharmony_ci int jd_scthr, int jd_thr, 5962306a36Sopenharmony_ci int micbias1_delay, int micbias2_delay, 6062306a36Sopenharmony_ci int micbias1_lvl, int micbias2_lvl); 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ciextern irqreturn_t wm_hubs_dcs_done(int irq, void *data); 6362306a36Sopenharmony_ciextern void wm_hubs_vmid_ena(struct snd_soc_component *component); 6462306a36Sopenharmony_ciextern void wm_hubs_set_bias_level(struct snd_soc_component *component, 6562306a36Sopenharmony_ci enum snd_soc_bias_level level); 6662306a36Sopenharmony_ciextern void wm_hubs_update_class_w(struct snd_soc_component *component); 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ciextern const struct snd_kcontrol_new wm_hubs_hpl_mux; 6962306a36Sopenharmony_ciextern const struct snd_kcontrol_new wm_hubs_hpr_mux; 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ci#endif 72