if (stream->runtime->dma_buffer_p) {
 
                        if (buffer_size > stream->runtime->dma_buffer_p->bytes)
-                               dev_err(&stream->device->dev,
+                               dev_err(stream->device->dev,
                                                "Not enough DMA buffer");
                        else
                                buffer = stream->runtime->dma_buffer_p->area;
        /* register compressed device */
        ret = snd_register_device(SNDRV_DEVICE_TYPE_COMPRESS,
                                  compr->card, compr->device,
-                                 &snd_compr_file_ops, compr, &compr->dev);
+                                 &snd_compr_file_ops, compr, compr->dev);
        if (ret < 0) {
                pr_err("snd_register_device failed %d\n", ret);
                return ret;
        struct snd_compr *compr;
 
        compr = device->device_data;
-       snd_unregister_device(&compr->dev);
+       snd_unregister_device(compr->dev);
        return 0;
 }
 
 
        compr = device->device_data;
        snd_compress_proc_done(compr);
-       put_device(&compr->dev);
+       put_device(compr->dev);
        return 0;
 }
 
 
        snd_compress_set_id(compr, id);
 
-       snd_device_initialize(&compr->dev, card);
-       dev_set_name(&compr->dev, "comprC%iD%i", card->number, device);
+       ret = snd_device_alloc(&compr->dev, card);
+       if (ret)
+               return ret;
+       dev_set_name(compr->dev, "comprC%iD%i", card->number, device);
 
        ret = snd_device_new(card, SNDRV_DEV_COMPRESS, compr, &ops);
        if (ret == 0)
                snd_compress_proc_init(compr);
+       else
+               put_device(compr->dev);
 
        return ret;
 }