diff options
Diffstat (limited to 'sound/oss/maestro.c')
-rw-r--r-- | sound/oss/maestro.c | 149 |
1 files changed, 0 insertions, 149 deletions
diff --git a/sound/oss/maestro.c b/sound/oss/maestro.c index 3abd3541cbc7..f9ac5b16f61a 100644 --- a/sound/oss/maestro.c +++ b/sound/oss/maestro.c | |||
@@ -230,10 +230,6 @@ | |||
230 | #include <asm/page.h> | 230 | #include <asm/page.h> |
231 | #include <asm/uaccess.h> | 231 | #include <asm/uaccess.h> |
232 | 232 | ||
233 | #include <linux/pm.h> | ||
234 | #include <linux/pm_legacy.h> | ||
235 | static int maestro_pm_callback(struct pm_dev *dev, pm_request_t rqst, void *d); | ||
236 | |||
237 | #include "maestro.h" | 233 | #include "maestro.h" |
238 | 234 | ||
239 | static struct pci_driver maestro_pci_driver; | 235 | static struct pci_driver maestro_pci_driver; |
@@ -3404,7 +3400,6 @@ maestro_probe(struct pci_dev *pcidev,const struct pci_device_id *pdid) | |||
3404 | int i, ret; | 3400 | int i, ret; |
3405 | struct ess_card *card; | 3401 | struct ess_card *card; |
3406 | struct ess_state *ess; | 3402 | struct ess_state *ess; |
3407 | struct pm_dev *pmdev; | ||
3408 | int num = 0; | 3403 | int num = 0; |
3409 | 3404 | ||
3410 | /* when built into the kernel, we only print version if device is found */ | 3405 | /* when built into the kernel, we only print version if device is found */ |
@@ -3450,11 +3445,6 @@ maestro_probe(struct pci_dev *pcidev,const struct pci_device_id *pdid) | |||
3450 | memset(card, 0, sizeof(*card)); | 3445 | memset(card, 0, sizeof(*card)); |
3451 | card->pcidev = pcidev; | 3446 | card->pcidev = pcidev; |
3452 | 3447 | ||
3453 | pmdev = pm_register(PM_PCI_DEV, PM_PCI_ID(pcidev), | ||
3454 | maestro_pm_callback); | ||
3455 | if (pmdev) | ||
3456 | pmdev->data = card; | ||
3457 | |||
3458 | card->iobase = iobase; | 3448 | card->iobase = iobase; |
3459 | card->card_type = card_type; | 3449 | card->card_type = card_type; |
3460 | card->irq = pcidev->irq; | 3450 | card->irq = pcidev->irq; |
@@ -3670,7 +3660,6 @@ static int maestro_notifier(struct notifier_block *nb, unsigned long event, void | |||
3670 | static void cleanup_maestro(void) { | 3660 | static void cleanup_maestro(void) { |
3671 | M_printk("maestro: unloading\n"); | 3661 | M_printk("maestro: unloading\n"); |
3672 | pci_unregister_driver(&maestro_pci_driver); | 3662 | pci_unregister_driver(&maestro_pci_driver); |
3673 | pm_unregister_all(maestro_pm_callback); | ||
3674 | unregister_reboot_notifier(&maestro_nb); | 3663 | unregister_reboot_notifier(&maestro_nb); |
3675 | } | 3664 | } |
3676 | 3665 | ||
@@ -3691,143 +3680,5 @@ check_suspend(struct ess_card *card) | |||
3691 | current->state = TASK_RUNNING; | 3680 | current->state = TASK_RUNNING; |
3692 | } | 3681 | } |
3693 | 3682 | ||
3694 | static int | ||
3695 | maestro_suspend(struct ess_card *card) | ||
3696 | { | ||
3697 | unsigned long flags; | ||
3698 | int i,j; | ||
3699 | |||
3700 | spin_lock_irqsave(&card->lock,flags); /* over-kill */ | ||
3701 | |||
3702 | M_printk("maestro: apm in dev %p\n",card); | ||
3703 | |||
3704 | /* we have to read from the apu regs, need | ||
3705 | to power it up */ | ||
3706 | maestro_power(card,ACPI_D0); | ||
3707 | |||
3708 | for(i=0;i<NR_DSPS;i++) { | ||
3709 | struct ess_state *s = &card->channels[i]; | ||
3710 | |||
3711 | if(s->dev_audio == -1) | ||
3712 | continue; | ||
3713 | |||
3714 | M_printk("maestro: stopping apus for device %d\n",i); | ||
3715 | stop_dac(s); | ||
3716 | stop_adc(s); | ||
3717 | for(j=0;j<6;j++) | ||
3718 | card->apu_map[s->apu[j]][5]=apu_get_register(s,j,5); | ||
3719 | |||
3720 | } | ||
3721 | |||
3722 | /* get rid of interrupts? */ | ||
3723 | if( card->dsps_open > 0) | ||
3724 | stop_bob(&card->channels[0]); | ||
3725 | |||
3726 | card->in_suspend++; | ||
3727 | |||
3728 | spin_unlock_irqrestore(&card->lock,flags); | ||
3729 | |||
3730 | /* we trust in the bios to power down the chip on suspend. | ||
3731 | * XXX I'm also not sure that in_suspend will protect | ||
3732 | * against all reg accesses from here on out. | ||
3733 | */ | ||
3734 | return 0; | ||
3735 | } | ||
3736 | static int | ||
3737 | maestro_resume(struct ess_card *card) | ||
3738 | { | ||
3739 | unsigned long flags; | ||
3740 | int i; | ||
3741 | |||
3742 | spin_lock_irqsave(&card->lock,flags); /* over-kill */ | ||
3743 | |||
3744 | card->in_suspend = 0; | ||
3745 | |||
3746 | M_printk("maestro: resuming card at %p\n",card); | ||
3747 | |||
3748 | /* restore all our config */ | ||
3749 | maestro_config(card); | ||
3750 | /* need to restore the base pointers.. */ | ||
3751 | if(card->dmapages) | ||
3752 | set_base_registers(&card->channels[0],card->dmapages); | ||
3753 | |||
3754 | mixer_push_state(card); | ||
3755 | |||
3756 | /* set each channels' apu control registers before | ||
3757 | * restoring audio | ||
3758 | */ | ||
3759 | for(i=0;i<NR_DSPS;i++) { | ||
3760 | struct ess_state *s = &card->channels[i]; | ||
3761 | int chan,reg; | ||
3762 | |||
3763 | if(s->dev_audio == -1) | ||
3764 | continue; | ||
3765 | |||
3766 | for(chan = 0 ; chan < 6 ; chan++) { | ||
3767 | wave_set_register(s,s->apu[chan]<<3,s->apu_base[chan]); | ||
3768 | for(reg = 1 ; reg < NR_APU_REGS ; reg++) | ||
3769 | apu_set_register(s,chan,reg,s->card->apu_map[s->apu[chan]][reg]); | ||
3770 | } | ||
3771 | for(chan = 0 ; chan < 6 ; chan++) | ||
3772 | apu_set_register(s,chan,0,s->card->apu_map[s->apu[chan]][0] & 0xFF0F); | ||
3773 | } | ||
3774 | |||
3775 | /* now we flip on the music */ | ||
3776 | |||
3777 | if( card->dsps_open <= 0) { | ||
3778 | /* this card's idle */ | ||
3779 | maestro_power(card,ACPI_D2); | ||
3780 | } else { | ||
3781 | /* ok, we're actually playing things on | ||
3782 | this card */ | ||
3783 | maestro_power(card,ACPI_D0); | ||
3784 | start_bob(&card->channels[0]); | ||
3785 | for(i=0;i<NR_DSPS;i++) { | ||
3786 | struct ess_state *s = &card->channels[i]; | ||
3787 | |||
3788 | /* these use the apu_mode, and can handle | ||
3789 | spurious calls */ | ||
3790 | start_dac(s); | ||
3791 | start_adc(s); | ||
3792 | } | ||
3793 | } | ||
3794 | |||
3795 | spin_unlock_irqrestore(&card->lock,flags); | ||
3796 | |||
3797 | /* all right, we think things are ready, | ||
3798 | wake up people who were using the device | ||
3799 | when we suspended */ | ||
3800 | wake_up(&(card->suspend_queue)); | ||
3801 | |||
3802 | return 0; | ||
3803 | } | ||
3804 | |||
3805 | int | ||
3806 | maestro_pm_callback(struct pm_dev *dev, pm_request_t rqst, void *data) | ||
3807 | { | ||
3808 | struct ess_card *card = (struct ess_card*) dev->data; | ||
3809 | |||
3810 | if ( ! card ) goto out; | ||
3811 | |||
3812 | M_printk("maestro: pm event 0x%x received for card %p\n", rqst, card); | ||
3813 | |||
3814 | switch (rqst) { | ||
3815 | case PM_SUSPEND: | ||
3816 | maestro_suspend(card); | ||
3817 | break; | ||
3818 | case PM_RESUME: | ||
3819 | maestro_resume(card); | ||
3820 | break; | ||
3821 | /* | ||
3822 | * we'd also like to find out about | ||
3823 | * power level changes because some biosen | ||
3824 | * do mean things to the maestro when they | ||
3825 | * change their power state. | ||
3826 | */ | ||
3827 | } | ||
3828 | out: | ||
3829 | return 0; | ||
3830 | } | ||
3831 | |||
3832 | module_init(init_maestro); | 3683 | module_init(init_maestro); |
3833 | module_exit(cleanup_maestro); | 3684 | module_exit(cleanup_maestro); |