Commit 6bb7a935 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6:
  ALSA: us122l: fix missing unlock in usb_stream_hwdep_vm_fault()
  ALSA: hda - Fix quirk lists for realtek codecs
  ALSA: hda - Add support of ALC272
  ALSA: hda - Add ALC887 support
  ALSA: hda - Add ALC1200 support
  ALSA: hda - Fix PCI SSID of ASUS M90V
  ALSA: hda - Add auto mic switch in realtek auto-probe mode
  ALSA: Fix pxa2xx-ac97-lib.c compilation
  ALSA: ASoC: Hide TLV320AIC26 configuration option for non-OpenFirwmare users
  ALSA: hda: fix nid variable warning
  ALSA: ASoC: Fix compile-time warning for tlv320aic23.c
parents 08d19f51 af31ed21
...@@ -50,7 +50,7 @@ unsigned short pxa2xx_ac97_read(struct snd_ac97 *ac97, unsigned short reg) ...@@ -50,7 +50,7 @@ unsigned short pxa2xx_ac97_read(struct snd_ac97 *ac97, unsigned short reg)
mutex_lock(&car_mutex); mutex_lock(&car_mutex);
/* set up primary or secondary codec space */ /* set up primary or secondary codec space */
if ((cpu_is_pxa21x() || cpu_is_pxa25x()) && reg == AC97_GPIO_STATUS) if (cpu_is_pxa25x() && reg == AC97_GPIO_STATUS)
reg_addr = ac97->num ? &SMC_REG_BASE : &PMC_REG_BASE; reg_addr = ac97->num ? &SMC_REG_BASE : &PMC_REG_BASE;
else else
reg_addr = ac97->num ? &SAC_REG_BASE : &PAC_REG_BASE; reg_addr = ac97->num ? &SAC_REG_BASE : &PAC_REG_BASE;
...@@ -90,7 +90,7 @@ void pxa2xx_ac97_write(struct snd_ac97 *ac97, unsigned short reg, ...@@ -90,7 +90,7 @@ void pxa2xx_ac97_write(struct snd_ac97 *ac97, unsigned short reg,
mutex_lock(&car_mutex); mutex_lock(&car_mutex);
/* set up primary or secondary codec space */ /* set up primary or secondary codec space */
if ((cpu_is_pxa21x() || cpu_is_pxa25x()) && reg == AC97_GPIO_STATUS) if (cpu_is_pxa25x() && reg == AC97_GPIO_STATUS)
reg_addr = ac97->num ? &SMC_REG_BASE : &PMC_REG_BASE; reg_addr = ac97->num ? &SMC_REG_BASE : &PMC_REG_BASE;
else else
reg_addr = ac97->num ? &SAC_REG_BASE : &PAC_REG_BASE; reg_addr = ac97->num ? &SAC_REG_BASE : &PAC_REG_BASE;
...@@ -200,7 +200,7 @@ static inline void pxa_ac97_cold_pxa3xx(void) ...@@ -200,7 +200,7 @@ static inline void pxa_ac97_cold_pxa3xx(void)
bool pxa2xx_ac97_try_warm_reset(struct snd_ac97 *ac97) bool pxa2xx_ac97_try_warm_reset(struct snd_ac97 *ac97)
{ {
#ifdef CONFIG_PXA25x #ifdef CONFIG_PXA25x
if (cpu_is_pxa21x() || cpu_is_pxa25x()) if (cpu_is_pxa25x())
pxa_ac97_warm_pxa25x(); pxa_ac97_warm_pxa25x();
else else
#endif #endif
...@@ -230,7 +230,7 @@ EXPORT_SYMBOL_GPL(pxa2xx_ac97_try_warm_reset); ...@@ -230,7 +230,7 @@ EXPORT_SYMBOL_GPL(pxa2xx_ac97_try_warm_reset);
bool pxa2xx_ac97_try_cold_reset(struct snd_ac97 *ac97) bool pxa2xx_ac97_try_cold_reset(struct snd_ac97 *ac97)
{ {
#ifdef CONFIG_PXA25x #ifdef CONFIG_PXA25x
if (cpu_is_pxa21x() || cpu_is_pxa25x()) if (cpu_is_pxa25x())
pxa_ac97_cold_pxa25x(); pxa_ac97_cold_pxa25x();
else else
#endif #endif
...@@ -301,7 +301,7 @@ EXPORT_SYMBOL_GPL(pxa2xx_ac97_hw_suspend); ...@@ -301,7 +301,7 @@ EXPORT_SYMBOL_GPL(pxa2xx_ac97_hw_suspend);
int pxa2xx_ac97_hw_resume(void) int pxa2xx_ac97_hw_resume(void)
{ {
if (cpu_is_pxa21x() || cpu_is_pxa25x() || cpu_is_pxa27x()) { if (cpu_is_pxa25x() || cpu_is_pxa27x()) {
pxa_gpio_mode(GPIO31_SYNC_AC97_MD); pxa_gpio_mode(GPIO31_SYNC_AC97_MD);
pxa_gpio_mode(GPIO30_SDATA_OUT_AC97_MD); pxa_gpio_mode(GPIO30_SDATA_OUT_AC97_MD);
pxa_gpio_mode(GPIO28_BITCLK_AC97_MD); pxa_gpio_mode(GPIO28_BITCLK_AC97_MD);
...@@ -325,7 +325,7 @@ int __devinit pxa2xx_ac97_hw_probe(struct platform_device *dev) ...@@ -325,7 +325,7 @@ int __devinit pxa2xx_ac97_hw_probe(struct platform_device *dev)
if (ret < 0) if (ret < 0)
goto err; goto err;
if (cpu_is_pxa21x() || cpu_is_pxa25x() || cpu_is_pxa27x()) { if (cpu_is_pxa25x() || cpu_is_pxa27x()) {
pxa_gpio_mode(GPIO31_SYNC_AC97_MD); pxa_gpio_mode(GPIO31_SYNC_AC97_MD);
pxa_gpio_mode(GPIO30_SDATA_OUT_AC97_MD); pxa_gpio_mode(GPIO30_SDATA_OUT_AC97_MD);
pxa_gpio_mode(GPIO28_BITCLK_AC97_MD); pxa_gpio_mode(GPIO28_BITCLK_AC97_MD);
......
...@@ -822,6 +822,27 @@ static void alc_sku_automute(struct hda_codec *codec) ...@@ -822,6 +822,27 @@ static void alc_sku_automute(struct hda_codec *codec)
spec->jack_present ? 0 : PIN_OUT); spec->jack_present ? 0 : PIN_OUT);
} }
static void alc_mic_automute(struct hda_codec *codec)
{
struct alc_spec *spec = codec->spec;
unsigned int present;
unsigned int mic_nid = spec->autocfg.input_pins[AUTO_PIN_MIC];
unsigned int fmic_nid = spec->autocfg.input_pins[AUTO_PIN_FRONT_MIC];
unsigned int mix_nid = spec->capsrc_nids[0];
unsigned int capsrc_idx_mic, capsrc_idx_fmic;
capsrc_idx_mic = mic_nid - 0x18;
capsrc_idx_fmic = fmic_nid - 0x18;
present = snd_hda_codec_read(codec, mic_nid, 0,
AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
snd_hda_codec_write(codec, mix_nid, 0, AC_VERB_SET_AMP_GAIN_MUTE,
0x7000 | (capsrc_idx_mic << 8) | (present ? 0 : 0x80));
snd_hda_codec_write(codec, mix_nid, 0, AC_VERB_SET_AMP_GAIN_MUTE,
0x7000 | (capsrc_idx_fmic << 8) | (present ? 0x80 : 0));
snd_hda_codec_amp_stereo(codec, 0x0b, HDA_INPUT, capsrc_idx_fmic,
HDA_AMP_MUTE, present ? HDA_AMP_MUTE : 0);
}
/* unsolicited event for HP jack sensing */ /* unsolicited event for HP jack sensing */
static void alc_sku_unsol_event(struct hda_codec *codec, unsigned int res) static void alc_sku_unsol_event(struct hda_codec *codec, unsigned int res)
{ {
...@@ -829,10 +850,17 @@ static void alc_sku_unsol_event(struct hda_codec *codec, unsigned int res) ...@@ -829,10 +850,17 @@ static void alc_sku_unsol_event(struct hda_codec *codec, unsigned int res)
res >>= 28; res >>= 28;
else else
res >>= 26; res >>= 26;
if (res != ALC880_HP_EVENT) if (res == ALC880_HP_EVENT)
return; alc_sku_automute(codec);
if (res == ALC880_MIC_EVENT)
alc_mic_automute(codec);
}
static void alc_inithook(struct hda_codec *codec)
{
alc_sku_automute(codec); alc_sku_automute(codec);
alc_mic_automute(codec);
} }
/* additional initialization for ALC888 variants */ /* additional initialization for ALC888 variants */
...@@ -1018,10 +1046,17 @@ do_sku: ...@@ -1018,10 +1046,17 @@ do_sku:
else else
return; return;
} }
if (spec->autocfg.hp_pins[0])
snd_hda_codec_write(codec, spec->autocfg.hp_pins[0], 0,
AC_VERB_SET_UNSOLICITED_ENABLE,
AC_USRSP_EN | ALC880_HP_EVENT);
snd_hda_codec_write(codec, spec->autocfg.hp_pins[0], 0, if (spec->autocfg.input_pins[AUTO_PIN_MIC] &&
AC_VERB_SET_UNSOLICITED_ENABLE, spec->autocfg.input_pins[AUTO_PIN_FRONT_MIC])
AC_USRSP_EN | ALC880_HP_EVENT); snd_hda_codec_write(codec,
spec->autocfg.input_pins[AUTO_PIN_MIC], 0,
AC_VERB_SET_UNSOLICITED_ENABLE,
AC_USRSP_EN | ALC880_MIC_EVENT);
spec->unsol_event = alc_sku_unsol_event; spec->unsol_event = alc_sku_unsol_event;
} }
...@@ -3808,7 +3843,7 @@ static void alc880_auto_init(struct hda_codec *codec) ...@@ -3808,7 +3843,7 @@ static void alc880_auto_init(struct hda_codec *codec)
alc880_auto_init_extra_out(codec); alc880_auto_init_extra_out(codec);
alc880_auto_init_analog_input(codec); alc880_auto_init_analog_input(codec);
if (spec->unsol_event) if (spec->unsol_event)
alc_sku_automute(codec); alc_inithook(codec);
} }
/* /*
...@@ -5219,7 +5254,7 @@ static void alc260_auto_init(struct hda_codec *codec) ...@@ -5219,7 +5254,7 @@ static void alc260_auto_init(struct hda_codec *codec)
alc260_auto_init_multi_out(codec); alc260_auto_init_multi_out(codec);
alc260_auto_init_analog_input(codec); alc260_auto_init_analog_input(codec);
if (spec->unsol_event) if (spec->unsol_event)
alc_sku_automute(codec); alc_inithook(codec);
} }
#ifdef CONFIG_SND_HDA_POWER_SAVE #ifdef CONFIG_SND_HDA_POWER_SAVE
...@@ -6629,7 +6664,7 @@ static void alc882_auto_init(struct hda_codec *codec) ...@@ -6629,7 +6664,7 @@ static void alc882_auto_init(struct hda_codec *codec)
alc882_auto_init_analog_input(codec); alc882_auto_init_analog_input(codec);
alc882_auto_init_input_src(codec); alc882_auto_init_input_src(codec);
if (spec->unsol_event) if (spec->unsol_event)
alc_sku_automute(codec); alc_inithook(codec);
} }
static int patch_alc883(struct hda_codec *codec); /* called in patch_alc882() */ static int patch_alc883(struct hda_codec *codec); /* called in patch_alc882() */
...@@ -8306,8 +8341,8 @@ static struct snd_pci_quirk alc883_cfg_tbl[] = { ...@@ -8306,8 +8341,8 @@ static struct snd_pci_quirk alc883_cfg_tbl[] = {
SND_PCI_QUIRK(0x103c, 0x2a4f, "HP Samba", ALC888_3ST_HP), SND_PCI_QUIRK(0x103c, 0x2a4f, "HP Samba", ALC888_3ST_HP),
SND_PCI_QUIRK(0x103c, 0x2a60, "HP Lucknow", ALC888_3ST_HP), SND_PCI_QUIRK(0x103c, 0x2a60, "HP Lucknow", ALC888_3ST_HP),
SND_PCI_QUIRK(0x103c, 0x2a61, "HP Nettle", ALC883_6ST_DIG), SND_PCI_QUIRK(0x103c, 0x2a61, "HP Nettle", ALC883_6ST_DIG),
SND_PCI_QUIRK(0x1043, 0x1873, "Asus M90V", ALC888_ASUS_M90V),
SND_PCI_QUIRK(0x1043, 0x8249, "Asus M2A-VM HDMI", ALC883_3ST_6ch_DIG), SND_PCI_QUIRK(0x1043, 0x8249, "Asus M2A-VM HDMI", ALC883_3ST_6ch_DIG),
SND_PCI_QUIRK(0x1043, 0x8317, "Asus M90V", ALC888_ASUS_M90V),
SND_PCI_QUIRK(0x1043, 0x835f, "Asus Eee 1601", ALC888_ASUS_EEE1601), SND_PCI_QUIRK(0x1043, 0x835f, "Asus Eee 1601", ALC888_ASUS_EEE1601),
SND_PCI_QUIRK(0x105b, 0x0ce8, "Foxconn P35AX-S", ALC883_6ST_DIG), SND_PCI_QUIRK(0x105b, 0x0ce8, "Foxconn P35AX-S", ALC883_6ST_DIG),
SND_PCI_QUIRK(0x105b, 0x6668, "Foxconn", ALC883_6ST_DIG), SND_PCI_QUIRK(0x105b, 0x6668, "Foxconn", ALC883_6ST_DIG),
...@@ -8758,7 +8793,7 @@ static void alc883_auto_init(struct hda_codec *codec) ...@@ -8758,7 +8793,7 @@ static void alc883_auto_init(struct hda_codec *codec)
alc883_auto_init_analog_input(codec); alc883_auto_init_analog_input(codec);
alc883_auto_init_input_src(codec); alc883_auto_init_input_src(codec);
if (spec->unsol_event) if (spec->unsol_event)
alc_sku_automute(codec); alc_inithook(codec);
} }
static int patch_alc883(struct hda_codec *codec) static int patch_alc883(struct hda_codec *codec)
...@@ -8802,8 +8837,13 @@ static int patch_alc883(struct hda_codec *codec) ...@@ -8802,8 +8837,13 @@ static int patch_alc883(struct hda_codec *codec)
switch (codec->vendor_id) { switch (codec->vendor_id) {
case 0x10ec0888: case 0x10ec0888:
spec->stream_name_analog = "ALC888 Analog"; if (codec->revision_id == 0x100101) {
spec->stream_name_digital = "ALC888 Digital"; spec->stream_name_analog = "ALC1200 Analog";
spec->stream_name_digital = "ALC1200 Digital";
} else {
spec->stream_name_analog = "ALC888 Analog";
spec->stream_name_digital = "ALC888 Digital";
}
break; break;
case 0x10ec0889: case 0x10ec0889:
spec->stream_name_analog = "ALC889 Analog"; spec->stream_name_analog = "ALC889 Analog";
...@@ -10285,7 +10325,7 @@ static void alc262_auto_init(struct hda_codec *codec) ...@@ -10285,7 +10325,7 @@ static void alc262_auto_init(struct hda_codec *codec)
alc262_auto_init_analog_input(codec); alc262_auto_init_analog_input(codec);
alc262_auto_init_input_src(codec); alc262_auto_init_input_src(codec);
if (spec->unsol_event) if (spec->unsol_event)
alc_sku_automute(codec); alc_inithook(codec);
} }
/* /*
...@@ -10343,7 +10383,7 @@ static struct snd_pci_quirk alc262_cfg_tbl[] = { ...@@ -10343,7 +10383,7 @@ static struct snd_pci_quirk alc262_cfg_tbl[] = {
SND_PCI_QUIRK(0x104d, 0x9015, "Sony 0x9015", ALC262_SONY_ASSAMD), SND_PCI_QUIRK(0x104d, 0x9015, "Sony 0x9015", ALC262_SONY_ASSAMD),
SND_PCI_QUIRK(0x1179, 0x0001, "Toshiba dynabook SS RX1", SND_PCI_QUIRK(0x1179, 0x0001, "Toshiba dynabook SS RX1",
ALC262_TOSHIBA_RX1), ALC262_TOSHIBA_RX1),
SND_PCI_QUIRK(0x1179, 0x0268, "Toshiba S06", ALC262_TOSHIBA_S06), SND_PCI_QUIRK(0x1179, 0xff7b, "Toshiba S06", ALC262_TOSHIBA_S06),
SND_PCI_QUIRK(0x10cf, 0x1397, "Fujitsu", ALC262_FUJITSU), SND_PCI_QUIRK(0x10cf, 0x1397, "Fujitsu", ALC262_FUJITSU),
SND_PCI_QUIRK(0x10cf, 0x142d, "Fujitsu Lifebook E8410", ALC262_FUJITSU), SND_PCI_QUIRK(0x10cf, 0x142d, "Fujitsu Lifebook E8410", ALC262_FUJITSU),
SND_PCI_QUIRK(0x144d, 0xc032, "Samsung Q1 Ultra", ALC262_ULTRA), SND_PCI_QUIRK(0x144d, 0xc032, "Samsung Q1 Ultra", ALC262_ULTRA),
...@@ -11417,7 +11457,7 @@ static void alc268_auto_init(struct hda_codec *codec) ...@@ -11417,7 +11457,7 @@ static void alc268_auto_init(struct hda_codec *codec)
alc268_auto_init_mono_speaker_out(codec); alc268_auto_init_mono_speaker_out(codec);
alc268_auto_init_analog_input(codec); alc268_auto_init_analog_input(codec);
if (spec->unsol_event) if (spec->unsol_event)
alc_sku_automute(codec); alc_inithook(codec);
} }
/* /*
...@@ -12200,7 +12240,7 @@ static void alc269_auto_init(struct hda_codec *codec) ...@@ -12200,7 +12240,7 @@ static void alc269_auto_init(struct hda_codec *codec)
alc269_auto_init_hp_out(codec); alc269_auto_init_hp_out(codec);
alc269_auto_init_analog_input(codec); alc269_auto_init_analog_input(codec);
if (spec->unsol_event) if (spec->unsol_event)
alc_sku_automute(codec); alc_inithook(codec);
} }
/* /*
...@@ -13281,7 +13321,7 @@ static void alc861_auto_init(struct hda_codec *codec) ...@@ -13281,7 +13321,7 @@ static void alc861_auto_init(struct hda_codec *codec)
alc861_auto_init_hp_out(codec); alc861_auto_init_hp_out(codec);
alc861_auto_init_analog_input(codec); alc861_auto_init_analog_input(codec);
if (spec->unsol_event) if (spec->unsol_event)
alc_sku_automute(codec); alc_inithook(codec);
} }
#ifdef CONFIG_SND_HDA_POWER_SAVE #ifdef CONFIG_SND_HDA_POWER_SAVE
...@@ -14393,7 +14433,7 @@ static void alc861vd_auto_init(struct hda_codec *codec) ...@@ -14393,7 +14433,7 @@ static void alc861vd_auto_init(struct hda_codec *codec)
alc861vd_auto_init_analog_input(codec); alc861vd_auto_init_analog_input(codec);
alc861vd_auto_init_input_src(codec); alc861vd_auto_init_input_src(codec);
if (spec->unsol_event) if (spec->unsol_event)
alc_sku_automute(codec); alc_inithook(codec);
} }
static int patch_alc861vd(struct hda_codec *codec) static int patch_alc861vd(struct hda_codec *codec)
...@@ -15667,7 +15707,7 @@ static const char *alc662_models[ALC662_MODEL_LAST] = { ...@@ -15667,7 +15707,7 @@ static const char *alc662_models[ALC662_MODEL_LAST] = {
static struct snd_pci_quirk alc662_cfg_tbl[] = { static struct snd_pci_quirk alc662_cfg_tbl[] = {
SND_PCI_QUIRK(0x1043, 0x1878, "ASUS M51VA", ALC663_ASUS_M51VA), SND_PCI_QUIRK(0x1043, 0x1878, "ASUS M51VA", ALC663_ASUS_M51VA),
SND_PCI_QUIRK(0x1043, 0x19a3, "ASUS M51VA", ALC663_ASUS_G50V), SND_PCI_QUIRK(0x1043, 0x19a3, "ASUS G50V", ALC663_ASUS_G50V),
SND_PCI_QUIRK(0x1043, 0x8290, "ASUS P5GC-MX", ALC662_3ST_6ch_DIG), SND_PCI_QUIRK(0x1043, 0x8290, "ASUS P5GC-MX", ALC662_3ST_6ch_DIG),
SND_PCI_QUIRK(0x1043, 0x82a1, "ASUS Eeepc", ALC662_ASUS_EEEPC_P701), SND_PCI_QUIRK(0x1043, 0x82a1, "ASUS Eeepc", ALC662_ASUS_EEEPC_P701),
SND_PCI_QUIRK(0x1043, 0x82d1, "ASUS Eeepc EP20", ALC662_ASUS_EEEPC_EP20), SND_PCI_QUIRK(0x1043, 0x82d1, "ASUS Eeepc EP20", ALC662_ASUS_EEEPC_EP20),
...@@ -15680,6 +15720,7 @@ static struct snd_pci_quirk alc662_cfg_tbl[] = { ...@@ -15680,6 +15720,7 @@ static struct snd_pci_quirk alc662_cfg_tbl[] = {
SND_PCI_QUIRK(0x1043, 0x11d3, "ASUS NB", ALC663_ASUS_MODE1), SND_PCI_QUIRK(0x1043, 0x11d3, "ASUS NB", ALC663_ASUS_MODE1),
SND_PCI_QUIRK(0x1043, 0x1203, "ASUS NB", ALC663_ASUS_MODE1), SND_PCI_QUIRK(0x1043, 0x1203, "ASUS NB", ALC663_ASUS_MODE1),
SND_PCI_QUIRK(0x1043, 0x19e3, "ASUS NB", ALC663_ASUS_MODE1), SND_PCI_QUIRK(0x1043, 0x19e3, "ASUS NB", ALC663_ASUS_MODE1),
SND_PCI_QUIRK(0x1043, 0x1993, "ASUS N20", ALC663_ASUS_MODE1),
SND_PCI_QUIRK(0x1043, 0x19c3, "ASUS F5Z/F6x", ALC662_ASUS_MODE2), SND_PCI_QUIRK(0x1043, 0x19c3, "ASUS F5Z/F6x", ALC662_ASUS_MODE2),
SND_PCI_QUIRK(0x1043, 0x1339, "ASUS NB", ALC662_ASUS_MODE2), SND_PCI_QUIRK(0x1043, 0x1339, "ASUS NB", ALC662_ASUS_MODE2),
SND_PCI_QUIRK(0x1043, 0x1913, "ASUS NB", ALC662_ASUS_MODE2), SND_PCI_QUIRK(0x1043, 0x1913, "ASUS NB", ALC662_ASUS_MODE2),
...@@ -16223,7 +16264,7 @@ static void alc662_auto_init(struct hda_codec *codec) ...@@ -16223,7 +16264,7 @@ static void alc662_auto_init(struct hda_codec *codec)
alc662_auto_init_analog_input(codec); alc662_auto_init_analog_input(codec);
alc662_auto_init_input_src(codec); alc662_auto_init_input_src(codec);
if (spec->unsol_event) if (spec->unsol_event)
alc_sku_automute(codec); alc_inithook(codec);
} }
static int patch_alc662(struct hda_codec *codec) static int patch_alc662(struct hda_codec *codec)
...@@ -16268,6 +16309,9 @@ static int patch_alc662(struct hda_codec *codec) ...@@ -16268,6 +16309,9 @@ static int patch_alc662(struct hda_codec *codec)
if (codec->vendor_id == 0x10ec0663) { if (codec->vendor_id == 0x10ec0663) {
spec->stream_name_analog = "ALC663 Analog"; spec->stream_name_analog = "ALC663 Analog";
spec->stream_name_digital = "ALC663 Digital"; spec->stream_name_digital = "ALC663 Digital";
} else if (codec->vendor_id == 0x10ec0272) {
spec->stream_name_analog = "ALC272 Analog";
spec->stream_name_digital = "ALC272 Digital";
} else { } else {
spec->stream_name_analog = "ALC662 Analog"; spec->stream_name_analog = "ALC662 Analog";
spec->stream_name_digital = "ALC662 Digital"; spec->stream_name_digital = "ALC662 Digital";
...@@ -16305,6 +16349,7 @@ struct hda_codec_preset snd_hda_preset_realtek[] = { ...@@ -16305,6 +16349,7 @@ struct hda_codec_preset snd_hda_preset_realtek[] = {
{ .id = 0x10ec0267, .name = "ALC267", .patch = patch_alc268 }, { .id = 0x10ec0267, .name = "ALC267", .patch = patch_alc268 },
{ .id = 0x10ec0268, .name = "ALC268", .patch = patch_alc268 }, { .id = 0x10ec0268, .name = "ALC268", .patch = patch_alc268 },
{ .id = 0x10ec0269, .name = "ALC269", .patch = patch_alc269 }, { .id = 0x10ec0269, .name = "ALC269", .patch = patch_alc269 },
{ .id = 0x10ec0272, .name = "ALC272", .patch = patch_alc662 },
{ .id = 0x10ec0861, .rev = 0x100340, .name = "ALC660", { .id = 0x10ec0861, .rev = 0x100340, .name = "ALC660",
.patch = patch_alc861 }, .patch = patch_alc861 },
{ .id = 0x10ec0660, .name = "ALC660-VD", .patch = patch_alc861vd }, { .id = 0x10ec0660, .name = "ALC660-VD", .patch = patch_alc861vd },
...@@ -16323,7 +16368,10 @@ struct hda_codec_preset snd_hda_preset_realtek[] = { ...@@ -16323,7 +16368,10 @@ struct hda_codec_preset snd_hda_preset_realtek[] = {
{ .id = 0x10ec0885, .rev = 0x100103, .name = "ALC889A", { .id = 0x10ec0885, .rev = 0x100103, .name = "ALC889A",
.patch = patch_alc882 }, /* should be patch_alc883() in future */ .patch = patch_alc882 }, /* should be patch_alc883() in future */
{ .id = 0x10ec0885, .name = "ALC885", .patch = patch_alc882 }, { .id = 0x10ec0885, .name = "ALC885", .patch = patch_alc882 },
{ .id = 0x10ec0887, .name = "ALC887", .patch = patch_alc883 },
{ .id = 0x10ec0888, .name = "ALC888", .patch = patch_alc883 }, { .id = 0x10ec0888, .name = "ALC888", .patch = patch_alc883 },
{ .id = 0x10ec0888, .rev = 0x100101, .name = "ALC1200",
.patch = patch_alc883 },
{ .id = 0x10ec0889, .name = "ALC889", .patch = patch_alc883 }, { .id = 0x10ec0889, .name = "ALC889", .patch = patch_alc883 },
{} /* terminator */ {} /* terminator */
}; };
...@@ -2816,7 +2816,7 @@ static int stac92xx_auto_create_multi_out_ctls(struct hda_codec *codec, ...@@ -2816,7 +2816,7 @@ static int stac92xx_auto_create_multi_out_ctls(struct hda_codec *codec,
static const char *chname[4] = { static const char *chname[4] = {
"Front", "Surround", NULL /*CLFE*/, "Side" "Front", "Surround", NULL /*CLFE*/, "Side"
}; };
hda_nid_t nid; hda_nid_t nid = 0;
int i, err; int i, err;
struct sigmatel_spec *spec = codec->spec; struct sigmatel_spec *spec = codec->spec;
......
...@@ -68,7 +68,7 @@ config SND_SOC_TLV320AIC23 ...@@ -68,7 +68,7 @@ config SND_SOC_TLV320AIC23
depends on I2C depends on I2C
config SND_SOC_TLV320AIC26 config SND_SOC_TLV320AIC26
tristate "TI TLV320AIC26 Codec support" tristate "TI TLV320AIC26 Codec support" if SND_SOC_OF_SIMPLE
depends on SPI depends on SPI
config SND_SOC_TLV320AIC3X config SND_SOC_TLV320AIC3X
......
...@@ -84,7 +84,7 @@ static int tlv320aic23_write(struct snd_soc_codec *codec, unsigned int reg, ...@@ -84,7 +84,7 @@ static int tlv320aic23_write(struct snd_soc_codec *codec, unsigned int reg,
unsigned int value) unsigned int value)
{ {
u8 data; u8 data[2];
/* TLV320AIC23 has 7 bit address and 9 bits of data /* TLV320AIC23 has 7 bit address and 9 bits of data
* so we need to switch one data bit into reg and rest * so we need to switch one data bit into reg and rest
...@@ -96,12 +96,12 @@ static int tlv320aic23_write(struct snd_soc_codec *codec, unsigned int reg, ...@@ -96,12 +96,12 @@ static int tlv320aic23_write(struct snd_soc_codec *codec, unsigned int reg,
return -1; return -1;
} }
data = (reg << 1) | (value >> 8 & 0x01); data[0] = (reg << 1) | (value >> 8 & 0x01);
data[1] = value & 0xff;
tlv320aic23_write_reg_cache(codec, reg, value); tlv320aic23_write_reg_cache(codec, reg, value);
if (codec->hw_write(codec->control_data, data, if (codec->hw_write(codec->control_data, data, 2) == 2)
(value & 0xff)) == 0)
return 0; return 0;
printk(KERN_ERR "%s cannot write %03x to register R%d\n", __func__, printk(KERN_ERR "%s cannot write %03x to register R%d\n", __func__,
...@@ -674,7 +674,7 @@ static int tlv320aic23_probe(struct platform_device *pdev) ...@@ -674,7 +674,7 @@ static int tlv320aic23_probe(struct platform_device *pdev)
tlv320aic23_socdev = socdev; tlv320aic23_socdev = socdev;
#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE) #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
codec->hw_write = (hw_write_t) i2c_smbus_write_byte_data; codec->hw_write = (hw_write_t) i2c_master_send;
codec->hw_read = NULL; codec->hw_read = NULL;
ret = i2c_add_driver(&tlv320aic23_i2c_driver); ret = i2c_add_driver(&tlv320aic23_i2c_driver);
if (ret != 0) if (ret != 0)
......
...@@ -118,12 +118,11 @@ static int usb_stream_hwdep_vm_fault(struct vm_area_struct *area, ...@@ -118,12 +118,11 @@ static int usb_stream_hwdep_vm_fault(struct vm_area_struct *area,
void *vaddr; void *vaddr;
struct us122l *us122l = area->vm_private_data; struct us122l *us122l = area->vm_private_data;
struct usb_stream *s; struct usb_stream *s;
int vm_f = VM_FAULT_SIGBUS;
mutex_lock(&us122l->mutex); mutex_lock(&us122l->mutex);
s = us122l->sk.s; s = us122l->sk.s;
if (!s) if (!s)
goto out; goto unlock;
offset = vmf->pgoff << PAGE_SHIFT; offset = vmf->pgoff << PAGE_SHIFT;
if (offset < PAGE_ALIGN(s->read_size)) if (offset < PAGE_ALIGN(s->read_size))
...@@ -131,7 +130,7 @@ static int usb_stream_hwdep_vm_fault(struct vm_area_struct *area, ...@@ -131,7 +130,7 @@ static int usb_stream_hwdep_vm_fault(struct vm_area_struct *area,
else { else {
offset -= PAGE_ALIGN(s->read_size); offset -= PAGE_ALIGN(s->read_size);
if (offset >= PAGE_ALIGN(s->write_size)) if (offset >= PAGE_ALIGN(s->write_size))
goto out; goto unlock;
vaddr = us122l->sk.write_page + offset; vaddr = us122l->sk.write_page + offset;
} }
...@@ -141,9 +140,11 @@ static int usb_stream_hwdep_vm_fault(struct vm_area_struct *area, ...@@ -141,9 +140,11 @@ static int usb_stream_hwdep_vm_fault(struct vm_area_struct *area,
mutex_unlock(&us122l->mutex); mutex_unlock(&us122l->mutex);
vmf->page = page; vmf->page = page;
vm_f = 0;
out: return 0;
return vm_f; unlock:
mutex_unlock(&us122l->mutex);
return VM_FAULT_SIGBUS;
} }
static void usb_stream_hwdep_vm_close(struct vm_area_struct *area) static void usb_stream_hwdep_vm_close(struct vm_area_struct *area)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment