]> pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
Merge branch 'topic/hwdep-cleanup' into for-linus
authorTakashi Iwai <tiwai@suse.de>
Mon, 23 Mar 2009 23:35:41 +0000 (00:35 +0100)
committerTakashi Iwai <tiwai@suse.de>
Mon, 23 Mar 2009 23:35:41 +0000 (00:35 +0100)
include/sound/hwdep.h
sound/core/hwdep.c
sound/drivers/vx/vx_hwdep.c
sound/pci/mixart/mixart_hwdep.c
sound/pci/pcxhr/pcxhr_hwdep.c
sound/pci/rme9652/hdsp.c
sound/pci/rme9652/hdspm.c
sound/synth/emux/emux_hwdep.c
sound/usb/usbmixer.c
sound/usb/usx2y/usX2Yhwdep.c

index d9eea013c753209a4dcb90f9bfc69eb95b697559..8c05e47a409053c69ddec36b60aee44b84907330 100644 (file)
 
 struct snd_hwdep;
 
+/* hwdep file ops; all ops can be NULL */
 struct snd_hwdep_ops {
-       long long (*llseek) (struct snd_hwdep *hw, struct file * file, long long offset, int orig);
-       long (*read) (struct snd_hwdep *hw, char __user *buf, long count, loff_t *offset);
-       long (*write) (struct snd_hwdep *hw, const char __user *buf, long count, loff_t *offset);
-       int (*open) (struct snd_hwdep * hw, struct file * file);
-       int (*release) (struct snd_hwdep *hw, struct file * file);
-       unsigned int (*poll) (struct snd_hwdep *hw, struct file * file, poll_table * wait);
-       int (*ioctl) (struct snd_hwdep *hw, struct file * file, unsigned int cmd, unsigned long arg);
-       int (*ioctl_compat) (struct snd_hwdep *hw, struct file * file, unsigned int cmd, unsigned long arg);
-       int (*mmap) (struct snd_hwdep *hw, struct file * file, struct vm_area_struct * vma);
-       int (*dsp_status) (struct snd_hwdep *hw, struct snd_hwdep_dsp_status *status);
-       int (*dsp_load) (struct snd_hwdep *hw, struct snd_hwdep_dsp_image *image);
+       long long (*llseek)(struct snd_hwdep *hw, struct file *file,
+                           long long offset, int orig);
+       long (*read)(struct snd_hwdep *hw, char __user *buf,
+                    long count, loff_t *offset);
+       long (*write)(struct snd_hwdep *hw, const char __user *buf,
+                     long count, loff_t *offset);
+       int (*open)(struct snd_hwdep *hw, struct file * file);
+       int (*release)(struct snd_hwdep *hw, struct file * file);
+       unsigned int (*poll)(struct snd_hwdep *hw, struct file *file,
+                            poll_table *wait);
+       int (*ioctl)(struct snd_hwdep *hw, struct file *file,
+                    unsigned int cmd, unsigned long arg);
+       int (*ioctl_compat)(struct snd_hwdep *hw, struct file *file,
+                           unsigned int cmd, unsigned long arg);
+       int (*mmap)(struct snd_hwdep *hw, struct file *file,
+                   struct vm_area_struct *vma);
+       int (*dsp_status)(struct snd_hwdep *hw,
+                         struct snd_hwdep_dsp_status *status);
+       int (*dsp_load)(struct snd_hwdep *hw,
+                       struct snd_hwdep_dsp_image *image);
 };
 
 struct snd_hwdep {
@@ -61,9 +71,9 @@ struct snd_hwdep {
        void (*private_free) (struct snd_hwdep *hwdep);
 
        struct mutex open_mutex;
-       int used;
-       unsigned int dsp_loaded;
-       unsigned int exclusive: 1;
+       int used;                       /* reference counter */
+       unsigned int dsp_loaded;        /* bit fields of loaded dsp indices */
+       unsigned int exclusive:1;       /* exclusive access mode */
 };
 
 extern int snd_hwdep_new(struct snd_card *card, char *id, int device,
index 195cafc5a55342df53e01a4ecb361a37db178dbd..a70ee7f1ed9832ed3ef3b4463376786dd2500234 100644 (file)
@@ -99,9 +99,6 @@ static int snd_hwdep_open(struct inode *inode, struct file * file)
        if (hw == NULL)
                return -ENODEV;
 
-       if (!hw->ops.open)
-               return -ENXIO;
-
        if (!try_module_get(hw->card->module))
                return -EFAULT;
 
@@ -113,6 +110,10 @@ static int snd_hwdep_open(struct inode *inode, struct file * file)
                        err = -EBUSY;
                        break;
                }
+               if (!hw->ops.open) {
+                       err = 0;
+                       break;
+               }
                err = hw->ops.open(hw, file);
                if (err >= 0)
                        break;
@@ -151,7 +152,7 @@ static int snd_hwdep_open(struct inode *inode, struct file * file)
 
 static int snd_hwdep_release(struct inode *inode, struct file * file)
 {
-       int err = -ENXIO;
+       int err = 0;
        struct snd_hwdep *hw = file->private_data;
        struct module *mod = hw->card->module;
 
index 8d6362e2d4c9ec54f5a0784e6f49baa424990f90..46df8817c18f7b79faa466eb01fbb12af3149921 100644 (file)
@@ -119,16 +119,6 @@ void snd_vx_free_firmware(struct vx_core *chip)
 
 #else /* old style firmware loading */
 
-static int vx_hwdep_open(struct snd_hwdep *hw, struct file *file)
-{
-       return 0;
-}
-
-static int vx_hwdep_release(struct snd_hwdep *hw, struct file *file)
-{
-       return 0;
-}
-
 static int vx_hwdep_dsp_status(struct snd_hwdep *hw,
                               struct snd_hwdep_dsp_status *info)
 {
@@ -243,8 +233,6 @@ int snd_vx_setup_firmware(struct vx_core *chip)
 
        hw->iface = SNDRV_HWDEP_IFACE_VX;
        hw->private_data = chip;
-       hw->ops.open = vx_hwdep_open;
-       hw->ops.release = vx_hwdep_release;
        hw->ops.dsp_status = vx_hwdep_dsp_status;
        hw->ops.dsp_load = vx_hwdep_dsp_load;
        hw->exclusive = 1;
index 3782b52bc0e8cb714466f0466991050e52c29b15..fa4de985fc4c51279745b843ae247f439fe0bcdd 100644 (file)
@@ -581,16 +581,6 @@ MODULE_FIRMWARE("mixart/miXart8AES.xlx");
 /* miXart hwdep interface id string */
 #define SND_MIXART_HWDEP_ID       "miXart Loader"
 
-static int mixart_hwdep_open(struct snd_hwdep *hw, struct file *file)
-{
-       return 0;
-}
-
-static int mixart_hwdep_release(struct snd_hwdep *hw, struct file *file)
-{
-       return 0;
-}
-
 static int mixart_hwdep_dsp_status(struct snd_hwdep *hw,
                                   struct snd_hwdep_dsp_status *info)
 {
@@ -643,8 +633,6 @@ int snd_mixart_setup_firmware(struct mixart_mgr *mgr)
 
        hw->iface = SNDRV_HWDEP_IFACE_MIXART;
        hw->private_data = mgr;
-       hw->ops.open = mixart_hwdep_open;
-       hw->ops.release = mixart_hwdep_release;
        hw->ops.dsp_status = mixart_hwdep_dsp_status;
        hw->ops.dsp_load = mixart_hwdep_dsp_load;
        hw->exclusive = 1;
index 592743a298b09c29e295bb59731998165122aad5..17cb1233a903470b9f1e7ab63a4373be37ec97b5 100644 (file)
@@ -471,16 +471,6 @@ static int pcxhr_hwdep_dsp_load(struct snd_hwdep *hw,
        return 0;
 }
 
-static int pcxhr_hwdep_open(struct snd_hwdep *hw, struct file *file)
-{
-       return 0;
-}
-
-static int pcxhr_hwdep_release(struct snd_hwdep *hw, struct file *file)
-{
-       return 0;
-}
-
 int pcxhr_setup_firmware(struct pcxhr_mgr *mgr)
 {
        int err;
@@ -495,8 +485,6 @@ int pcxhr_setup_firmware(struct pcxhr_mgr *mgr)
 
        hw->iface = SNDRV_HWDEP_IFACE_PCXHR;
        hw->private_data = mgr;
-       hw->ops.open = pcxhr_hwdep_open;
-       hw->ops.release = pcxhr_hwdep_release;
        hw->ops.dsp_status = pcxhr_hwdep_dsp_status;
        hw->ops.dsp_load = pcxhr_hwdep_dsp_load;
        hw->exclusive = 1;
index 05b3f795a1680167a3d09c3666fc3ea7c8272d82..bacfdd12619b2ced4cc0f5ead3596772d1b43a90 100644 (file)
@@ -4413,13 +4413,6 @@ static int snd_hdsp_capture_release(struct snd_pcm_substream *substream)
        return 0;
 }
 
-static int snd_hdsp_hwdep_dummy_op(struct snd_hwdep *hw, struct file *file)
-{
-       /* we have nothing to initialize but the call is required */
-       return 0;
-}
-
-
 /* helper functions for copying meter values */
 static inline int copy_u32_le(void __user *dest, void __iomem *src)
 {
@@ -4738,9 +4731,7 @@ static int snd_hdsp_create_hwdep(struct snd_card *card, struct hdsp *hdsp)
        hw->private_data = hdsp;
        strcpy(hw->name, "HDSP hwdep interface");
 
-       hw->ops.open = snd_hdsp_hwdep_dummy_op;
        hw->ops.ioctl = snd_hdsp_hwdep_ioctl;
-       hw->ops.release = snd_hdsp_hwdep_dummy_op;
                
        return 0;
 }
index d4b4e0d0fee81872ba871972331339dc66cdf13a..bac2dc0c5d85698bd7bb6796525b6f622d2fbe3d 100644 (file)
@@ -4100,13 +4100,6 @@ static int snd_hdspm_capture_release(struct snd_pcm_substream *substream)
        return 0;
 }
 
-static int snd_hdspm_hwdep_dummy_op(struct snd_hwdep * hw, struct file *file)
-{
-       /* we have nothing to initialize but the call is required */
-       return 0;
-}
-
-
 static int snd_hdspm_hwdep_ioctl(struct snd_hwdep * hw, struct file *file,
                                 unsigned int cmd, unsigned long arg)
 {
@@ -4213,9 +4206,7 @@ static int __devinit snd_hdspm_create_hwdep(struct snd_card *card,
        hw->private_data = hdspm;
        strcpy(hw->name, "HDSPM hwdep interface");
 
-       hw->ops.open = snd_hdspm_hwdep_dummy_op;
        hw->ops.ioctl = snd_hdspm_hwdep_ioctl;
-       hw->ops.release = snd_hdspm_hwdep_dummy_op;
 
        return 0;
 }
index 0a5391436addfd3f0b67c5f91aa487f1af349bd7..ff0b2a8fd25bbe20dd51191935582746f8ba6edf 100644 (file)
 #include <asm/uaccess.h>
 #include "emux_voice.h"
 
-/*
- * open the hwdep device
- */
-static int
-snd_emux_hwdep_open(struct snd_hwdep *hw, struct file *file)
-{
-       return 0;
-}
-
-
-/*
- * close the device
- */
-static int
-snd_emux_hwdep_release(struct snd_hwdep *hw, struct file *file)
-{
-       return 0;
-}
-
 
 #define TMP_CLIENT_ID  0x1001
 
@@ -146,8 +127,6 @@ snd_emux_init_hwdep(struct snd_emux *emu)
        emu->hwdep = hw;
        strcpy(hw->name, SNDRV_EMUX_HWDEP_NAME);
        hw->iface = SNDRV_HWDEP_IFACE_EMUX_WAVETABLE;
-       hw->ops.open = snd_emux_hwdep_open;
-       hw->ops.release = snd_emux_hwdep_release;
        hw->ops.ioctl = snd_emux_hwdep_ioctl;
        hw->exclusive = 1;
        hw->private_data = emu;
index 00397c8a765ba62b6f004e5a36d818aa8f25f923..2bde79216fa560e674565bc450cd7720f7b34286 100644 (file)
@@ -78,7 +78,6 @@ struct usb_mixer_interface {
 
        /* Sound Blaster remote control stuff */
        const struct rc_config *rc_cfg;
-       unsigned long rc_hwdep_open;
        u32 rc_code;
        wait_queue_head_t rc_waitq;
        struct urb *rc_urb;
@@ -1797,24 +1796,6 @@ static void snd_usb_soundblaster_remote_complete(struct urb *urb)
        wake_up(&mixer->rc_waitq);
 }
 
-static int snd_usb_sbrc_hwdep_open(struct snd_hwdep *hw, struct file *file)
-{
-       struct usb_mixer_interface *mixer = hw->private_data;
-
-       if (test_and_set_bit(0, &mixer->rc_hwdep_open))
-               return -EBUSY;
-       return 0;
-}
-
-static int snd_usb_sbrc_hwdep_release(struct snd_hwdep *hw, struct file *file)
-{
-       struct usb_mixer_interface *mixer = hw->private_data;
-
-       clear_bit(0, &mixer->rc_hwdep_open);
-       smp_mb__after_clear_bit();
-       return 0;
-}
-
 static long snd_usb_sbrc_hwdep_read(struct snd_hwdep *hw, char __user *buf,
                                     long count, loff_t *offset)
 {
@@ -1867,9 +1848,8 @@ static int snd_usb_soundblaster_remote_init(struct usb_mixer_interface *mixer)
        hwdep->iface = SNDRV_HWDEP_IFACE_SB_RC;
        hwdep->private_data = mixer;
        hwdep->ops.read = snd_usb_sbrc_hwdep_read;
-       hwdep->ops.open = snd_usb_sbrc_hwdep_open;
-       hwdep->ops.release = snd_usb_sbrc_hwdep_release;
        hwdep->ops.poll = snd_usb_sbrc_hwdep_poll;
+       hwdep->exclusive = 1;
 
        mixer->rc_urb = usb_alloc_urb(0, GFP_KERNEL);
        if (!mixer->rc_urb)
index 1558a5c4094faebb589c9822a37182c837867c39..a26d8d83d3eb85893564463681bc06247dcbe364 100644 (file)
@@ -106,16 +106,6 @@ static unsigned int snd_us428ctls_poll(struct snd_hwdep *hw, struct file *file,
 }
 
 
-static int snd_usX2Y_hwdep_open(struct snd_hwdep *hw, struct file *file)
-{
-       return 0;
-}
-
-static int snd_usX2Y_hwdep_release(struct snd_hwdep *hw, struct file *file)
-{
-       return 0;
-}
-
 static int snd_usX2Y_hwdep_dsp_status(struct snd_hwdep *hw,
                                      struct snd_hwdep_dsp_status *info)
 {
@@ -267,8 +257,6 @@ int usX2Y_hwdep_new(struct snd_card *card, struct usb_device* device)
 
        hw->iface = SNDRV_HWDEP_IFACE_USX2Y;
        hw->private_data = usX2Y(card);
-       hw->ops.open = snd_usX2Y_hwdep_open;
-       hw->ops.release = snd_usX2Y_hwdep_release;
        hw->ops.dsp_status = snd_usX2Y_hwdep_dsp_status;
        hw->ops.dsp_load = snd_usX2Y_hwdep_dsp_load;
        hw->ops.mmap = snd_us428ctls_mmap;