diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-12-08 10:47:46 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-12-08 10:47:46 -0500 |
commit | a421018e8c10e5593a1fee076af72a66c3fe8ca3 (patch) | |
tree | 2854511845d0e07d33726a13eda6de1059a5c9df /sound/pci/oxygen/oxygen_lib.c | |
parent | 3ad1f3b35e8309ec93454dbf89beaafcdb5312da (diff) | |
parent | 86e1d57e4f24ca27ce813bdc2afaac4adafcbaf4 (diff) |
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: (294 commits)
S3C64XX: Staticise platform data for PCM devices
ASoC: Rename controls with a / in wm_hubs
snd-fm801: autodetect SF64-PCR (tuner-only) card
ALSA: tea575x-tuner: fix mute
ASoC: au1x: dbdma2: plug memleak in pcm device creation error path
ASoC: au1x: dbdma2: fix oops on soc device removal.
ALSA: hda - Fix memory leaks in the previous patch
ALSA: hda - Add ALC661/259, ALC892/888VD support
ALSA: opti9xx: remove snd_opti9xx fields
ALSA: aaci - Clean up duplicate code
ALSA: usb - Fix mixer map for Hercules Gamesurround Muse Pocket LT
ALSA: hda - Add position_fix quirk for HP dv3
ALSA: hda - Add a pin-fix for FSC Amilo Pi1505
ALSA: hda - Fix Cxt5047 test mode
ASoC: pxa/raumfeld: adopt new snd_soc_dai_set_pll() API
ASoC: sh: fsi: Add runtime PM support
sh: ms7724se: Add runtime PM support for FSI
ALSA: hda - Add a position_fix quirk for MSI Wind U115
ALSA: opti-miro: add PnP detection
ALSA: opti-miro: separate comon probing code
...
Diffstat (limited to 'sound/pci/oxygen/oxygen_lib.c')
-rw-r--r-- | sound/pci/oxygen/oxygen_lib.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/sound/pci/oxygen/oxygen_lib.c b/sound/pci/oxygen/oxygen_lib.c index 9a8936e2074..9c5e6450eeb 100644 --- a/sound/pci/oxygen/oxygen_lib.c +++ b/sound/pci/oxygen/oxygen_lib.c | |||
@@ -278,7 +278,11 @@ oxygen_search_pci_id(struct oxygen *chip, const struct pci_device_id ids[]) | |||
278 | static void oxygen_restore_eeprom(struct oxygen *chip, | 278 | static void oxygen_restore_eeprom(struct oxygen *chip, |
279 | const struct pci_device_id *id) | 279 | const struct pci_device_id *id) |
280 | { | 280 | { |
281 | if (oxygen_read_eeprom(chip, 0) != OXYGEN_EEPROM_ID) { | 281 | u16 eeprom_id; |
282 | |||
283 | eeprom_id = oxygen_read_eeprom(chip, 0); | ||
284 | if (eeprom_id != OXYGEN_EEPROM_ID && | ||
285 | (eeprom_id != 0xffff || id->subdevice != 0x8788)) { | ||
282 | /* | 286 | /* |
283 | * This function gets called only when a known card model has | 287 | * This function gets called only when a known card model has |
284 | * been detected, i.e., we know there is a valid subsystem | 288 | * been detected, i.e., we know there is a valid subsystem |
@@ -303,6 +307,28 @@ static void oxygen_restore_eeprom(struct oxygen *chip, | |||
303 | } | 307 | } |
304 | } | 308 | } |
305 | 309 | ||
310 | static void pci_bridge_magic(void) | ||
311 | { | ||
312 | struct pci_dev *pci = NULL; | ||
313 | u32 tmp; | ||
314 | |||
315 | for (;;) { | ||
316 | /* If there is any Pericom PI7C9X110 PCI-E/PCI bridge ... */ | ||
317 | pci = pci_get_device(0x12d8, 0xe110, pci); | ||
318 | if (!pci) | ||
319 | break; | ||
320 | /* | ||
321 | * ... configure its secondary internal arbiter to park to | ||
322 | * the secondary port, instead of to the last master. | ||
323 | */ | ||
324 | if (!pci_read_config_dword(pci, 0x40, &tmp)) { | ||
325 | tmp |= 1; | ||
326 | pci_write_config_dword(pci, 0x40, tmp); | ||
327 | } | ||
328 | /* Why? Try asking C-Media. */ | ||
329 | } | ||
330 | } | ||
331 | |||
306 | static void oxygen_init(struct oxygen *chip) | 332 | static void oxygen_init(struct oxygen *chip) |
307 | { | 333 | { |
308 | unsigned int i; | 334 | unsigned int i; |
@@ -581,6 +607,7 @@ int oxygen_pci_probe(struct pci_dev *pci, int index, char *id, | |||
581 | snd_card_set_dev(card, &pci->dev); | 607 | snd_card_set_dev(card, &pci->dev); |
582 | card->private_free = oxygen_card_free; | 608 | card->private_free = oxygen_card_free; |
583 | 609 | ||
610 | pci_bridge_magic(); | ||
584 | oxygen_init(chip); | 611 | oxygen_init(chip); |
585 | chip->model.init(chip); | 612 | chip->model.init(chip); |
586 | 613 | ||