|
@@ -432,46 +432,6 @@ MODULE_PARM_DESC(joystick, "Enable joystick.");
|
|
|
#define ESM_MODE_PLAY 0
|
|
|
#define ESM_MODE_CAPTURE 1
|
|
|
|
|
|
-/* acpi states */
|
|
|
-enum {
|
|
|
- ACPI_D0=0,
|
|
|
- ACPI_D1,
|
|
|
- ACPI_D2,
|
|
|
- ACPI_D3
|
|
|
-};
|
|
|
-
|
|
|
-/* bits in the acpi masks */
|
|
|
-#define ACPI_12MHZ ( 1 << 15)
|
|
|
-#define ACPI_24MHZ ( 1 << 14)
|
|
|
-#define ACPI_978 ( 1 << 13)
|
|
|
-#define ACPI_SPDIF ( 1 << 12)
|
|
|
-#define ACPI_GLUE ( 1 << 11)
|
|
|
-#define ACPI__10 ( 1 << 10) /* reserved */
|
|
|
-#define ACPI_PCIINT ( 1 << 9)
|
|
|
-#define ACPI_HV ( 1 << 8) /* hardware volume */
|
|
|
-#define ACPI_GPIO ( 1 << 7)
|
|
|
-#define ACPI_ASSP ( 1 << 6)
|
|
|
-#define ACPI_SB ( 1 << 5) /* sb emul */
|
|
|
-#define ACPI_FM ( 1 << 4) /* fm emul */
|
|
|
-#define ACPI_RB ( 1 << 3) /* ringbus / aclink */
|
|
|
-#define ACPI_MIDI ( 1 << 2)
|
|
|
-#define ACPI_GP ( 1 << 1) /* game port */
|
|
|
-#define ACPI_WP ( 1 << 0) /* wave processor */
|
|
|
-
|
|
|
-#define ACPI_ALL (0xffff)
|
|
|
-#define ACPI_SLEEP (~(ACPI_SPDIF|ACPI_ASSP|ACPI_SB|ACPI_FM| \
|
|
|
- ACPI_MIDI|ACPI_GP|ACPI_WP))
|
|
|
-#define ACPI_NONE (ACPI__10)
|
|
|
-
|
|
|
-/* these masks indicate which units we care about at
|
|
|
- which states */
|
|
|
-static u16 acpi_state_mask[] = {
|
|
|
- [ACPI_D0] = ACPI_ALL,
|
|
|
- [ACPI_D1] = ACPI_SLEEP,
|
|
|
- [ACPI_D2] = ACPI_SLEEP,
|
|
|
- [ACPI_D3] = ACPI_NONE
|
|
|
-};
|
|
|
-
|
|
|
|
|
|
/* APU use in the driver */
|
|
|
enum snd_enum_apu_type {
|
|
@@ -2159,21 +2119,6 @@ static void snd_es1968_reset(struct es1968 *chip)
|
|
|
udelay(10);
|
|
|
}
|
|
|
|
|
|
-/*
|
|
|
- * power management
|
|
|
- */
|
|
|
-static void snd_es1968_set_acpi(struct es1968 *chip, int state)
|
|
|
-{
|
|
|
- u16 active_mask = acpi_state_mask[state];
|
|
|
-
|
|
|
- pci_set_power_state(chip->pci, state);
|
|
|
- /* make sure the units we care about are on
|
|
|
- XXX we might want to do this before state flipping? */
|
|
|
- pci_write_config_word(chip->pci, 0x54, ~ active_mask);
|
|
|
- pci_write_config_word(chip->pci, 0x56, ~ active_mask);
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
/*
|
|
|
* initialize maestro chip
|
|
|
*/
|
|
@@ -2196,9 +2141,6 @@ static void snd_es1968_chip_init(struct es1968 *chip)
|
|
|
* IRQs.
|
|
|
*/
|
|
|
|
|
|
- /* do config work at full power */
|
|
|
- snd_es1968_set_acpi(chip, ACPI_D0);
|
|
|
-
|
|
|
/* Config Reg A */
|
|
|
pci_read_config_word(pci, ESM_CONFIG_A, &w);
|
|
|
|
|
@@ -2397,9 +2339,10 @@ static int es1968_suspend(struct pci_dev *pci, pm_message_t state)
|
|
|
snd_pcm_suspend_all(chip->pcm);
|
|
|
snd_ac97_suspend(chip->ac97);
|
|
|
snd_es1968_bob_stop(chip);
|
|
|
- snd_es1968_set_acpi(chip, ACPI_D3);
|
|
|
+
|
|
|
pci_disable_device(pci);
|
|
|
pci_save_state(pci);
|
|
|
+ pci_set_power_state(pci, pci_choose_state(pci, state));
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -2413,9 +2356,16 @@ static int es1968_resume(struct pci_dev *pci)
|
|
|
return 0;
|
|
|
|
|
|
/* restore all our config */
|
|
|
+ pci_set_power_state(pci, PCI_D0);
|
|
|
pci_restore_state(pci);
|
|
|
- pci_enable_device(pci);
|
|
|
+ if (pci_enable_device(pci) < 0) {
|
|
|
+ printk(KERN_ERR "es1968: pci_enable_device failed, "
|
|
|
+ "disabling device\n");
|
|
|
+ snd_card_disconnect(card);
|
|
|
+ return -EIO;
|
|
|
+ }
|
|
|
pci_set_master(pci);
|
|
|
+
|
|
|
snd_es1968_chip_init(chip);
|
|
|
|
|
|
/* need to restore the base pointers.. */
|
|
@@ -2514,7 +2464,6 @@ static int snd_es1968_free(struct es1968 *chip)
|
|
|
if (chip->irq >= 0)
|
|
|
free_irq(chip->irq, (void *)chip);
|
|
|
snd_es1968_free_gameport(chip);
|
|
|
- snd_es1968_set_acpi(chip, ACPI_D3);
|
|
|
chip->master_switch = NULL;
|
|
|
chip->master_volume = NULL;
|
|
|
pci_release_regions(chip->pci);
|