diff --git a/include/sound/soc-component.h b/include/sound/soc-component.h
index 9122b11..864983b 100644
--- a/include/sound/soc-component.h
+++ b/include/sound/soc-component.h
@@ -146,7 +146,6 @@ struct snd_soc_component_driver {
 		    struct snd_pcm_substream *substream,
 		    struct vm_area_struct *vma);
 
-	const struct snd_compr_ops *compr_ops; /* remove me */
 	const struct snd_compress_ops *compress_ops;
 
 	/* probe ordering - for components with runtime dependencies */
diff --git a/sound/soc/soc-compress.c b/sound/soc/soc-compress.c
index 343de96..ceaf976 100644
--- a/sound/soc/soc-compress.c
+++ b/sound/soc/soc-compress.c
@@ -44,23 +44,6 @@ static int soc_compr_components_open(struct snd_compr_stream *cstream,
 		}
 	}
 
-	/* remvoe me */
-	for_each_rtd_components(rtd, i, component) {
-		if (!component->driver->compr_ops ||
-		    !component->driver->compr_ops->open)
-			continue;
-
-		ret = component->driver->compr_ops->open(cstream);
-		if (ret < 0) {
-			dev_err(component->dev,
-				"Compress ASoC: can't open platform %s: %d\n",
-				component->name, ret);
-
-			*last = component;
-			return ret;
-		}
-	}
-
 	*last = NULL;
 	return 0;
 }
@@ -83,18 +66,6 @@ static int soc_compr_components_free(struct snd_compr_stream *cstream,
 		component->driver->compress_ops->free(component, cstream);
 	}
 
-	/* remove me */
-	for_each_rtd_components(rtd, i, component) {
-		if (component == last)
-			break;
-
-		if (!component->driver->compr_ops ||
-		    !component->driver->compr_ops->free)
-			continue;
-
-		component->driver->compr_ops->free(cstream);
-	}
-
 	return 0;
 }
 
@@ -367,17 +338,6 @@ static int soc_compr_components_trigger(struct snd_compr_stream *cstream,
 			return ret;
 	}
 
-	/* remove me */
-	for_each_rtd_components(rtd, i, component) {
-		if (!component->driver->compr_ops ||
-		    !component->driver->compr_ops->trigger)
-			continue;
-
-		ret = component->driver->compr_ops->trigger(cstream, cmd);
-		if (ret < 0)
-			return ret;
-	}
-
 	return 0;
 }
 
@@ -481,17 +441,6 @@ static int soc_compr_components_set_params(struct snd_compr_stream *cstream,
 			return ret;
 	}
 
-	/* remove me */
-	for_each_rtd_components(rtd, i, component) {
-		if (!component->driver->compr_ops ||
-		    !component->driver->compr_ops->set_params)
-			continue;
-
-		ret = component->driver->compr_ops->set_params(cstream, params);
-		if (ret < 0)
-			return ret;
-	}
-
 	return 0;
 }
 
@@ -632,16 +581,6 @@ static int soc_compr_get_params(struct snd_compr_stream *cstream,
 		break;
 	}
 
-	/* remove me */
-	for_each_rtd_components(rtd, i, component) {
-		if (!component->driver->compr_ops ||
-		    !component->driver->compr_ops->get_params)
-			continue;
-
-		ret = component->driver->compr_ops->get_params(cstream, params);
-		break;
-	}
-
 err:
 	mutex_unlock(&rtd->card->pcm_mutex);
 	return ret;
@@ -666,16 +605,6 @@ static int soc_compr_get_caps(struct snd_compr_stream *cstream,
 		break;
 	}
 
-	/* remove me */
-	for_each_rtd_components(rtd, i, component) {
-		if (!component->driver->compr_ops ||
-		    !component->driver->compr_ops->get_caps)
-			continue;
-
-		ret = component->driver->compr_ops->get_caps(cstream, caps);
-		break;
-	}
-
 	mutex_unlock(&rtd->card->pcm_mutex);
 	return ret;
 }
