Compare commits
No commits in common. "linux5.19" and "master" have entirely different histories.
7 changed files with 82 additions and 41 deletions
|
@ -8,6 +8,8 @@
|
|||
#ifndef __SOUND_HDA_AUTO_PARSER_H
|
||||
#define __SOUND_HDA_AUTO_PARSER_H
|
||||
|
||||
#include "hda_local.h"
|
||||
|
||||
/*
|
||||
* Helper for automatic pin configuration
|
||||
*/
|
||||
|
@ -35,6 +37,7 @@ struct auto_pin_cfg_item {
|
|||
unsigned int is_headset_mic:1;
|
||||
unsigned int is_headphone_mic:1; /* Mic-only in headphone jack */
|
||||
unsigned int has_boost_on_pin:1;
|
||||
int order;
|
||||
};
|
||||
|
||||
struct auto_pin_cfg;
|
||||
|
|
|
@ -9,6 +9,9 @@
|
|||
#define __SOUND_HDA_GENERIC_H
|
||||
|
||||
#include <linux/leds.h>
|
||||
#include "hda_auto_parser.h"
|
||||
|
||||
struct hda_jack_callback;
|
||||
|
||||
/* table entry for multi-io paths */
|
||||
struct hda_multi_io {
|
||||
|
@ -229,7 +232,6 @@ struct hda_gen_spec {
|
|||
unsigned int power_down_unused:1; /* power down unused widgets */
|
||||
unsigned int dac_min_mute:1; /* minimal = mute for DACs */
|
||||
unsigned int suppress_vmaster:1; /* don't create vmaster kctls */
|
||||
unsigned int obey_preferred_dacs:1; /* obey preferred_dacs assignment */
|
||||
|
||||
/* other internal flags */
|
||||
unsigned int no_analog:1; /* digital I/O only */
|
||||
|
@ -337,9 +339,7 @@ void snd_hda_gen_mic_autoswitch(struct hda_codec *codec,
|
|||
struct hda_jack_callback *jack);
|
||||
void snd_hda_gen_update_outputs(struct hda_codec *codec);
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
int snd_hda_gen_check_power_status(struct hda_codec *codec, hda_nid_t nid);
|
||||
#endif
|
||||
unsigned int snd_hda_gen_path_power_filter(struct hda_codec *codec,
|
||||
hda_nid_t nid,
|
||||
unsigned int power_state);
|
||||
|
@ -352,5 +352,6 @@ int snd_hda_gen_add_mute_led_cdev(struct hda_codec *codec,
|
|||
int snd_hda_gen_add_micmute_led_cdev(struct hda_codec *codec,
|
||||
int (*callback)(struct led_classdev *,
|
||||
enum led_brightness));
|
||||
bool snd_hda_gen_shutup_speakers(struct hda_codec *codec);
|
||||
|
||||
#endif /* __SOUND_HDA_GENERIC_H */
|
||||
|
|
31
hda_local.h
31
hda_local.h
|
@ -292,6 +292,32 @@ struct hda_fixup {
|
|||
} v;
|
||||
};
|
||||
|
||||
/*
|
||||
* extended form of snd_pci_quirk:
|
||||
* for PCI SSID matching, use SND_PCI_QUIRK() like before;
|
||||
* for codec SSID matching, use the new HDA_CODEC_QUIRK() instead
|
||||
*/
|
||||
struct hda_quirk {
|
||||
unsigned short subvendor; /* PCI subvendor ID */
|
||||
unsigned short subdevice; /* PCI subdevice ID */
|
||||
unsigned short subdevice_mask; /* bitmask to match */
|
||||
bool match_codec_ssid; /* match only with codec SSID */
|
||||
int value; /* value */
|
||||
#ifdef CONFIG_SND_DEBUG_VERBOSE
|
||||
const char *name; /* name of the device (optional) */
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifdef CONFIG_SND_DEBUG_VERBOSE
|
||||
#define HDA_CODEC_QUIRK(vend, dev, xname, val) \
|
||||
{ _SND_PCI_QUIRK_ID(vend, dev), .value = (val), .name = (xname),\
|
||||
.match_codec_ssid = true }
|
||||
#else
|
||||
#define HDA_CODEC_QUIRK(vend, dev, xname, val) \
|
||||
{ _SND_PCI_QUIRK_ID(vend, dev), .value = (val), \
|
||||
.match_codec_ssid = true }
|
||||
#endif
|
||||
|
||||
struct snd_hda_pin_quirk {
|
||||
unsigned int codec; /* Codec vendor/device ID */
|
||||
unsigned short subvendor; /* PCI subvendor ID */
|
||||
|
@ -351,7 +377,7 @@ void snd_hda_apply_fixup(struct hda_codec *codec, int action);
|
|||
void __snd_hda_apply_fixup(struct hda_codec *codec, int id, int action, int depth);
|
||||
void snd_hda_pick_fixup(struct hda_codec *codec,
|
||||
const struct hda_model_fixup *models,
|
||||
const struct snd_pci_quirk *quirk,
|
||||
const struct hda_quirk *quirk,
|
||||
const struct hda_fixup *fixlist);
|
||||
void snd_hda_pick_pin_fixup(struct hda_codec *codec,
|
||||
const struct snd_hda_pin_quirk *pin_quirk,
|
||||
|
@ -712,7 +738,8 @@ int snd_hdmi_get_eld_ati(struct hda_codec *codec, hda_nid_t nid,
|
|||
|
||||
#ifdef CONFIG_SND_PROC_FS
|
||||
void snd_hdmi_print_eld_info(struct hdmi_eld *eld,
|
||||
struct snd_info_buffer *buffer);
|
||||
struct snd_info_buffer *buffer,
|
||||
hda_nid_t pin_nid, int dev_id, hda_nid_t cvt_nid);
|
||||
void snd_hdmi_write_eld_info(struct hdmi_eld *eld,
|
||||
struct snd_info_buffer *buffer);
|
||||
#endif
|
||||
|
|
|
@ -340,6 +340,8 @@ add_control(struct hda_gen_spec *spec, int type, const char *name,
|
|||
knew->index = cidx;
|
||||
if (get_amp_nid_(val))
|
||||
knew->subdevice = HDA_SUBDEV_AMP_FLAG;
|
||||
if (knew->access == 0)
|
||||
knew->access = SNDRV_CTL_ELEM_ACCESS_READWRITE;
|
||||
knew->private_value = val;
|
||||
return knew;
|
||||
}
|
||||
|
@ -350,7 +352,11 @@ static int add_control_with_pfx(struct hda_gen_spec *spec, int type,
|
|||
const char *sfx, int cidx, unsigned long val)
|
||||
{
|
||||
char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
|
||||
snprintf(name, sizeof(name), "%s %s %s", pfx, dir, sfx);
|
||||
int len;
|
||||
|
||||
len = snprintf(name, sizeof(name), "%s %s %s", pfx, dir, sfx);
|
||||
if (snd_BUG_ON(len >= sizeof(name)))
|
||||
return -EINVAL;
|
||||
if (!add_control(spec, type, name, cidx, val))
|
||||
return -ENOMEM;
|
||||
return 0;
|
||||
|
|
|
@ -68,7 +68,7 @@ const struct hda_verb cs8409_cs42l42_init_verbs[] = {
|
|||
{} /* terminator */
|
||||
};
|
||||
|
||||
const struct hda_pintbl cs8409_cs42l42_pincfgs[] = {
|
||||
static const struct hda_pintbl cs8409_cs42l42_pincfgs[] = {
|
||||
{ CS8409_PIN_ASP1_TRANSMITTER_A, 0x042120f0 }, /* ASP-1-TX */
|
||||
{ CS8409_PIN_ASP1_RECEIVER_A, 0x04a12050 }, /* ASP-1-RX */
|
||||
{ CS8409_PIN_ASP2_TRANSMITTER_A, 0x901000f0 }, /* ASP-2-TX */
|
||||
|
@ -76,7 +76,7 @@ const struct hda_pintbl cs8409_cs42l42_pincfgs[] = {
|
|||
{} /* terminator */
|
||||
};
|
||||
|
||||
const struct hda_pintbl cs8409_cs42l42_pincfgs_no_dmic[] = {
|
||||
static const struct hda_pintbl cs8409_cs42l42_pincfgs_no_dmic[] = {
|
||||
{ CS8409_PIN_ASP1_TRANSMITTER_A, 0x042120f0 }, /* ASP-1-TX */
|
||||
{ CS8409_PIN_ASP1_RECEIVER_A, 0x04a12050 }, /* ASP-1-RX */
|
||||
{ CS8409_PIN_ASP2_TRANSMITTER_A, 0x901000f0 }, /* ASP-2-TX */
|
||||
|
@ -121,7 +121,7 @@ static const struct cs8409_i2c_param cs42l42_init_reg_seq[] = {
|
|||
{ CS42L42_MIXER_CHA_VOL, 0x3F },
|
||||
{ CS42L42_MIXER_CHB_VOL, 0x3F },
|
||||
{ CS42L42_MIXER_ADC_VOL, 0x3f },
|
||||
{ CS42L42_HP_CTL, 0x03 },
|
||||
{ CS42L42_HP_CTL, 0x0D },
|
||||
{ CS42L42_MIC_DET_CTL1, 0xB6 },
|
||||
{ CS42L42_TIPSENSE_CTL, 0xC2 },
|
||||
{ CS42L42_HS_CLAMP_DISABLE, 0x01 },
|
||||
|
@ -131,7 +131,7 @@ static const struct cs8409_i2c_param cs42l42_init_reg_seq[] = {
|
|||
{ CS42L42_RSENSE_CTL3, 0x00 },
|
||||
{ CS42L42_TSENSE_CTL, 0x80 },
|
||||
{ CS42L42_HS_BIAS_CTL, 0xC0 },
|
||||
{ CS42L42_PWR_CTL1, 0x02 },
|
||||
{ CS42L42_PWR_CTL1, 0x02, 10000 },
|
||||
{ CS42L42_ADC_OVFL_INT_MASK, 0xff },
|
||||
{ CS42L42_MIXER_INT_MASK, 0xff },
|
||||
{ CS42L42_SRC_INT_MASK, 0xff },
|
||||
|
@ -279,7 +279,7 @@ const struct hda_verb dolphin_init_verbs[] = {
|
|||
{} /* terminator */
|
||||
};
|
||||
|
||||
const struct hda_pintbl dolphin_pincfgs[] = {
|
||||
static const struct hda_pintbl dolphin_pincfgs[] = {
|
||||
{ 0x24, 0x022210f0 }, /* ASP-1-TX-A */
|
||||
{ 0x25, 0x010240f0 }, /* ASP-1-TX-B */
|
||||
{ 0x34, 0x02a21050 }, /* ASP-1-RX */
|
||||
|
@ -315,7 +315,7 @@ static const struct cs8409_i2c_param dolphin_c0_init_reg_seq[] = {
|
|||
{ CS42L42_ASP_TX_SZ_EN, 0x01 },
|
||||
{ CS42L42_PWR_CTL1, 0x0A },
|
||||
{ CS42L42_PWR_CTL2, 0x84 },
|
||||
{ CS42L42_HP_CTL, 0x03 },
|
||||
{ CS42L42_HP_CTL, 0x0D },
|
||||
{ CS42L42_MIXER_CHA_VOL, 0x3F },
|
||||
{ CS42L42_MIXER_CHB_VOL, 0x3F },
|
||||
{ CS42L42_MIXER_ADC_VOL, 0x3f },
|
||||
|
@ -328,7 +328,7 @@ static const struct cs8409_i2c_param dolphin_c0_init_reg_seq[] = {
|
|||
{ CS42L42_RSENSE_CTL3, 0x00 },
|
||||
{ CS42L42_TSENSE_CTL, 0x80 },
|
||||
{ CS42L42_HS_BIAS_CTL, 0xC0 },
|
||||
{ CS42L42_PWR_CTL1, 0x02 },
|
||||
{ CS42L42_PWR_CTL1, 0x02, 10000 },
|
||||
{ CS42L42_ADC_OVFL_INT_MASK, 0xff },
|
||||
{ CS42L42_MIXER_INT_MASK, 0xff },
|
||||
{ CS42L42_SRC_INT_MASK, 0xff },
|
||||
|
@ -371,7 +371,7 @@ static const struct cs8409_i2c_param dolphin_c1_init_reg_seq[] = {
|
|||
{ CS42L42_ASP_TX_SZ_EN, 0x00 },
|
||||
{ CS42L42_PWR_CTL1, 0x0E },
|
||||
{ CS42L42_PWR_CTL2, 0x84 },
|
||||
{ CS42L42_HP_CTL, 0x01 },
|
||||
{ CS42L42_HP_CTL, 0x0D },
|
||||
{ CS42L42_MIXER_CHA_VOL, 0x3F },
|
||||
{ CS42L42_MIXER_CHB_VOL, 0x3F },
|
||||
{ CS42L42_MIXER_ADC_VOL, 0x3f },
|
||||
|
@ -384,7 +384,7 @@ static const struct cs8409_i2c_param dolphin_c1_init_reg_seq[] = {
|
|||
{ CS42L42_RSENSE_CTL3, 0x00 },
|
||||
{ CS42L42_TSENSE_CTL, 0x80 },
|
||||
{ CS42L42_HS_BIAS_CTL, 0xC0 },
|
||||
{ CS42L42_PWR_CTL1, 0x06 },
|
||||
{ CS42L42_PWR_CTL1, 0x06, 10000 },
|
||||
{ CS42L42_ADC_OVFL_INT_MASK, 0xff },
|
||||
{ CS42L42_MIXER_INT_MASK, 0xff },
|
||||
{ CS42L42_SRC_INT_MASK, 0xff },
|
||||
|
@ -473,7 +473,7 @@ struct sub_codec dolphin_cs42l42_1 = {
|
|||
* Arrays Used for all projects using CS8409
|
||||
******************************************************************************/
|
||||
|
||||
const struct snd_pci_quirk cs8409_fixup_tbl[] = {
|
||||
const struct hda_quirk cs8409_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x1028, 0x0A11, "Bullseye", CS8409_BULLSEYE),
|
||||
SND_PCI_QUIRK(0x1028, 0x0A12, "Bullseye", CS8409_BULLSEYE),
|
||||
SND_PCI_QUIRK(0x1028, 0x0A23, "Bullseye", CS8409_BULLSEYE),
|
||||
|
@ -550,6 +550,10 @@ const struct snd_pci_quirk cs8409_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x1028, 0x0C50, "Dolphin", CS8409_DOLPHIN),
|
||||
SND_PCI_QUIRK(0x1028, 0x0C51, "Dolphin", CS8409_DOLPHIN),
|
||||
SND_PCI_QUIRK(0x1028, 0x0C52, "Dolphin", CS8409_DOLPHIN),
|
||||
SND_PCI_QUIRK(0x1028, 0x0C73, "Dolphin", CS8409_DOLPHIN),
|
||||
SND_PCI_QUIRK(0x1028, 0x0C75, "Dolphin", CS8409_DOLPHIN),
|
||||
SND_PCI_QUIRK(0x1028, 0x0C7D, "Dolphin", CS8409_DOLPHIN),
|
||||
SND_PCI_QUIRK(0x1028, 0x0C7F, "Dolphin", CS8409_DOLPHIN),
|
||||
{} /* terminator */
|
||||
};
|
||||
|
||||
|
|
|
@ -346,6 +346,11 @@ static int cs8409_i2c_bulk_write(struct sub_codec *scodec, const struct cs8409_i
|
|||
|
||||
if (cs8409_i2c_wait_complete(codec) < 0)
|
||||
goto error;
|
||||
/* Certain use cases may require a delay
|
||||
* after a write operation before proceeding.
|
||||
*/
|
||||
if (seq[i].delay)
|
||||
fsleep(seq[i].delay);
|
||||
}
|
||||
|
||||
mutex_unlock(&spec->i2c_mux);
|
||||
|
@ -876,7 +881,7 @@ static void cs42l42_resume(struct sub_codec *cs42l42)
|
|||
{ CS42L42_DET_INT_STATUS2, 0x00 },
|
||||
{ CS42L42_TSRS_PLUG_STATUS, 0x00 },
|
||||
};
|
||||
int fsv_old, fsv_new;
|
||||
unsigned int fsv;
|
||||
|
||||
/* Bring CS42L42 out of Reset */
|
||||
spec->gpio_data = snd_hda_codec_read(codec, CS8409_PIN_AFG, 0, AC_VERB_GET_GPIO_DATA, 0);
|
||||
|
@ -888,18 +893,19 @@ static void cs42l42_resume(struct sub_codec *cs42l42)
|
|||
|
||||
/* Initialize CS42L42 companion codec */
|
||||
cs8409_i2c_bulk_write(cs42l42, cs42l42->init_seq, cs42l42->init_seq_num);
|
||||
usleep_range(20000, 25000);
|
||||
|
||||
/* Clear interrupts, by reading interrupt status registers */
|
||||
cs8409_i2c_bulk_read(cs42l42, irq_regs, ARRAY_SIZE(irq_regs));
|
||||
|
||||
fsv_old = cs8409_i2c_read(cs42l42, CS42L42_HP_CTL);
|
||||
if (cs42l42->full_scale_vol == CS42L42_FULL_SCALE_VOL_0DB)
|
||||
fsv_new = fsv_old & ~CS42L42_FULL_SCALE_VOL_MASK;
|
||||
else
|
||||
fsv_new = fsv_old & CS42L42_FULL_SCALE_VOL_MASK;
|
||||
if (fsv_new != fsv_old)
|
||||
cs8409_i2c_write(cs42l42, CS42L42_HP_CTL, fsv_new);
|
||||
fsv = cs8409_i2c_read(cs42l42, CS42L42_HP_CTL);
|
||||
if (cs42l42->full_scale_vol) {
|
||||
// Set the full scale volume bit
|
||||
fsv |= CS42L42_FULL_SCALE_VOL_MASK;
|
||||
cs8409_i2c_write(cs42l42, CS42L42_HP_CTL, fsv);
|
||||
}
|
||||
// Unmute analog channels A and B
|
||||
fsv = (fsv & ~CS42L42_ANA_MUTE_AB);
|
||||
cs8409_i2c_write(cs42l42, CS42L42_HP_CTL, fsv);
|
||||
|
||||
/* we have to explicitly allow unsol event handling even during the
|
||||
* resume phase so that the jack event is processed properly
|
||||
|
@ -909,7 +915,6 @@ static void cs42l42_resume(struct sub_codec *cs42l42)
|
|||
cs42l42_enable_jack_detect(cs42l42);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
static void cs42l42_suspend(struct sub_codec *cs42l42)
|
||||
{
|
||||
struct hda_codec *codec = cs42l42->codec;
|
||||
|
@ -921,7 +926,7 @@ static void cs42l42_suspend(struct sub_codec *cs42l42)
|
|||
{ CS42L42_MIXER_CHA_VOL, 0x3F },
|
||||
{ CS42L42_MIXER_ADC_VOL, 0x3F },
|
||||
{ CS42L42_MIXER_CHB_VOL, 0x3F },
|
||||
{ CS42L42_HP_CTL, 0x0F },
|
||||
{ CS42L42_HP_CTL, 0x0D },
|
||||
{ CS42L42_ASP_RX_DAI0_EN, 0x00 },
|
||||
{ CS42L42_ASP_CLK_CFG, 0x00 },
|
||||
{ CS42L42_PWR_CTL1, 0xFE },
|
||||
|
@ -948,7 +953,6 @@ static void cs42l42_suspend(struct sub_codec *cs42l42)
|
|||
spec->gpio_data &= ~cs42l42->reset_gpio;
|
||||
snd_hda_codec_write(codec, CS8409_PIN_AFG, 0, AC_VERB_SET_GPIO_DATA, spec->gpio_data);
|
||||
}
|
||||
#endif
|
||||
|
||||
static void cs8409_free(struct hda_codec *codec)
|
||||
{
|
||||
|
@ -1003,7 +1007,6 @@ static void cs8409_cs42l42_jack_unsol_event(struct hda_codec *codec, unsigned in
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
/* Manage PDREF, when transition to D3hot */
|
||||
static int cs8409_cs42l42_suspend(struct hda_codec *codec)
|
||||
{
|
||||
|
@ -1025,7 +1028,6 @@ static int cs8409_cs42l42_suspend(struct hda_codec *codec)
|
|||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Vendor specific HW configuration
|
||||
* PLL, ASP, I2C, SPI, GPIOs, DMIC etc...
|
||||
|
@ -1080,9 +1082,7 @@ static const struct hda_codec_ops cs8409_cs42l42_patch_ops = {
|
|||
.init = cs8409_init,
|
||||
.free = cs8409_free,
|
||||
.unsol_event = cs8409_cs42l42_jack_unsol_event,
|
||||
#ifdef CONFIG_PM
|
||||
.suspend = cs8409_cs42l42_suspend,
|
||||
#endif
|
||||
};
|
||||
|
||||
static int cs8409_cs42l42_exec_verb(struct hdac_device *dev, unsigned int cmd, unsigned int flags,
|
||||
|
@ -1310,9 +1310,7 @@ static const struct hda_codec_ops cs8409_dolphin_patch_ops = {
|
|||
.init = cs8409_init,
|
||||
.free = cs8409_free,
|
||||
.unsol_event = dolphin_jack_unsol_event,
|
||||
#ifdef CONFIG_PM
|
||||
.suspend = cs8409_cs42l42_suspend,
|
||||
#endif
|
||||
};
|
||||
|
||||
static int dolphin_exec_verb(struct hdac_device *dev, unsigned int cmd, unsigned int flags,
|
||||
|
@ -1371,6 +1369,7 @@ void dolphin_fixups(struct hda_codec *codec, const struct hda_fixup *fix, int ac
|
|||
spec->scodecs[CS8409_CODEC1] = &dolphin_cs42l42_1;
|
||||
spec->scodecs[CS8409_CODEC1]->codec = codec;
|
||||
spec->num_scodecs = 2;
|
||||
spec->gen.suppress_vmaster = 1;
|
||||
|
||||
codec->patch_ops = cs8409_dolphin_patch_ops;
|
||||
|
||||
|
@ -1410,8 +1409,9 @@ void dolphin_fixups(struct hda_codec *codec, const struct hda_fixup *fix, int ac
|
|||
kctrl = snd_hda_gen_add_kctl(&spec->gen, "Line Out Playback Volume",
|
||||
&cs42l42_dac_volume_mixer);
|
||||
/* Update Line Out kcontrol template */
|
||||
kctrl->private_value = HDA_COMPOSE_AMP_VAL_OFS(DOLPHIN_HP_PIN_NID, 3, CS8409_CODEC1,
|
||||
HDA_OUTPUT, CS42L42_VOL_DAC) | HDA_AMP_VAL_MIN_MUTE;
|
||||
if (kctrl)
|
||||
kctrl->private_value = HDA_COMPOSE_AMP_VAL_OFS(DOLPHIN_HP_PIN_NID, 3, CS8409_CODEC1,
|
||||
HDA_OUTPUT, CS42L42_VOL_DAC) | HDA_AMP_VAL_MIN_MUTE;
|
||||
cs8409_enable_ur(codec, 0);
|
||||
snd_hda_codec_set_name(codec, "CS8409/CS42L42");
|
||||
break;
|
||||
|
|
|
@ -229,9 +229,10 @@ enum cs8409_coefficient_index_registers {
|
|||
#define CS42L42_I2C_SLEEP_US (2000)
|
||||
#define CS42L42_PDN_TIMEOUT_US (250000)
|
||||
#define CS42L42_PDN_SLEEP_US (2000)
|
||||
#define CS42L42_ANA_MUTE_AB (0x0C)
|
||||
#define CS42L42_FULL_SCALE_VOL_MASK (2)
|
||||
#define CS42L42_FULL_SCALE_VOL_0DB (1)
|
||||
#define CS42L42_FULL_SCALE_VOL_MINUS6DB (0)
|
||||
#define CS42L42_FULL_SCALE_VOL_0DB (0)
|
||||
#define CS42L42_FULL_SCALE_VOL_MINUS6DB (1)
|
||||
|
||||
/* Dell BULLSEYE / WARLOCK / CYBORG Specific Definitions */
|
||||
|
||||
|
@ -289,6 +290,7 @@ enum {
|
|||
struct cs8409_i2c_param {
|
||||
unsigned int addr;
|
||||
unsigned int value;
|
||||
unsigned int delay;
|
||||
};
|
||||
|
||||
struct cs8409_cir_param {
|
||||
|
@ -494,17 +496,15 @@ int cs42l42_volume_put(struct snd_kcontrol *kctrl, struct snd_ctl_elem_value *uc
|
|||
|
||||
extern const struct hda_pcm_stream cs42l42_48k_pcm_analog_playback;
|
||||
extern const struct hda_pcm_stream cs42l42_48k_pcm_analog_capture;
|
||||
extern const struct snd_pci_quirk cs8409_fixup_tbl[];
|
||||
extern const struct hda_quirk cs8409_fixup_tbl[];
|
||||
extern const struct hda_model_fixup cs8409_models[];
|
||||
extern const struct hda_fixup cs8409_fixups[];
|
||||
extern const struct hda_verb cs8409_cs42l42_init_verbs[];
|
||||
extern const struct hda_pintbl cs8409_cs42l42_pincfgs[];
|
||||
extern const struct cs8409_cir_param cs8409_cs42l42_hw_cfg[];
|
||||
extern const struct cs8409_cir_param cs8409_cs42l42_bullseye_atn[];
|
||||
extern struct sub_codec cs8409_cs42l42_codec;
|
||||
|
||||
extern const struct hda_verb dolphin_init_verbs[];
|
||||
extern const struct hda_pintbl dolphin_pincfgs[];
|
||||
extern const struct cs8409_cir_param dolphin_hw_cfg[];
|
||||
extern struct sub_codec dolphin_cs42l42_0;
|
||||
extern struct sub_codec dolphin_cs42l42_1;
|
||||
|
|
Loading…
Reference in a new issue