mirror of
https://github.com/torvalds/linux.git
synced 2024-12-04 01:51:34 +00:00
fb430b0639
Use more forward declarations, move header guards to cover other includes, and rely less on including headers through other headers. Suggested-by: Andy Shevchenko <andy.shevchenko@gmail.com> Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com> Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com> Link: https://msgid.link/r/20240125103117.2622095-1-ckeepax@opensource.cirrus.com Signed-off-by: Mark Brown <broonie@kernel.org>
144 lines
3.8 KiB
C
144 lines
3.8 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* CS42L43 CODEC driver internal data
|
|
*
|
|
* Copyright (C) 2022-2023 Cirrus Logic, Inc. and
|
|
* Cirrus Logic International Semiconductor Ltd.
|
|
*/
|
|
|
|
#ifndef CS42L43_ASOC_INT_H
|
|
#define CS42L43_ASOC_INT_H
|
|
|
|
#include <linux/completion.h>
|
|
#include <linux/mutex.h>
|
|
#include <linux/types.h>
|
|
#include <linux/workqueue.h>
|
|
#include <sound/pcm.h>
|
|
|
|
#define CS42L43_INTERNAL_SYSCLK 24576000
|
|
#define CS42L43_DEFAULT_SLOTS 0x3F
|
|
|
|
#define CS42L43_PLL_TIMEOUT_MS 200
|
|
#define CS42L43_SPK_TIMEOUT_MS 100
|
|
#define CS42L43_HP_TIMEOUT_MS 2000
|
|
#define CS42L43_LOAD_TIMEOUT_MS 1000
|
|
|
|
#define CS42L43_HP_ILIMIT_BACKOFF_MS 1000
|
|
#define CS42L43_HP_ILIMIT_DECAY_MS 300
|
|
#define CS42L43_HP_ILIMIT_MAX_COUNT 4
|
|
|
|
#define CS42L43_ASP_MAX_CHANNELS 6
|
|
#define CS42L43_N_EQ_COEFFS 15
|
|
|
|
#define CS42L43_N_BUTTONS 6
|
|
|
|
struct clk;
|
|
struct device;
|
|
|
|
struct snd_soc_component;
|
|
struct snd_soc_jack;
|
|
|
|
struct cs42l43;
|
|
|
|
struct cs42l43_codec {
|
|
struct device *dev;
|
|
struct cs42l43 *core;
|
|
struct snd_soc_component *component;
|
|
|
|
struct clk *mclk;
|
|
|
|
int n_slots;
|
|
int slot_width;
|
|
int tx_slots[CS42L43_ASP_MAX_CHANNELS];
|
|
int rx_slots[CS42L43_ASP_MAX_CHANNELS];
|
|
struct snd_pcm_hw_constraint_list constraint;
|
|
|
|
u32 eq_coeffs[CS42L43_N_EQ_COEFFS];
|
|
|
|
unsigned int refclk_src;
|
|
unsigned int refclk_freq;
|
|
struct completion pll_ready;
|
|
|
|
unsigned int decim_cache[4];
|
|
unsigned int adc_ena;
|
|
unsigned int hp_ena;
|
|
|
|
struct completion hp_startup;
|
|
struct completion hp_shutdown;
|
|
struct completion spkr_shutdown;
|
|
struct completion spkl_shutdown;
|
|
struct completion spkr_startup;
|
|
struct completion spkl_startup;
|
|
// Lock to ensure speaker VU updates don't clash
|
|
struct mutex spk_vu_lock;
|
|
|
|
// Lock for all jack detect operations
|
|
struct mutex jack_lock;
|
|
struct snd_soc_jack *jack_hp;
|
|
|
|
bool use_ring_sense;
|
|
unsigned int tip_debounce_ms;
|
|
unsigned int bias_low;
|
|
unsigned int bias_sense_ua;
|
|
unsigned int bias_ramp_ms;
|
|
unsigned int detect_us;
|
|
unsigned int buttons[CS42L43_N_BUTTONS];
|
|
|
|
struct delayed_work tip_sense_work;
|
|
struct delayed_work bias_sense_timeout;
|
|
struct delayed_work button_press_work;
|
|
struct work_struct button_release_work;
|
|
struct completion type_detect;
|
|
struct completion load_detect;
|
|
|
|
bool load_detect_running;
|
|
bool button_detect_running;
|
|
bool jack_present;
|
|
int jack_override;
|
|
|
|
struct work_struct hp_ilimit_work;
|
|
struct delayed_work hp_ilimit_clear_work;
|
|
bool hp_ilimited;
|
|
int hp_ilimit_count;
|
|
};
|
|
|
|
#if IS_REACHABLE(CONFIG_SND_SOC_CS42L43_SDW)
|
|
|
|
int cs42l43_sdw_add_peripheral(struct snd_pcm_substream *substream,
|
|
struct snd_pcm_hw_params *params,
|
|
struct snd_soc_dai *dai);
|
|
int cs42l43_sdw_remove_peripheral(struct snd_pcm_substream *substream,
|
|
struct snd_soc_dai *dai);
|
|
int cs42l43_sdw_set_stream(struct snd_soc_dai *dai, void *sdw_stream, int direction);
|
|
|
|
#else
|
|
|
|
static inline int cs42l43_sdw_add_peripheral(struct snd_pcm_substream *substream,
|
|
struct snd_pcm_hw_params *params,
|
|
struct snd_soc_dai *dai)
|
|
{
|
|
return -EINVAL;
|
|
}
|
|
|
|
#define cs42l43_sdw_remove_peripheral NULL
|
|
#define cs42l43_sdw_set_stream NULL
|
|
|
|
#endif
|
|
|
|
int cs42l43_set_jack(struct snd_soc_component *component,
|
|
struct snd_soc_jack *jack, void *d);
|
|
void cs42l43_bias_sense_timeout(struct work_struct *work);
|
|
void cs42l43_tip_sense_work(struct work_struct *work);
|
|
void cs42l43_button_press_work(struct work_struct *work);
|
|
void cs42l43_button_release_work(struct work_struct *work);
|
|
irqreturn_t cs42l43_bias_detect_clamp(int irq, void *data);
|
|
irqreturn_t cs42l43_button_press(int irq, void *data);
|
|
irqreturn_t cs42l43_button_release(int irq, void *data);
|
|
irqreturn_t cs42l43_tip_sense(int irq, void *data);
|
|
int cs42l43_jack_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol);
|
|
int cs42l43_jack_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol);
|
|
|
|
extern const struct soc_enum cs42l43_jack_enum;
|
|
|
|
#endif /* CS42L43_ASOC_INT_H */
|