Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / sound / drivers / opl3 / opl3_lib.c
index c313e52..4f85569 100644 (file)
@@ -37,7 +37,7 @@ MODULE_LICENSE("GPL");
 
 extern char snd_opl3_regmap[MAX_OPL2_VOICES][4];
 
-static void snd_opl2_command(opl3_t * opl3, unsigned short cmd, unsigned char val)
+static void snd_opl2_command(struct snd_opl3 * opl3, unsigned short cmd, unsigned char val)
 {
        unsigned long flags;
        unsigned long port;
@@ -60,7 +60,7 @@ static void snd_opl2_command(opl3_t * opl3, unsigned short cmd, unsigned char va
        spin_unlock_irqrestore(&opl3->reg_lock, flags);
 }
 
-static void snd_opl3_command(opl3_t * opl3, unsigned short cmd, unsigned char val)
+static void snd_opl3_command(struct snd_opl3 * opl3, unsigned short cmd, unsigned char val)
 {
        unsigned long flags;
        unsigned long port;
@@ -85,7 +85,7 @@ static void snd_opl3_command(opl3_t * opl3, unsigned short cmd, unsigned char va
        spin_unlock_irqrestore(&opl3->reg_lock, flags);
 }
 
-static int snd_opl3_detect(opl3_t * opl3)
+static int snd_opl3_detect(struct snd_opl3 * opl3)
 {
        /*
         * This function returns 1 if the FM chip is present at the given I/O port
@@ -153,12 +153,12 @@ static int snd_opl3_detect(opl3_t * opl3)
  *  Timer 1 - 80us
  */
 
-static int snd_opl3_timer1_start(snd_timer_t * timer)
+static int snd_opl3_timer1_start(struct snd_timer * timer)
 {
        unsigned long flags;
        unsigned char tmp;
        unsigned int ticks;
-       opl3_t *opl3;
+       struct snd_opl3 *opl3;
 
        opl3 = snd_timer_chip(timer);
        spin_lock_irqsave(&opl3->timer_lock, flags);
@@ -171,11 +171,11 @@ static int snd_opl3_timer1_start(snd_timer_t * timer)
        return 0;
 }
 
-static int snd_opl3_timer1_stop(snd_timer_t * timer)
+static int snd_opl3_timer1_stop(struct snd_timer * timer)
 {
        unsigned long flags;
        unsigned char tmp;
-       opl3_t *opl3;
+       struct snd_opl3 *opl3;
 
        opl3 = snd_timer_chip(timer);
        spin_lock_irqsave(&opl3->timer_lock, flags);
@@ -190,12 +190,12 @@ static int snd_opl3_timer1_stop(snd_timer_t * timer)
  *  Timer 2 - 320us
  */
 
-static int snd_opl3_timer2_start(snd_timer_t * timer)
+static int snd_opl3_timer2_start(struct snd_timer * timer)
 {
        unsigned long flags;
        unsigned char tmp;
        unsigned int ticks;
-       opl3_t *opl3;
+       struct snd_opl3 *opl3;
 
        opl3 = snd_timer_chip(timer);
        spin_lock_irqsave(&opl3->timer_lock, flags);
@@ -208,11 +208,11 @@ static int snd_opl3_timer2_start(snd_timer_t * timer)
        return 0;
 }
 
-static int snd_opl3_timer2_stop(snd_timer_t * timer)
+static int snd_opl3_timer2_stop(struct snd_timer * timer)
 {
        unsigned long flags;
        unsigned char tmp;
-       opl3_t *opl3;
+       struct snd_opl3 *opl3;
 
        opl3 = snd_timer_chip(timer);
        spin_lock_irqsave(&opl3->timer_lock, flags);
@@ -227,7 +227,7 @@ static int snd_opl3_timer2_stop(snd_timer_t * timer)
 
  */
 
-static struct _snd_timer_hardware snd_opl3_timer1 =
+static struct snd_timer_hardware snd_opl3_timer1 =
 {
        .flags =        SNDRV_TIMER_HW_STOP,
        .resolution =   80000,
@@ -236,7 +236,7 @@ static struct _snd_timer_hardware snd_opl3_timer1 =
        .stop =         snd_opl3_timer1_stop,
 };
 
-static struct _snd_timer_hardware snd_opl3_timer2 =
+static struct snd_timer_hardware snd_opl3_timer2 =
 {
        .flags =        SNDRV_TIMER_HW_STOP,
        .resolution =   320000,
@@ -245,10 +245,10 @@ static struct _snd_timer_hardware snd_opl3_timer2 =
        .stop =         snd_opl3_timer2_stop,
 };
 
-static int snd_opl3_timer1_init(opl3_t * opl3, int timer_no)
+static int snd_opl3_timer1_init(struct snd_opl3 * opl3, int timer_no)
 {
-       snd_timer_t *timer = NULL;
-       snd_timer_id_t tid;
+       struct snd_timer *timer = NULL;
+       struct snd_timer_id tid;
        int err;
 
        tid.dev_class = SNDRV_TIMER_CLASS_CARD;
@@ -265,10 +265,10 @@ static int snd_opl3_timer1_init(opl3_t * opl3, int timer_no)
        return err;
 }
 
-static int snd_opl3_timer2_init(opl3_t * opl3, int timer_no)
+static int snd_opl3_timer2_init(struct snd_opl3 * opl3, int timer_no)
 {
-       snd_timer_t *timer = NULL;
-       snd_timer_id_t tid;
+       struct snd_timer *timer = NULL;
+       struct snd_timer_id tid;
        int err;
 
        tid.dev_class = SNDRV_TIMER_CLASS_CARD;
@@ -289,11 +289,11 @@ static int snd_opl3_timer2_init(opl3_t * opl3, int timer_no)
 
  */
 
-void snd_opl3_interrupt(snd_hwdep_t * hw)
+void snd_opl3_interrupt(struct snd_hwdep * hw)
 {
        unsigned char status;
-       opl3_t *opl3;
-       snd_timer_t *timer;
+       struct snd_opl3 *opl3;
+       struct snd_timer *timer;
 
        if (hw == NULL)
                return;
@@ -320,49 +320,45 @@ void snd_opl3_interrupt(snd_hwdep_t * hw)
 
  */
 
-static int snd_opl3_free(opl3_t *opl3)
+static int snd_opl3_free(struct snd_opl3 *opl3)
 {
        snd_assert(opl3 != NULL, return -ENXIO);
        if (opl3->private_free)
                opl3->private_free(opl3);
-       if (opl3->res_l_port) {
-               release_resource(opl3->res_l_port);
-               kfree_nocheck(opl3->res_l_port);
-       }
-       if (opl3->res_r_port) {
-               release_resource(opl3->res_r_port);
-               kfree_nocheck(opl3->res_r_port);
-       }
+       release_and_free_resource(opl3->res_l_port);
+       release_and_free_resource(opl3->res_r_port);
        kfree(opl3);
        return 0;
 }
 
-static int snd_opl3_dev_free(snd_device_t *device)
+static int snd_opl3_dev_free(struct snd_device *device)
 {
-       opl3_t *opl3 = device->device_data;
+       struct snd_opl3 *opl3 = device->device_data;
        return snd_opl3_free(opl3);
 }
 
-int snd_opl3_new(snd_card_t *card,
+int snd_opl3_new(struct snd_card *card,
                 unsigned short hardware,
-                opl3_t **ropl3)
+                struct snd_opl3 **ropl3)
 {
-       static snd_device_ops_t ops = {
+       static struct snd_device_ops ops = {
                .dev_free = snd_opl3_dev_free,
        };
-       opl3_t *opl3;
+       struct snd_opl3 *opl3;
        int err;
 
        *ropl3 = NULL;
-       opl3 = kcalloc(1, sizeof(*opl3), GFP_KERNEL);
-       if (opl3 == NULL)
+       opl3 = kzalloc(sizeof(*opl3), GFP_KERNEL);
+       if (opl3 == NULL) {
+               snd_printk(KERN_ERR "opl3: cannot allocate\n");
                return -ENOMEM;
+       }
 
        opl3->card = card;
        opl3->hardware = hardware;
        spin_lock_init(&opl3->reg_lock);
        spin_lock_init(&opl3->timer_lock);
-       init_MUTEX(&opl3->access_mutex);
+       mutex_init(&opl3->access_mutex);
 
        if ((err = snd_device_new(card, SNDRV_DEV_CODEC, opl3, &ops)) < 0) {
                snd_opl3_free(opl3);
@@ -373,7 +369,7 @@ int snd_opl3_new(snd_card_t *card,
        return 0;
 }
 
-int snd_opl3_init(opl3_t *opl3)
+int snd_opl3_init(struct snd_opl3 *opl3)
 {
        if (! opl3->command) {
                printk(KERN_ERR "snd_opl3_init: command not defined!\n");
@@ -397,14 +393,14 @@ int snd_opl3_init(opl3_t *opl3)
        return 0;
 }
 
-int snd_opl3_create(snd_card_t * card,
+int snd_opl3_create(struct snd_card *card,
                    unsigned long l_port,
                    unsigned long r_port,
                    unsigned short hardware,
                    int integrated,
-                   opl3_t ** ropl3)
+                   struct snd_opl3 ** ropl3)
 {
-       opl3_t *opl3;
+       struct snd_opl3 *opl3;
        int err;
 
        *ropl3 = NULL;
@@ -413,13 +409,13 @@ int snd_opl3_create(snd_card_t * card,
        if (! integrated) {
                if ((opl3->res_l_port = request_region(l_port, 2, "OPL2/3 (left)")) == NULL) {
                        snd_printk(KERN_ERR "opl3: can't grab left port 0x%lx\n", l_port);
-                       snd_opl3_free(opl3);
+                       snd_device_free(card, opl3);
                        return -EBUSY;
                }
                if (r_port != 0 &&
                    (opl3->res_r_port = request_region(r_port, 2, "OPL2/3 (right)")) == NULL) {
                        snd_printk(KERN_ERR "opl3: can't grab right port 0x%lx\n", r_port);
-                       snd_opl3_free(opl3);
+                       snd_device_free(card, opl3);
                        return -EBUSY;
                }
        }
@@ -438,7 +434,7 @@ int snd_opl3_create(snd_card_t * card,
                if ((err = snd_opl3_detect(opl3)) < 0) {
                        snd_printd("OPL2/3 chip not detected at 0x%lx/0x%lx\n",
                                   opl3->l_port, opl3->r_port);
-                       snd_opl3_free(opl3);
+                       snd_device_free(card, opl3);
                        return err;
                }
                /* detect routine returns correct hardware type */
@@ -455,7 +451,7 @@ int snd_opl3_create(snd_card_t * card,
        return 0;
 }
 
-int snd_opl3_timer_new(opl3_t * opl3, int timer1_dev, int timer2_dev)
+int snd_opl3_timer_new(struct snd_opl3 * opl3, int timer1_dev, int timer2_dev)
 {
        int err;
 
@@ -472,12 +468,12 @@ int snd_opl3_timer_new(opl3_t * opl3, int timer1_dev, int timer2_dev)
        return 0;
 }
 
-int snd_opl3_hwdep_new(opl3_t * opl3,
+int snd_opl3_hwdep_new(struct snd_opl3 * opl3,
                       int device, int seq_device,
-                      snd_hwdep_t ** rhwdep)
+                      struct snd_hwdep ** rhwdep)
 {
-       snd_hwdep_t *hw;
-       snd_card_t *card = opl3->card;
+       struct snd_hwdep *hw;
+       struct snd_card *card = opl3->card;
        int err;
 
        if (rhwdep)
@@ -520,9 +516,9 @@ int snd_opl3_hwdep_new(opl3_t * opl3,
        opl3->seq_dev_num = seq_device;
 #if defined(CONFIG_SND_SEQUENCER) || (defined(MODULE) && defined(CONFIG_SND_SEQUENCER_MODULE))
        if (snd_seq_device_new(card, seq_device, SNDRV_SEQ_DEV_ID_OPL3,
-                              sizeof(opl3_t*), &opl3->seq_dev) >= 0) {
+                              sizeof(struct snd_opl3 *), &opl3->seq_dev) >= 0) {
                strcpy(opl3->seq_dev->name, hw->name);
-               *(opl3_t**)SNDRV_SEQ_DEVICE_ARGPTR(opl3->seq_dev) = opl3;
+               *(struct snd_opl3 **)SNDRV_SEQ_DEVICE_ARGPTR(opl3->seq_dev) = opl3;
        }
 #endif
        if (rhwdep)