struct timespec *system_ts, struct timespec *audio_ts,
                        struct snd_pcm_audio_tstamp_config *audio_tstamp_config,
                        struct snd_pcm_audio_tstamp_report *audio_tstamp_report);
-       int (*copy)(struct snd_pcm_substream *substream, int channel,
-                   snd_pcm_uframes_t pos,
-                   void __user *buf, snd_pcm_uframes_t count);
-       int (*silence)(struct snd_pcm_substream *substream, int channel, 
-                      snd_pcm_uframes_t pos, snd_pcm_uframes_t count);
        int (*fill_silence)(struct snd_pcm_substream *substream, int channel,
                            unsigned long pos, unsigned long bytes);
        int (*copy_user)(struct snd_pcm_substream *substream, int channel,
 
                                                                   frames_to_bytes(runtime, ofs),
                                                                   frames_to_bytes(runtime, transfer));
                                snd_BUG_ON(err < 0);
-                       } else if (substream->ops->silence) {
-                               err = substream->ops->silence(substream, -1, ofs, transfer);
-                               snd_BUG_ON(err < 0);
                        } else {
                                hwbuf = runtime->dma_area + frames_to_bytes(runtime, ofs);
                                snd_pcm_format_set_silence(runtime->format, hwbuf, transfer * runtime->channels);
                                                                           samples_to_bytes(runtime, transfer));
                                        snd_BUG_ON(err < 0);
                                }
-                       } else if (substream->ops->silence) {
-                               for (c = 0; c < channels; ++c) {
-                                       err = substream->ops->silence(substream, c, ofs, transfer);
-                                       snd_BUG_ON(err < 0);
-                               }
                        } else {
                                size_t dma_csize = runtime->dma_bytes / channels;
                                for (c = 0; c < channels; ++c) {
                err = substream->ops->copy_user(substream, 0, hwoff, buf, frames);
                if (err < 0)
                        return err;
-       } else if (substream->ops->copy) {
-               if ((err = substream->ops->copy(substream, -1, hwoff, buf, frames)) < 0)
-                       return err;
        } else {
                char *hwbuf = runtime->dma_area + frames_to_bytes(runtime, hwoff);
                if (copy_from_user(hwbuf, buf, frames_to_bytes(runtime, frames)))
        if (PCM_RUNTIME_CHECK(substream))
                return -ENXIO;
        runtime = substream->runtime;
-       if (snd_BUG_ON(!substream->ops->copy_user && !substream->ops->copy
-                      && !runtime->dma_area))
+       if (snd_BUG_ON(!substream->ops->copy_user && !runtime->dma_area))
                return -EINVAL;
        if (runtime->status->state == SNDRV_PCM_STATE_OPEN)
                return -EBADFD;
                        if (err < 0)
                                return err;
                }
-       } else if (substream->ops->copy) {
-               if (snd_BUG_ON(!substream->ops->silence))
-                       return -EINVAL;
-               for (c = 0; c < channels; ++c, ++bufs) {
-                       if (*bufs == NULL) {
-                               if ((err = substream->ops->silence(substream, c, hwoff, frames)) < 0)
-                                       return err;
-                       } else {
-                               buf = *bufs + samples_to_bytes(runtime, off);
-                               if ((err = substream->ops->copy(substream, c, hwoff, buf, frames)) < 0)
-                                       return err;
-                       }
-               }
        } else {
                /* default transfer behaviour */
                size_t dma_csize = runtime->dma_bytes / channels;
                err = substream->ops->copy_user(substream, 0, hwoff, buf, frames);
                if (err < 0)
                        return err;
-       } else if (substream->ops->copy) {
-               if ((err = substream->ops->copy(substream, -1, hwoff, buf, frames)) < 0)
-                       return err;
        } else {
                char *hwbuf = runtime->dma_area + frames_to_bytes(runtime, hwoff);
                if (copy_to_user(buf, hwbuf, frames_to_bytes(runtime, frames)))
                        if (err < 0)
                                return err;
                }
-       } else if (substream->ops->copy) {
-               for (c = 0; c < channels; ++c, ++bufs) {
-                       if (*bufs == NULL)
-                               continue;
-                       buf = *bufs + samples_to_bytes(runtime, off);
-                       if ((err = substream->ops->copy(substream, c, hwoff, buf, frames)) < 0)
-                               return err;
-               }
        } else {
                snd_pcm_uframes_t dma_csize = runtime->dma_bytes / channels;
                for (c = 0; c < channels; ++c, ++bufs) {