1*6014e902STakashi Iwai /* SPDX-License-Identifier: GPL-2.0-only 2*6014e902STakashi Iwai * 3*6014e902STakashi Iwai * HDA audio driver for Cirrus Logic CS35L56 smart amp 4*6014e902STakashi Iwai * 5*6014e902STakashi Iwai * Copyright (C) 2023 Cirrus Logic, Inc. and 6*6014e902STakashi Iwai * Cirrus Logic International Semiconductor Ltd. 7*6014e902STakashi Iwai */ 8*6014e902STakashi Iwai 9*6014e902STakashi Iwai #ifndef __CS35L56_HDA_H__ 10*6014e902STakashi Iwai #define __CS35L56_HDA_H__ 11*6014e902STakashi Iwai 12*6014e902STakashi Iwai #include <linux/device.h> 13*6014e902STakashi Iwai #include <linux/gpio/consumer.h> 14*6014e902STakashi Iwai #include <linux/firmware/cirrus/cs_dsp.h> 15*6014e902STakashi Iwai #include <linux/firmware/cirrus/wmfw.h> 16*6014e902STakashi Iwai #include <linux/regulator/consumer.h> 17*6014e902STakashi Iwai #include <linux/workqueue.h> 18*6014e902STakashi Iwai #include <sound/cs35l56.h> 19*6014e902STakashi Iwai 20*6014e902STakashi Iwai struct dentry; 21*6014e902STakashi Iwai 22*6014e902STakashi Iwai struct cs35l56_hda { 23*6014e902STakashi Iwai struct cs35l56_base base; 24*6014e902STakashi Iwai struct hda_codec *codec; 25*6014e902STakashi Iwai struct work_struct dsp_work; 26*6014e902STakashi Iwai 27*6014e902STakashi Iwai int index; 28*6014e902STakashi Iwai const char *system_name; 29*6014e902STakashi Iwai const char *amp_name; 30*6014e902STakashi Iwai 31*6014e902STakashi Iwai struct cs_dsp cs_dsp; 32*6014e902STakashi Iwai bool playing; 33*6014e902STakashi Iwai bool suspended; 34*6014e902STakashi Iwai u8 asp_tx_mask; 35*6014e902STakashi Iwai 36*6014e902STakashi Iwai struct snd_kcontrol *posture_ctl; 37*6014e902STakashi Iwai struct snd_kcontrol *volume_ctl; 38*6014e902STakashi Iwai struct snd_kcontrol *mixer_ctl[4]; 39*6014e902STakashi Iwai 40*6014e902STakashi Iwai #if IS_ENABLED(CONFIG_SND_DEBUG) 41*6014e902STakashi Iwai struct dentry *debugfs_root; 42*6014e902STakashi Iwai #endif 43*6014e902STakashi Iwai }; 44*6014e902STakashi Iwai 45*6014e902STakashi Iwai extern const struct dev_pm_ops cs35l56_hda_pm_ops; 46*6014e902STakashi Iwai 47*6014e902STakashi Iwai int cs35l56_hda_common_probe(struct cs35l56_hda *cs35l56, int hid, int id); 48*6014e902STakashi Iwai void cs35l56_hda_remove(struct device *dev); 49*6014e902STakashi Iwai 50*6014e902STakashi Iwai #endif /*__CS35L56_HDA_H__*/ 51