@@ -699,17 +628,6 @@ static int soc_compr_get_codec_caps(struct snd_compr_stream *cstream,
 		break;
 	}
 
-	/* remove me */
-	for_each_rtd_components(rtd, i, component) {
-		if (!component->driver->compr_ops ||
-		    !component->driver->compr_ops->get_codec_caps)
-			continue;
-
-		ret = component->driver->compr_ops->get_codec_caps(cstream,
-								   codec);
-		break;
-	}
-
 	mutex_unlock(&rtd->card->pcm_mutex);
 	return ret;
 }
@@ -740,17 +658,6 @@ static int soc_compr_ack(struct snd_compr_stream *cstream, size_t bytes)
 			goto err;
 	}
 
-	/* remove me */
-	for_each_rtd_components(rtd, i, component) {
-		if (!component->driver->compr_ops ||
-		    !component->driver->compr_ops->ack)
-			continue;
-
-		ret = component->driver->compr_ops->ack(cstream, bytes);
-		if (ret < 0)
-			goto err;
-	}
-
 err:
 	mutex_unlock(&rtd->card->pcm_mutex);
 	return ret;
@@ -779,16 +686,6 @@ static int soc_compr_pointer(struct snd_compr_stream *cstream,
 		break;
 	}
 
-	/* remove me */
-	for_each_rtd_components(rtd, i, component) {
-		if (!component->driver->compr_ops ||
-		    !component->driver->compr_ops->pointer)
-			continue;
-
-		ret = component->driver->compr_ops->pointer(cstream, tstamp);
-		break;
-	}
-
 	mutex_unlock(&rtd->card->pcm_mutex);
 	return ret;
 }
@@ -812,16 +709,6 @@ static int soc_compr_copy(struct snd_compr_stream *cstream,
 		break;
 	}
 
-	/* remove me */
-	for_each_rtd_components(rtd, i, component) {
-		if (!component->driver->compr_ops ||
-		    !component->driver->compr_ops->copy)
-			continue;
-
-		ret = component->driver->compr_ops->copy(cstream, buf, count);
-		break;
-	}
-
 	mutex_unlock(&rtd->card->pcm_mutex);
 	return ret;
 }
@@ -851,18 +738,6 @@ static int soc_compr_set_metadata(struct snd_compr_stream *cstream,
 			return ret;
 	}
 
-	/* remove me */
-	for_each_rtd_components(rtd, i, component) {
-		if (!component->driver->compr_ops ||
-		    !component->driver->compr_ops->set_metadata)
-			continue;
-
-		ret = component->driver->compr_ops->set_metadata(cstream,
-								 metadata);
-		if (ret < 0)
-			return ret;
-	}
-
 	return 0;
 }
 
@@ -889,16 +764,6 @@ static int soc_compr_get_metadata(struct snd_compr_stream *cstream,
 			component, cstream, metadata);
 	}
 
-	/* remove me */
-	for_each_rtd_components(rtd, i, component) {
-		if (!component->driver->compr_ops ||
-		    !component->driver->compr_ops->get_metadata)
-			continue;
-
-		return component->driver->compr_ops->get_metadata(cstream,
-								  metadata);
-	}
-
 	return 0;
 }
 
@@ -1029,16 +894,6 @@ int snd_soc_new_compress(struct snd_soc_pcm_runtime *rtd, int num)
 		break;
 	}
 
-	/* remove me */
-	for_each_rtd_components(rtd, i, component) {
-		if (!component->driver->compr_ops ||
-		    !component->driver->compr_ops->copy)
-			continue;
-
-		compr->ops->copy = soc_compr_copy;
-		break;
-	}
-
 	mutex_init(&compr->lock);
 	ret = snd_compress_new(rtd->card->snd_card, num, direction,
 				new_name, compr);
