linux/sound/soc/codecs/cs42l43.h

/* 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
#define CS42L43_DEFAULT_SLOTS

#define CS42L43_PLL_TIMEOUT_MS
#define CS42L43_SPK_TIMEOUT_MS
#define CS42L43_HP_TIMEOUT_MS
#define CS42L43_LOAD_TIMEOUT_MS

#define CS42L43_HP_ILIMIT_BACKOFF_MS
#define CS42L43_HP_ILIMIT_DECAY_MS
#define CS42L43_HP_ILIMIT_MAX_COUNT

#define CS42L43_ASP_MAX_CHANNELS
#define CS42L43_N_EQ_COEFFS

#define CS42L43_N_BUTTONS

struct clk;
struct device;

struct snd_soc_component;
struct snd_soc_jack;

struct cs42l43;

struct cs42l43_codec {};

#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
#define cs42l43_sdw_set_stream

#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 */