linux/sound/pci/hda/cs35l56_hda.c

// SPDX-License-Identifier: GPL-2.0-only
//
// HDA audio driver for Cirrus Logic CS35L56 smart amp
//
// Copyright (C) 2023 Cirrus Logic, Inc. and
//                    Cirrus Logic International Semiconductor Ltd.
//

#include <linux/acpi.h>
#include <linux/debugfs.h>
#include <linux/gpio/consumer.h>
#include <linux/module.h>
#include <linux/pm_runtime.h>
#include <linux/regmap.h>
#include <linux/slab.h>
#include <sound/core.h>
#include <sound/cs-amp-lib.h>
#include <sound/hda_codec.h>
#include <sound/tlv.h>
#include "cirrus_scodec.h"
#include "cs35l56_hda.h"
#include "hda_component.h"
#include "hda_cs_dsp_ctl.h"
#include "hda_generic.h"

 /*
  * The cs35l56_hda_dai_config[] reg sequence configures the device as
  *  ASP1_BCLK_FREQ = 3.072 MHz
  *  ASP1_RX_WIDTH = 32 cycles per slot, ASP1_TX_WIDTH = 32 cycles per slot, ASP1_FMT = I2S
  *  ASP1_DOUT_HIZ_CONTROL = Hi-Z during unused timeslots
  *  ASP1_RX_WL = 24 bits per sample
  *  ASP1_TX_WL = 24 bits per sample
  *  ASP1_RXn_EN 1..3 and ASP1_TXn_EN 1..4 disabled
  *
  * Override any Windows-specific mixer settings applied by the firmware.
  */
static const struct reg_sequence cs35l56_hda_dai_config[] =;

static void cs35l56_hda_wait_dsp_ready(struct cs35l56_hda *cs35l56)
{}

static void cs35l56_hda_play(struct cs35l56_hda *cs35l56)
{}

static void cs35l56_hda_pause(struct cs35l56_hda *cs35l56)
{}

static void cs35l56_hda_playback_hook(struct device *dev, int action)
{}

static int cs35l56_hda_runtime_suspend(struct device *dev)
{}

static int cs35l56_hda_runtime_resume(struct device *dev)
{}

static int cs35l56_hda_mixer_info(struct snd_kcontrol *kcontrol,
				  struct snd_ctl_elem_info *uinfo)
{}

static int cs35l56_hda_mixer_get(struct snd_kcontrol *kcontrol,
				 struct snd_ctl_elem_value *ucontrol)
{}

static int cs35l56_hda_mixer_put(struct snd_kcontrol *kcontrol,
				 struct snd_ctl_elem_value *ucontrol)
{}

static int cs35l56_hda_posture_info(struct snd_kcontrol *kcontrol,
				    struct snd_ctl_elem_info *uinfo)
{}

static int cs35l56_hda_posture_get(struct snd_kcontrol *kcontrol,
				   struct snd_ctl_elem_value *ucontrol)
{}

static int cs35l56_hda_posture_put(struct snd_kcontrol *kcontrol,
				   struct snd_ctl_elem_value *ucontrol)
{}

static const struct {} cs35l56_hda_mixer_controls[] =;

static const DECLARE_TLV_DB_SCALE(cs35l56_hda_vol_tlv, -10000, 25, 0);

static int cs35l56_hda_vol_info(struct snd_kcontrol *kcontrol,
				struct snd_ctl_elem_info *uinfo)
{}

static int cs35l56_hda_vol_get(struct snd_kcontrol *kcontrol,
			       struct snd_ctl_elem_value *ucontrol)
{}

static int cs35l56_hda_vol_put(struct snd_kcontrol *kcontrol,
			       struct snd_ctl_elem_value *ucontrol)
{}

static void cs35l56_hda_create_controls(struct cs35l56_hda *cs35l56)
{}

static void cs35l56_hda_remove_controls(struct cs35l56_hda *cs35l56)
{}

static const struct cs_dsp_client_ops cs35l56_hda_client_ops =;

static int cs35l56_hda_request_firmware_file(struct cs35l56_hda *cs35l56,
					     const struct firmware **firmware, char **filename,
					     const char *base_name, const char *system_name,
					     const char *amp_name,
					     const char *filetype)
{}

static void cs35l56_hda_request_firmware_files(struct cs35l56_hda *cs35l56,
					       unsigned int preloaded_fw_ver,
					       const struct firmware **wmfw_firmware,
					       char **wmfw_filename,
					       const struct firmware **coeff_firmware,
					       char **coeff_filename)
{}

static void cs35l56_hda_release_firmware_files(const struct firmware *wmfw_firmware,
					       char *wmfw_filename,
					       const struct firmware *coeff_firmware,
					       char *coeff_filename)
{}

static void cs35l56_hda_apply_calibration(struct cs35l56_hda *cs35l56)
{}

static void cs35l56_hda_fw_load(struct cs35l56_hda *cs35l56)
{}

static void cs35l56_hda_dsp_work(struct work_struct *work)
{}

static int cs35l56_hda_bind(struct device *dev, struct device *master, void *master_data)
{}

static void cs35l56_hda_unbind(struct device *dev, struct device *master, void *master_data)
{}

static const struct component_ops cs35l56_hda_comp_ops =;

static int cs35l56_hda_system_suspend(struct device *dev)
{}

static int cs35l56_hda_system_suspend_late(struct device *dev)
{}

static int cs35l56_hda_system_suspend_no_irq(struct device *dev)
{}

static int cs35l56_hda_system_resume_no_irq(struct device *dev)
{}

static int cs35l56_hda_system_resume_early(struct device *dev)
{}

static int cs35l56_hda_system_resume(struct device *dev)
{}

static int cs35l56_hda_read_acpi(struct cs35l56_hda *cs35l56, int hid, int id)
{}

int cs35l56_hda_common_probe(struct cs35l56_hda *cs35l56, int hid, int id)
{}
EXPORT_SYMBOL_NS_GPL();

void cs35l56_hda_remove(struct device *dev)
{}
EXPORT_SYMBOL_NS_GPL();

const struct dev_pm_ops cs35l56_hda_pm_ops =;
EXPORT_SYMBOL_NS_GPL();

MODULE_DESCRIPTION();
MODULE_IMPORT_NS();
MODULE_IMPORT_NS();
MODULE_IMPORT_NS();
MODULE_IMPORT_NS();
MODULE_IMPORT_NS();
MODULE_AUTHOR();
MODULE_AUTHOR();
MODULE_LICENSE();