#define ac97_is_power_save_mode(ac97) 0
 #endif
 
+#define ac97_err(ac97, fmt, args...)   \
+       dev_err((ac97)->bus->card->dev, fmt, ##args)
+#define ac97_warn(ac97, fmt, args...)  \
+       dev_warn((ac97)->bus->card->dev, fmt, ##args)
+#define ac97_dbg(ac97, fmt, args...)   \
+       dev_dbg((ac97)->bus->card->dev, fmt, ##args)
 
 /*
  *  I/O routines
        int err, idx;
 
        /*
-       printk(KERN_DEBUG "AC97_GPIO_CFG = %x\n",
+       ac97_dbg(ac97, "AC97_GPIO_CFG = %x\n",
               snd_ac97_read(ac97,AC97_GPIO_CFG));
        */
        snd_ac97_write(ac97, AC97_GPIO_CFG, 0xffff & ~(AC97_GPIO_LINE1_OH));
                     ac97->bus->card->number, ac97->num,
                     snd_ac97_get_short_name(ac97));
        if ((err = device_register(&ac97->dev)) < 0) {
-               snd_printk(KERN_ERR "Can't register ac97 bus\n");
+               ac97_err(ac97, "Can't register ac97 bus\n");
                ac97->dev.bus = NULL;
                return err;
        }
                                                      msecs_to_jiffies(500), 1);
                }
                if (err < 0) {
-                       snd_printk(KERN_WARNING "AC'97 %d does not respond - RESET\n", ac97->num);
+                       ac97_warn(ac97, "AC'97 %d does not respond - RESET\n",
+                                ac97->num);
                        /* proceed anyway - it's often non-critical */
                }
        }
        ac97->id |= snd_ac97_read(ac97, AC97_VENDOR_ID2);
        if (! (ac97->scaps & AC97_SCAP_DETECT_BY_VENDOR) &&
            (ac97->id == 0x00000000 || ac97->id == 0xffffffff)) {
-               snd_printk(KERN_ERR "AC'97 %d access is not valid [0x%x], removing mixer.\n", ac97->num, ac97->id);
+               ac97_err(ac97,
+                        "AC'97 %d access is not valid [0x%x], removing mixer.\n",
+                        ac97->num, ac97->id);
                snd_ac97_free(ac97);
                return -EIO;
        }
 
        if (!ac97_is_audio(ac97) && !ac97_is_modem(ac97)) {
                if (!(ac97->scaps & (AC97_SCAP_SKIP_AUDIO|AC97_SCAP_SKIP_MODEM)))
-                       snd_printk(KERN_ERR "AC'97 %d access error (not audio or modem codec)\n", ac97->num);
+                       ac97_err(ac97,
+                                "AC'97 %d access error (not audio or modem codec)\n",
+                                ac97->num);
                snd_ac97_free(ac97);
                return -EACCES;
        }
                                goto __ready_ok;
                        schedule_timeout_uninterruptible(1);
                } while (time_after_eq(end_time, jiffies));
-               snd_printk(KERN_WARNING "AC'97 %d analog subsections not ready\n", ac97->num);
+               ac97_warn(ac97,
+                         "AC'97 %d analog subsections not ready\n", ac97->num);
        }
 
        /* FIXME: add powerdown control */
                                goto __ready_ok;
                        schedule_timeout_uninterruptible(1);
                } while (time_after_eq(end_time, jiffies));
