Merge branch 'fix/hda' into topic/hda
This commit is contained in:
commit
5ec02a1cfa
|
@ -68,6 +68,7 @@ MODULE_PARM_DESC(enable, "Enable FM801 soundcard.");
|
|||
module_param_array(tea575x_tuner, int, NULL, 0444);
|
||||
MODULE_PARM_DESC(tea575x_tuner, "TEA575x tuner access method (0 = auto, 1 = SF256-PCS, 2=SF256-PCP, 3=SF64-PCR, 8=disable, +16=tuner-only).");
|
||||
|
||||
#define TUNER_DISABLED (1<<3)
|
||||
#define TUNER_ONLY (1<<4)
|
||||
#define TUNER_TYPE_MASK (~TUNER_ONLY & 0xFFFF)
|
||||
|
||||
|
@ -1150,7 +1151,8 @@ static int snd_fm801_free(struct fm801 *chip)
|
|||
|
||||
__end_hw:
|
||||
#ifdef CONFIG_SND_FM801_TEA575X_BOOL
|
||||
snd_tea575x_exit(&chip->tea);
|
||||
if (!(chip->tea575x_tuner & TUNER_DISABLED))
|
||||
snd_tea575x_exit(&chip->tea);
|
||||
#endif
|
||||
if (chip->irq >= 0)
|
||||
free_irq(chip->irq, chip);
|
||||
|
@ -1236,7 +1238,6 @@ static int __devinit snd_fm801_create(struct snd_card *card,
|
|||
(tea575x_tuner & TUNER_TYPE_MASK) < 4) {
|
||||
if (snd_tea575x_init(&chip->tea)) {
|
||||
snd_printk(KERN_ERR "TEA575x radio not found\n");
|
||||
snd_fm801_free(chip);
|
||||
return -ENODEV;
|
||||
}
|
||||
} else if ((tea575x_tuner & TUNER_TYPE_MASK) == 0) {
|
||||
|
@ -1251,11 +1252,15 @@ static int __devinit snd_fm801_create(struct snd_card *card,
|
|||
}
|
||||
if (tea575x_tuner == 4) {
|
||||
snd_printk(KERN_ERR "TEA575x radio not found\n");
|
||||
snd_fm801_free(chip);
|
||||
return -ENODEV;
|
||||
chip->tea575x_tuner = TUNER_DISABLED;
|
||||
}
|
||||
}
|
||||
strlcpy(chip->tea.card, snd_fm801_tea575x_gpios[(tea575x_tuner & TUNER_TYPE_MASK) - 1].name, sizeof(chip->tea.card));
|
||||
if (!(chip->tea575x_tuner & TUNER_DISABLED)) {
|
||||
strlcpy(chip->tea.card,
|
||||
snd_fm801_tea575x_gpios[(tea575x_tuner &
|
||||
TUNER_TYPE_MASK) - 1].name,
|
||||
sizeof(chip->tea.card));
|
||||
}
|
||||
#endif
|
||||
|
||||
*rchip = chip;
|
||||
|
|
|
@ -594,6 +594,10 @@ static void alc_line_automute(struct hda_codec *codec)
|
|||
{
|
||||
struct alc_spec *spec = codec->spec;
|
||||
|
||||
/* check LO jack only when it's different from HP */
|
||||
if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0])
|
||||
return;
|
||||
|
||||
spec->line_jack_present =
|
||||
detect_jacks(codec, ARRAY_SIZE(spec->autocfg.line_out_pins),
|
||||
spec->autocfg.line_out_pins);
|
||||
|
@ -1347,7 +1351,9 @@ do_sku:
|
|||
* 15 : 1 --> enable the function "Mute internal speaker
|
||||
* when the external headphone out jack is plugged"
|
||||
*/
|
||||
if (!spec->autocfg.hp_pins[0]) {
|
||||
if (!spec->autocfg.hp_pins[0] &&
|
||||
!(spec->autocfg.line_out_pins[0] &&
|
||||
spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)) {
|
||||
hda_nid_t nid;
|
||||
tmp = (ass >> 11) & 0x3; /* HP to chassis */
|
||||
if (tmp == 0)
|
||||
|
|
|
@ -5630,6 +5630,7 @@ again:
|
|||
switch (codec->vendor_id) {
|
||||
case 0x111d76d1:
|
||||
case 0x111d76d9:
|
||||
case 0x111d76df:
|
||||
case 0x111d76e5:
|
||||
case 0x111d7666:
|
||||
case 0x111d7667:
|
||||
|
|
|
@ -128,7 +128,7 @@ static int snd_ad73311_configure(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int bf5xx_probe(struct platform_device *pdev)
|
||||
static int bf5xx_probe(struct snd_soc_card *card)
|
||||
{
|
||||
int err;
|
||||
if (gpio_request(GPIO_SE, "AD73311_SE")) {
|
||||
|
|
|
@ -3479,31 +3479,6 @@ int wm8962_mic_detect(struct snd_soc_codec *codec, struct snd_soc_jack *jack)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(wm8962_mic_detect);
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
static int wm8962_resume(struct snd_soc_codec *codec)
|
||||
{
|
||||
u16 *reg_cache = codec->reg_cache;
|
||||
int i;
|
||||
|
||||
/* Restore the registers */
|
||||
for (i = 1; i < codec->driver->reg_cache_size; i++) {
|
||||
switch (i) {
|
||||
case WM8962_SOFTWARE_RESET:
|
||||
continue;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (reg_cache[i] != wm8962_reg[i])
|
||||
snd_soc_write(codec, i, reg_cache[i]);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
#define wm8962_resume NULL
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_INPUT) || defined(CONFIG_INPUT_MODULE)
|
||||
static int beep_rates[] = {
|
||||
500, 1000, 2000, 4000,
|
||||
|
@ -4015,7 +3990,6 @@ static int wm8962_remove(struct snd_soc_codec *codec)
|
|||
static struct snd_soc_codec_driver soc_codec_dev_wm8962 = {
|
||||
.probe = wm8962_probe,
|
||||
.remove = wm8962_remove,
|
||||
.resume = wm8962_resume,
|
||||
.set_bias_level = wm8962_set_bias_level,
|
||||
.reg_cache_size = WM8962_MAX_REGISTER + 1,
|
||||
.reg_word_size = sizeof(u16),
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
#include <linux/bitops.h>
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/ctype.h>
|
||||
#include <linux/slab.h>
|
||||
#include <sound/ac97_codec.h>
|
||||
#include <sound/core.h>
|
||||
|
@ -1434,9 +1435,20 @@ static void snd_soc_instantiate_card(struct snd_soc_card *card)
|
|||
"%s", card->name);
|
||||
snprintf(card->snd_card->longname, sizeof(card->snd_card->longname),
|
||||
"%s", card->long_name ? card->long_name : card->name);
|
||||
if (card->driver_name)
|
||||
strlcpy(card->snd_card->driver, card->driver_name,
|
||||
sizeof(card->snd_card->driver));
|
||||
snprintf(card->snd_card->driver, sizeof(card->snd_card->driver),
|
||||
"%s", card->driver_name ? card->driver_name : card->name);
|
||||
for (i = 0; i < ARRAY_SIZE(card->snd_card->driver); i++) {
|
||||
switch (card->snd_card->driver[i]) {
|
||||
case '_':
|
||||
case '-':
|
||||
case '\0':
|
||||
break;
|
||||
default:
|
||||
if (!isalnum(card->snd_card->driver[i]))
|
||||
card->snd_card->driver[i] = '_';
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (card->late_probe) {
|
||||
ret = card->late_probe(card);
|
||||
|
|
|
@ -532,6 +532,7 @@ snd_usb_audio_probe(struct usb_device *dev,
|
|||
__error:
|
||||
if (chip && !chip->num_interfaces)
|
||||
snd_card_free(chip->card);
|
||||
chip->probing = 0;
|
||||
mutex_unlock(®ister_mutex);
|
||||
__err_val:
|
||||
return NULL;
|
||||
|
|
Loading…
Reference in New Issue