diff options
Diffstat (limited to 'drivers/media/video/saa7134/saa7134-oss.c')
| -rw-r--r-- | drivers/media/video/saa7134/saa7134-oss.c | 93 |
1 files changed, 47 insertions, 46 deletions
diff --git a/drivers/media/video/saa7134/saa7134-oss.c b/drivers/media/video/saa7134/saa7134-oss.c index 5a579194e45..513a699a6df 100644 --- a/drivers/media/video/saa7134/saa7134-oss.c +++ b/drivers/media/video/saa7134/saa7134-oss.c | |||
| @@ -782,36 +782,36 @@ struct file_operations saa7134_mixer_fops = { | |||
| 782 | 782 | ||
| 783 | static irqreturn_t saa7134_oss_irq(int irq, void *dev_id, struct pt_regs *regs) | 783 | static irqreturn_t saa7134_oss_irq(int irq, void *dev_id, struct pt_regs *regs) |
| 784 | { | 784 | { |
| 785 | struct saa7134_dmasound *dmasound = dev_id; | 785 | struct saa7134_dmasound *dmasound = dev_id; |
| 786 | struct saa7134_dev *dev = dmasound->priv_data; | 786 | struct saa7134_dev *dev = dmasound->priv_data; |
| 787 | unsigned long report, status; | 787 | unsigned long report, status; |
| 788 | int loop, handled = 0; | 788 | int loop, handled = 0; |
| 789 | 789 | ||
| 790 | for (loop = 0; loop < 10; loop++) { | 790 | for (loop = 0; loop < 10; loop++) { |
| 791 | report = saa_readl(SAA7134_IRQ_REPORT); | 791 | report = saa_readl(SAA7134_IRQ_REPORT); |
| 792 | status = saa_readl(SAA7134_IRQ_STATUS); | 792 | status = saa_readl(SAA7134_IRQ_STATUS); |
| 793 | 793 | ||
| 794 | if (report & SAA7134_IRQ_REPORT_DONE_RA3) { | 794 | if (report & SAA7134_IRQ_REPORT_DONE_RA3) { |
| 795 | handled = 1; | 795 | handled = 1; |
| 796 | saa_writel(SAA7134_IRQ_REPORT,report); | 796 | saa_writel(SAA7134_IRQ_REPORT,report); |
| 797 | saa7134_irq_oss_done(dev, status); | 797 | saa7134_irq_oss_done(dev, status); |
| 798 | } else { | 798 | } else { |
| 799 | goto out; | 799 | goto out; |
| 800 | } | 800 | } |
| 801 | } | 801 | } |
| 802 | 802 | ||
| 803 | if (loop == 10) { | 803 | if (loop == 10) { |
| 804 | dprintk("error! looping IRQ!"); | 804 | dprintk("error! looping IRQ!"); |
| 805 | } | 805 | } |
| 806 | out: | 806 | out: |
| 807 | return IRQ_RETVAL(handled); | 807 | return IRQ_RETVAL(handled); |
| 808 | } | 808 | } |
| 809 | 809 | ||
| 810 | int saa7134_oss_init1(struct saa7134_dev *dev) | 810 | int saa7134_oss_init1(struct saa7134_dev *dev) |
| 811 | { | 811 | { |
| 812 | 812 | ||
| 813 | if ((request_irq(dev->pci->irq, saa7134_oss_irq, | 813 | if ((request_irq(dev->pci->irq, saa7134_oss_irq, |
| 814 | SA_SHIRQ | SA_INTERRUPT, dev->name, | 814 | SA_SHIRQ | SA_INTERRUPT, dev->name, |
| 815 | (void*) &dev->dmasound)) < 0) | 815 | (void*) &dev->dmasound)) < 0) |
| 816 | return -1; | 816 | return -1; |
| 817 | 817 | ||
| @@ -905,25 +905,25 @@ static int saa7134_dsp_create(struct saa7134_dev *dev) | |||
| 905 | 905 | ||
| 906 | err = dev->dmasound.minor_dsp = | 906 | err = dev->dmasound.minor_dsp = |
| 907 | register_sound_dsp(&saa7134_dsp_fops, | 907 | register_sound_dsp(&saa7134_dsp_fops, |
| 908 | dsp_nr[dev->nr]); | 908 | dsp_nr[dev->nr]); |
| 909 | if (err < 0) { | 909 | if (err < 0) { |
| 910 | goto fail; | 910 | goto fail; |
| 911 | } | 911 | } |
| 912 | printk(KERN_INFO "%s: registered device dsp%d\n", | 912 | printk(KERN_INFO "%s: registered device dsp%d\n", |
| 913 | dev->name,dev->dmasound.minor_dsp >> 4); | 913 | dev->name,dev->dmasound.minor_dsp >> 4); |
| 914 | 914 | ||
| 915 | err = dev->dmasound.minor_mixer = | 915 | err = dev->dmasound.minor_mixer = |
| 916 | register_sound_mixer(&saa7134_mixer_fops, | 916 | register_sound_mixer(&saa7134_mixer_fops, |
| 917 | mixer_nr[dev->nr]); | 917 | mixer_nr[dev->nr]); |
| 918 | if (err < 0) | 918 | if (err < 0) |
| 919 | goto fail; | 919 | goto fail; |
| 920 | printk(KERN_INFO "%s: registered device mixer%d\n", | 920 | printk(KERN_INFO "%s: registered device mixer%d\n", |
| 921 | dev->name,dev->dmasound.minor_mixer >> 4); | 921 | dev->name,dev->dmasound.minor_mixer >> 4); |
| 922 | 922 | ||
| 923 | return 0; | 923 | return 0; |
| 924 | 924 | ||
| 925 | fail: | 925 | fail: |
| 926 | unregister_sound_dsp(dev->dmasound.minor_dsp); | 926 | unregister_sound_dsp(dev->dmasound.minor_dsp); |
| 927 | return 0; | 927 | return 0; |
| 928 | 928 | ||
| 929 | 929 | ||
| @@ -956,49 +956,50 @@ static int oss_device_exit(struct saa7134_dev *dev) | |||
| 956 | 956 | ||
| 957 | static int saa7134_oss_init(void) | 957 | static int saa7134_oss_init(void) |
| 958 | { | 958 | { |
| 959 | struct saa7134_dev *dev = NULL; | 959 | struct saa7134_dev *dev = NULL; |
| 960 | struct list_head *list; | 960 | struct list_head *list; |
| 961 | 961 | ||
| 962 | printk(KERN_INFO "saa7134 OSS driver for DMA sound loaded\n"); | 962 | printk(KERN_INFO "saa7134 OSS driver for DMA sound loaded\n"); |
| 963 | 963 | ||
| 964 | list_for_each(list,&saa7134_devlist) { | 964 | list_for_each(list,&saa7134_devlist) { |
| 965 | dev = list_entry(list, struct saa7134_dev, devlist); | 965 | dev = list_entry(list, struct saa7134_dev, devlist); |
| 966 | if (dev->dmasound.priv_data == NULL) { | 966 | if (dev->dmasound.priv_data == NULL) { |
| 967 | oss_device_init(dev); | 967 | oss_device_init(dev); |
| 968 | } else { | 968 | } else { |
| 969 | printk(KERN_ERR "saa7134 OSS: DMA sound is being handled by ALSA, ignoring %s\n",dev->name); | 969 | printk(KERN_ERR "saa7134 OSS: DMA sound is being handled by ALSA, ignoring %s\n",dev->name); |
| 970 | return -EBUSY; | 970 | return -EBUSY; |
| 971 | } | 971 | } |
| 972 | } | 972 | } |
| 973 | 973 | ||
| 974 | if (dev == NULL) | 974 | if (dev == NULL) |
| 975 | printk(KERN_INFO "saa7134 OSS: no saa7134 cards found\n"); | 975 | printk(KERN_INFO "saa7134 OSS: no saa7134 cards found\n"); |
| 976 | 976 | ||
| 977 | dmasound_init = oss_device_init; | 977 | dmasound_init = oss_device_init; |
| 978 | dmasound_exit = oss_device_exit; | 978 | dmasound_exit = oss_device_exit; |
| 979 | 979 | ||
| 980 | return 0; | 980 | return 0; |
| 981 | 981 | ||
| 982 | } | 982 | } |
| 983 | 983 | ||
| 984 | static void saa7134_oss_exit(void) | 984 | static void saa7134_oss_exit(void) |
| 985 | { | 985 | { |
| 986 | struct saa7134_dev *dev = NULL; | 986 | struct saa7134_dev *dev = NULL; |
| 987 | struct list_head *list; | 987 | struct list_head *list; |
| 988 | 988 | ||
| 989 | list_for_each(list,&saa7134_devlist) { | 989 | list_for_each(list,&saa7134_devlist) { |
| 990 | dev = list_entry(list, struct saa7134_dev, devlist); | 990 | dev = list_entry(list, struct saa7134_dev, devlist); |
| 991 | 991 | ||
| 992 | /* Device isn't registered by OSS, probably ALSA's */ | 992 | /* Device isn't registered by OSS, probably ALSA's */ |
| 993 | if (!dev->dmasound.minor_dsp) | 993 | if (!dev->dmasound.minor_dsp) |
| 994 | continue; | 994 | continue; |
| 995 | 995 | ||
| 996 | oss_device_exit(dev); | 996 | oss_device_exit(dev); |
| 997 | } | ||
| 998 | 997 | ||
| 999 | printk(KERN_INFO "saa7134 OSS driver for DMA sound unloaded\n"); | 998 | } |
| 999 | |||
| 1000 | printk(KERN_INFO "saa7134 OSS driver for DMA sound unloaded\n"); | ||
| 1000 | 1001 | ||
| 1001 | return; | 1002 | return; |
| 1002 | } | 1003 | } |
| 1003 | 1004 | ||
| 1004 | module_init(saa7134_oss_init); | 1005 | module_init(saa7134_oss_init); |