-               snd_printk(KERN_WARNING "MC'97 %d converters and GPIO not ready (0x%x)\n", ac97->num, snd_ac97_read(ac97, AC97_EXTENDED_MSTATUS));
+               ac97_warn(ac97,
+                         "MC'97 %d converters and GPIO not ready (0x%x)\n",
+                         ac97->num,
+                         snd_ac97_read(ac97, AC97_EXTENDED_MSTATUS));
        }
        
       __ready_ok:
 {
        unsigned short scfg;
        if ((ac97->id & 0xffffff00) != 0x41445300) {
-               snd_printk(KERN_ERR "ac97_quirk AD_SHARING is only for AD codecs\n");
+               ac97_err(ac97, "ac97_quirk AD_SHARING is only for AD codecs\n");
                return -EINVAL;
        }
        /* Turn on OMS bit to route microphone to back panel */
 static int tune_alc_jack(struct snd_ac97 *ac97)
 {
        if ((ac97->id & 0xffffff00) != 0x414c4700) {
-               snd_printk(KERN_ERR "ac97_quirk ALC_JACK is only for Realtek codecs\n");
+               ac97_err(ac97,
+                        "ac97_quirk ALC_JACK is only for Realtek codecs\n");
                return -EINVAL;
        }
        snd_ac97_update_bits(ac97, 0x7a, 0x20, 0x20); /* select jack detect function */
        if (override && strcmp(override, "-1") && strcmp(override, "default")) {
                result = apply_quirk_str(ac97, override);
                if (result < 0)
-                       snd_printk(KERN_ERR "applying quirk type %s failed (%d)\n", override, result);
+                       ac97_err(ac97, "applying quirk type %s failed (%d)\n",
+                                override, result);
                return result;
        }
 
                    quirk->subdevice == (quirk->mask & ac97->subsystem_device)) {
                        if (quirk->codec_id && quirk->codec_id != ac97->id)
                                continue;
-                       snd_printdd("ac97 quirk for %s (%04x:%04x)\n", quirk->name, ac97->subsystem_vendor, ac97->subsystem_device);
+                       ac97_dbg(ac97, "ac97 quirk for %s (%04x:%04x)\n",
+                                quirk->name, ac97->subsystem_vendor,
+                                ac97->subsystem_device);
                        result = apply_quirk(ac97, quirk->type);
                        if (result < 0)
-                               snd_printk(KERN_ERR "applying quirk type %d for %s failed (%d)\n", quirk->type, quirk->name, result);
+                               ac97_err(ac97,
+                                        "applying quirk type %d for %s failed (%d)\n",
+                                        quirk->type, quirk->name, result);
                        return result;
                }
        }
 
                }
                if (!ok_flag) {
                        spin_unlock_irq(&pcm->bus->bus_lock);
-                       snd_printk(KERN_ERR "cannot find configuration for AC97 slot %i\n", i);
+                       dev_err(bus->card->dev,
+                               "cannot find configuration for AC97 slot %i\n",
+                               i);
                        err = -EAGAIN;
                        goto error;
                }
                        if (pcm->r[r].rslots[cidx] & (1 << i)) {
                                reg = get_slot_reg(pcm, cidx, i, r);
                                if (reg == 0xff) {
-                                       snd_printk(KERN_ERR "invalid AC97 slot %i?\n", i);
+                                       dev_err(bus->card->dev,
+                                               "invalid AC97 slot %i?\n", i);
                                        continue;
                                }
                                if (reg_ok[cidx] & (1 << (reg - AC97_PCM_FRONT_DAC_RATE)))
                                        continue;
-                               //printk(KERN_DEBUG "setting ac97 reg 0x%x to rate %d\n", reg, rate);
+                               dev_dbg(bus->card->dev,
+                                       "setting ac97 reg 0x%x to rate %d\n",
+                                       reg, rate);
                                err = snd_ac97_set_rate(pcm->r[r].codec[cidx], reg, rate);
                                if (err < 0)
-                                       snd_printk(KERN_ERR "error in snd_ac97_set_rate: cidx=%d, reg=0x%x, rate=%d, err=%d\n", cidx, reg, rate, err);
+                                       dev_err(bus->card->dev,
+                                               "error in snd_ac97_set_rate: cidx=%d, reg=0x%x, rate=%d, err=%d\n",
+                                               cidx, reg, rate, err);
                                else
                                        reg_ok[cidx] |= (1 << (reg - AC97_PCM_FRONT_DAC_RATE));
                        }