diff --git a/cmd/sound.c b/cmd/sound.c
index b063863bc9a..d00a7738167 100644
--- a/cmd/sound.c
+++ b/cmd/sound.c
@@ -15,18 +15,12 @@ DECLARE_GLOBAL_DATA_PTR;
 /* Initilaise sound subsystem */
 static int do_init(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 {
-#ifdef CONFIG_DM_SOUND
 	struct udevice *dev;
-#endif
 	int ret;
 
-#ifdef CONFIG_DM_SOUND
 	ret = uclass_first_device_err(UCLASS_SOUND, &dev);
 	if (!ret)
 		ret = sound_setup(dev);
-#else
-	ret = sound_init(gd->fdt_blob);
-#endif
 	if (ret) {
 		printf("Initialise Audio driver failed\n");
 		return CMD_RET_FAILURE;
@@ -38,9 +32,7 @@ static int do_init(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 /* play sound from buffer */
 static int do_play(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 {
-#ifdef CONFIG_DM_SOUND
 	struct udevice *dev;
-#endif
 	int ret = 0;
 	int msec = 1000;
 	int freq = 400;
@@ -50,13 +42,9 @@ static int do_play(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 	if (argc > 2)
 		freq = simple_strtoul(argv[2], NULL, 10);
 
-#ifdef CONFIG_DM_SOUND
 	ret = uclass_first_device_err(UCLASS_SOUND, &dev);
 	if (!ret)
 		ret = sound_beep(dev, msec, freq);
-#else
-	ret = sound_play(msec, freq);
-#endif
 	if (ret) {
 		printf("Sound device failed to play (err=%d)\n", ret);
 		return CMD_RET_FAILURE;
diff --git a/drivers/sound/Kconfig b/drivers/sound/Kconfig
index 93f6c36af32..5de86c05c60 100644
--- a/drivers/sound/Kconfig
+++ b/drivers/sound/Kconfig
@@ -12,12 +12,6 @@ config SOUND
 	  audio codecs are called from the sound-i2s code. This could be
 	  converted to driver model.
 
-config DM_SOUND
-	bool "Use driver model for sound"
-	help
-	  Enable this option to use driver model for sound devices. This is a
-	  migration option and will be removed.
-
 config I2S
 	bool "Enable I2S support"
 	depends on SOUND
diff --git a/drivers/sound/Makefile b/drivers/sound/Makefile
index 75fa31ec534..df46a48568b 100644
--- a/drivers/sound/Makefile
+++ b/drivers/sound/Makefile
@@ -4,15 +4,11 @@
 # R. Chandrasekar <rcsekar@samsung.com>
 
 obj-$(CONFIG_SOUND)	+= sound.o
-obj-$(CONFIG_DM_SOUND)	+= codec-uclass.o
-obj-$(CONFIG_DM_SOUND)	+= i2s-uclass.o
-obj-$(CONFIG_DM_SOUND)	+= sound-uclass.o
+obj-$(CONFIG_SOUND)	+= codec-uclass.o
+obj-$(CONFIG_SOUND)	+= i2s-uclass.o
+obj-$(CONFIG_SOUND)	+= sound-uclass.o
 obj-$(CONFIG_I2S_SAMSUNG)	+= samsung-i2s.o
 obj-$(CONFIG_SOUND_SANDBOX)	+= sandbox.o
-ifdef CONFIG_DM_SOUND
 obj-$(CONFIG_I2S_SAMSUNG)	+= samsung_sound.o
-else
-obj-$(CONFIG_I2S)	+= sound-i2s.o
-endif
 obj-$(CONFIG_SOUND_WM8994)	+= wm8994.o
 obj-$(CONFIG_SOUND_MAX98095)	+= max98095.o
diff --git a/drivers/sound/max98095.c b/drivers/sound/max98095.c
index d6710dfaa7a..fa204bf7a96 100644
--- a/drivers/sound/max98095.c
+++ b/drivers/sound/max98095.c
@@ -29,7 +29,6 @@ struct max98095_priv {
 	unsigned int sysclk;
 	unsigned int rate;
 	unsigned int fmt;
-	int i2c_addr;
 	struct udevice *dev;
 };
 
@@ -51,12 +50,7 @@ static int max98095_i2c_write(struct max98095_priv *priv, unsigned int reg,
 {
 	debug("%s: Write Addr : 0x%02X, Data :  0x%02X\n",
 	      __func__, reg, data);
-#ifdef CONFIG_DM_SOUND
-	debug("dev = %s\n", priv->dev->name);
 	return dm_i2c_write(priv->dev, reg, &data, 1);
-#else
-	return i2c_write(priv->i2c_addr, reg, 1, &data, 1);
-#endif
 }
 
 /*
@@ -73,11 +67,7 @@ static unsigned int max98095_i2c_read(struct max98095_priv *priv,
 {
 	int ret;
 
-#ifdef CONFIG_DM_SOUND
 	return dm_i2c_read(priv->dev, reg, data, 1);
-#else
-	ret = i2c_read(priv->i2c_addr, reg, 1, data, 1);
-#endif
 	if (ret != 0) {
 		debug("%s: Error while reading register %#04x\n",
 		      __func__, reg);
@@ -519,84 +509,6 @@ static int max98095_do_init(struct max98095_priv *priv,
 	return ret;
 }
 
-#ifndef CONFIG_DM_SOUND
-static int get_max98095_codec_values(struct sound_codec_info *pcodec_info,
-				const void *blob)
-{
-	int error = 0;
-	enum fdt_compat_id compat;
-	int node;
-	int parent;
-
-	/* Get the node from FDT for codec */
-	node = fdtdec_next_compatible(blob, 0, COMPAT_MAXIM_98095_CODEC);
-	if (node <= 0) {
-		debug("EXYNOS_SOUND: No node for codec in device tree\n");
-		debug("node = %d\n", node);
-		return -1;
-	}
-
-	parent = fdt_parent_offset(blob, node);
-	if (parent < 0) {
-		debug("%s: Cannot find node parent\n", __func__);
-		return -1;
-	}
-
-	compat = fdtdec_lookup(blob, parent);
-	switch (compat) {
-	case COMPAT_SAMSUNG_S3C2440_I2C:
-		pcodec_info->i2c_bus = i2c_get_bus_num_fdt(parent);
-		error |= pcodec_info->i2c_bus;
-		debug("i2c bus = %d\n", pcodec_info->i2c_bus);
-		pcodec_info->i2c_dev_addr = fdtdec_get_int(blob, node,
-							"reg", 0);
-		error |= pcodec_info->i2c_dev_addr;
-		debug("i2c dev addr = %x\n", pcodec_info->i2c_dev_addr);
-		break;
-	default:
-		debug("%s: Unknown compat id %d\n", __func__, compat);
-		return -1;
-	}
-	if (error == -1) {
-		debug("fail to get max98095 codec node properties\n");
-		return -1;
-	}
-
-	return 0;
-}
-
-/* max98095 Device Initialisation */
-int max98095_init(const void *blob, enum en_max_audio_interface aif_id,
-		  int sampling_rate, int mclk_freq,
-		  int bits_per_sample)
-{
-	int ret;
-	int old_bus = i2c_get_bus_num();
-	struct sound_codec_info pcodec_info;
-	struct max98095_priv max98095_info;
-
-	if (get_max98095_codec_values(&pcodec_info, blob) < 0) {
-		debug("FDT Codec values failed\n");
-		return -1;
-	}
-
-	i2c_set_bus_num(pcodec_info.i2c_bus);
-
-	max98095_info.i2c_addr = pcodec_info.i2c_dev_addr;
-	ret = max98095_device_init(&max98095_info);
-	if (ret < 0) {
-		debug("%s: max98095 codec chip init failed\n", __func__);
-		return ret;
-	}
-
-	ret = max98095_do_init(&max98095_info, aif_id, sampling_rate, mclk_freq,
-			       bits_per_sample);
-	i2c_set_bus_num(old_bus);
-
-	return ret;
-}
-#endif
-
 static int max98095_set_params(struct udevice *dev, int interface, int rate,
 			       int mclk_freq, int bits_per_sample,
 			       uint channels)
diff --git a/drivers/sound/sandbox.c b/drivers/sound/sandbox.c
index d8a971ca060..17cba616b56 100644
--- a/drivers/sound/sandbox.c
+++ b/drivers/sound/sandbox.c
@@ -28,17 +28,6 @@ struct sandbox_sound_priv {
 	int sum;	/* Use to sum the provided audio data */
 };
 
-#ifndef CONFIG_DM_SOUND
-int sound_play(uint32_t msec, uint32_t frequency)
-{
-	sandbox_sdl_sound_start(frequency);
-	mdelay(msec);
-	sandbox_sdl_sound_stop();
-
-	return 0;
-}
-#endif /* CONFIG_DM_SOUND */
-
 int sound_init(const void *blob)
 {
 	return sandbox_sdl_sound_init();
diff --git a/drivers/sound/sound-i2s.c b/drivers/sound/sound-i2s.c
deleted file mode 100644
index a2fc78154f1..00000000000
--- a/drivers/sound/sound-i2s.c
+++ /dev/null
@@ -1,206 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Copyright (C) 2012 Samsung Electronics
- * R. Chandrasekar <rcsekar@samsung.com>
- */
-
-#include <malloc.h>
-#include <common.h>
-#include <asm/io.h>
-#include <linux/libfdt.h>
-#include <fdtdec.h>
-#include <i2c.h>
-#include <i2s.h>
-#include <sound.h>
-#include <asm/arch/sound.h>
-#include "wm8994.h"
-#include "max98095.h"
-
-/* defines */
-#define SOUND_400_HZ 400
-#define SOUND_BITS_IN_BYTE 8
-
-static struct i2s_uc_priv g_i2stx_pri;
-
-/*
- * get_sound_i2s_values gets values for i2s parameters
- *
- * @param i2s_uc_priv	i2s transmitter transfer param structure
- * @param blob		FDT blob if enabled else NULL
- */
-static int get_sound_i2s_values(struct i2s_uc_priv *i2s, const void *blob)
-{
-	int node;
-	int error = 0;
-	int base;
-
-	node = fdt_path_offset(blob, "i2s");
-	if (node <= 0) {
-		debug("EXYNOS_SOUND: No node for sound in device tree\n");
-		return -1;
-	}
-
-	/*
-	 * Get the pre-defined sound specific values from FDT.
-	 * All of these are expected to be correct otherwise
-	 * wrong register values in i2s setup parameters
-	 * may result in no sound play.
-	 */
-	base = fdtdec_get_addr(blob, node, "reg");
-	if (base == FDT_ADDR_T_NONE) {
-		debug("%s: Missing  i2s base\n", __func__);
-		return -1;
-	}
-	i2s->base_address = base;
-
-	i2s->audio_pll_clk = fdtdec_get_int(blob,
-				node, "samsung,i2s-epll-clock-frequency", -1);
-	error |= i2s->audio_pll_clk;
-	debug("audio_pll_clk = %d\n", i2s->audio_pll_clk);
-	i2s->samplingrate = fdtdec_get_int(blob,
-				node, "samsung,i2s-sampling-rate", -1);
-	error |= i2s->samplingrate;
-	debug("samplingrate = %d\n", i2s->samplingrate);
-	i2s->bitspersample = fdtdec_get_int(blob,
-				node, "samsung,i2s-bits-per-sample", -1);
-	error |= i2s->bitspersample;
-	debug("bitspersample = %d\n", i2s->bitspersample);
-	i2s->channels = fdtdec_get_int(blob,
-			node, "samsung,i2s-channels", -1);
-	error |= i2s->channels;
-	debug("channels = %d\n", i2s->channels);
-	i2s->rfs = fdtdec_get_int(blob,
-				node, "samsung,i2s-lr-clk-framesize", -1);
-	error |= i2s->rfs;
-	debug("rfs = %d\n", i2s->rfs);
-	i2s->bfs = fdtdec_get_int(blob,
-				node, "samsung,i2s-bit-clk-framesize", -1);
-	error |= i2s->bfs;
-	debug("bfs = %d\n", i2s->bfs);
-
-	i2s->id = fdtdec_get_int(blob, node, "samsung,i2s-id", -1);
-	error |= i2s->id;
-	debug("id = %d\n", i2s->id);
-
-	if (error == -1) {
-		debug("fail to get sound i2s node properties\n");
-		return -1;
-	}
-
-	return 0;
-}
-
-/*
- * Init codec
- *
- * @param blob          FDT blob
- * @param pi2s_tx	i2s parameters required by codec
- * @return              int value, 0 for success
- */
-static int codec_init(const void *blob, struct i2s_uc_priv *pi2s_tx)
-{
-	int ret;
-	const char *codectype;
-	int node;
-
-	/* Get the node from FDT for sound */
-	node = fdt_path_offset(blob, "i2s");
-	if (node <= 0) {
-		debug("EXYNOS_SOUND: No node for sound in device tree\n");
-		debug("node = %d\n", node);
-		return -1;
-	}
-
-	/*
-	 * Get the pre-defined sound codec specific values from FDT.
-	 * All of these are expected to be correct otherwise sound
-	 * can not be played
-	 */
-	codectype = fdt_getprop(blob, node, "samsung,codec-type", NULL);
-	debug("device = %s\n", codectype);
-	if (!strcmp(codectype, "wm8994")) {
-		/* Check the codec type and initialise the same */
-		ret = wm8994_init(blob, pi2s_tx->id, pi2s_tx->samplingrate,
-				  (pi2s_tx->samplingrate * (pi2s_tx->rfs)),
-				  pi2s_tx->bitspersample, pi2s_tx->channels);
-	} else if (!strcmp(codectype, "max98095")) {
-		ret = max98095_init(blob, pi2s_tx->id, pi2s_tx->samplingrate,
-				    (pi2s_tx->samplingrate * (pi2s_tx->rfs)),
-				    pi2s_tx->bitspersample);
-	} else {
-		debug("%s: Unknown codec type %s\n", __func__, codectype);
-		return -1;
-	}
-
-	if (ret) {
-		debug("%s: Codec init failed\n", __func__);
-		return -1;
-	}
-
-	return 0;
-}
-
-int sound_init(const void *blob)
-{
-	int ret;
-	struct i2s_uc_priv *pi2s_tx = &g_i2stx_pri;
-
-	/* Get the I2S Values */
-	if (get_sound_i2s_values(pi2s_tx, blob) < 0) {
-		debug(" FDT I2S values failed\n");
-		return -1;
-	}
-
-	if (codec_init(blob, pi2s_tx) < 0) {
-		debug(" Codec init failed\n");
-		return -1;
-	}
-
-	ret = i2s_tx_init(pi2s_tx);
-	if (ret) {
-		debug("%s: Failed to init i2c transmit: ret=%d\n", __func__,
-		      ret);
-		return ret;
-	}
-
-
-	return ret;
-}
-
-int sound_play(uint32_t msec, uint32_t frequency)
-{
-	unsigned int *data;
-	unsigned long data_size;
-	unsigned int ret = 0;
-
-	/*Buffer length computation */
-	data_size = g_i2stx_pri.samplingrate * g_i2stx_pri.channels;
-	data_size *= (g_i2stx_pri.bitspersample / SOUND_BITS_IN_BYTE);
-	data = malloc(data_size);
-
-	if (data == NULL) {
-		debug("%s: malloc failed\n", __func__);
-		return -1;
-	}
-
-	sound_create_square_wave(g_i2stx_pri.samplingrate,
-				 (unsigned short *)data,
-				 data_size / sizeof(unsigned short),
-				 frequency);
-
-	while (msec >= 1000) {
-		ret = i2s_transfer_tx_data(&g_i2stx_pri, data,
-					   (data_size / sizeof(int)));
-		msec -= 1000;
-	}
-	if (msec) {
-		unsigned long size =
-			(data_size * msec) / (sizeof(int) * 1000);
-
-		ret = i2s_transfer_tx_data(&g_i2stx_pri, data, size);
-	}
-
-	free(data);
-
-	return ret;
-}
diff --git a/drivers/sound/wm8994.c b/drivers/sound/wm8994.c
index d2b22fb1d7f..8421909f369 100644
--- a/drivers/sound/wm8994.c
+++ b/drivers/sound/wm8994.c
@@ -40,7 +40,6 @@ struct wm8994_priv {
 	int mclk[WM8994_MAX_AIF];	/* master clock frequency in Hz */
 	int aifclk[WM8994_MAX_AIF];	/* audio interface clock in Hz   */
 	struct wm8994_fll_config fll[2]; /* fll config to configure fll */
-	int i2c_addr;
 	struct udevice *dev;
 };
 
@@ -82,12 +81,7 @@ static int wm8994_i2c_write(struct wm8994_priv *priv, unsigned int reg,
 	val[1] = (unsigned char)(data & 0xff);
 	debug("Write Addr : 0x%04X, Data :  0x%04X\n", reg, data);
 
-#ifdef CONFIG_DM_SOUND
-	debug("dev = %s\n", priv->dev->name);
 	return dm_i2c_write(priv->dev, reg, val, 2);
-#else
-	return i2c_write(priv->i2c_addr, reg, 2, val, 2);
-#endif
 }
 
 /*
@@ -105,11 +99,7 @@ static unsigned int wm8994_i2c_read(struct wm8994_priv *priv, unsigned int reg,
 	unsigned char val[2];
 	int ret;
 
-#ifdef CONFIG_DM_SOUND
 	ret = dm_i2c_read(priv->dev, reg, val, 1);
-#else
-	ret = i2c_read(priv->i2c_addr, reg, 2, val, 2);
-#endif
 	if (ret != 0) {
 		debug("%s: Error while reading register %#04x\n",
 		      __func__, reg);
@@ -820,61 +810,6 @@ err:
 	return -1;
 }
 
-#ifndef CONFIG_DM_SOUND
-/*
- * Gets fdt values for wm8994 config parameters
- *
- * @param pcodec_info	codec information structure
- * @param blob		FDT blob
- * @return		int value, 0 for success
- */
-static int get_codec_values(struct sound_codec_info *pcodec_info,
-			    const void *blob)
-{
-	int error = 0;
-	enum fdt_compat_id compat;
-	int node;
-	int parent;
-
-	/* Get the node from FDT for codec */
-	node = fdtdec_next_compatible(blob, 0, COMPAT_WOLFSON_WM8994_CODEC);
-	if (node <= 0) {
-		debug("EXYNOS_SOUND: No node for codec in device tree\n");
-		debug("node = %d\n", node);
-		return -1;
-	}
-
-	parent = fdt_parent_offset(blob, node);
-	if (parent < 0) {
-		debug("%s: Cannot find node parent\n", __func__);
-		return -1;
-	}
-
-	compat = fdtdec_lookup(blob, parent);
-	switch (compat) {
-	case COMPAT_SAMSUNG_S3C2440_I2C:
-		pcodec_info->i2c_bus = i2c_get_bus_num_fdt(parent);
-		error |= pcodec_info->i2c_bus;
-		debug("i2c bus = %d\n", pcodec_info->i2c_bus);
-		pcodec_info->i2c_dev_addr = fdtdec_get_int(blob, node,
-							"reg", 0);
-		error |= pcodec_info->i2c_dev_addr;
-		debug("i2c dev addr = %d\n", pcodec_info->i2c_dev_addr);
-		break;
-	default:
-		debug("%s: Unknown compat id %d\n", __func__, compat);
-		return -1;
-	}
-
-	if (error == -1) {
-		debug("fail to get wm8994 codec node properties\n");
-		return -1;
-	}
-
-	return 0;
-}
-#endif
-
 static int _wm8994_init(struct wm8994_priv *priv,
 			enum en_audio_interface aif_id, int sampling_rate,
 			int mclk_freq, int bits_per_sample,
@@ -906,36 +841,6 @@ static int _wm8994_init(struct wm8994_priv *priv,
 	return ret;
 }
 
-#ifndef CONFIG_DM_SOUND
-/* WM8994 Device Initialisation */
-int wm8994_init(const void *blob, enum en_audio_interface aif_id,
-		int sampling_rate, int mclk_freq, int bits_per_sample,
-		unsigned int channels)
-{
-	struct sound_codec_info pcodec_info;
-	struct wm8994_priv wm8994_info;
-	int ret;
-
-	/* Get the codec Values */
-	if (get_codec_values(&pcodec_info, blob) < 0) {
-		debug("FDT Codec values failed\n");
-		return -1;
-	}
-
-	/* shift the device address by 1 for 7 bit addressing */
-	wm8994_info.i2c_addr = pcodec_info.i2c_dev_addr;
-	i2c_set_bus_num(pcodec_info.i2c_bus);
-	ret = wm8994_device_init(&wm8994_info);
-	if (ret < 0) {
-		debug("%s: wm8994 codec chip init failed\n", __func__);
-		return ret;
-	}
-
-	return _wm8994_init(&wm8994_info, aif_id, sampling_rate, mclk_freq,
-			    bits_per_sample, channels);
-}
-#endif
-
 static int wm8994_set_params(struct udevice *dev, int interface, int rate,
 			     int mclk_freq, int bits_per_sample, uint channels)
 {
diff --git a/include/sound.h b/include/sound.h
index a8235a75b9c..494d0a448ed 100644
--- a/include/sound.h
+++ b/include/sound.h
@@ -52,7 +52,6 @@ void sound_create_square_wave(uint sample_rate, unsigned short *data, int size,
  */
 int sound_init(const void *blob);
 
-#ifdef CONFIG_DM_SOUND
 /*
  * The sound uclass brings together a data transport (currently only I2C) and a
  * codec (currently connected over I2C).
@@ -101,14 +100,4 @@ int sound_beep(struct udevice *dev, int msecs, int frequency_hz);
  */
 int sound_find_codec_i2s(struct udevice *dev);
 
-#else
-/*
- * plays the pcm data buffer in pcm_data.h through i2s1 to make the
- * sine wave sound
- *
- * @return	int 0 for success, -1 for error
- */
-int sound_play(uint32_t msec, uint32_t frequency);
-#endif /* CONFIG_DM_SOUND */
-
 #endif  /* __SOUND__H__ */
diff --git a/test/dm/Makefile b/test/dm/Makefile
index 0c1459cd4db..43c2e7535b1 100644
--- a/test/dm/Makefile
+++ b/test/dm/Makefile
@@ -13,7 +13,7 @@ obj-$(CONFIG_UT_DM) += test-uclass.o
 # subsystem you must add sandbox tests here.
 obj-$(CONFIG_UT_DM) += core.o
 ifneq ($(CONFIG_SANDBOX),)
-obj-$(CONFIG_DM_SOUND) += audio.o
+obj-$(CONFIG_SOUND) += audio.o
 obj-$(CONFIG_BLK) += blk.o
 obj-$(CONFIG_BOARD) += board.o
 obj-$(CONFIG_CLK) += clk.o
@@ -21,7 +21,7 @@ obj-$(CONFIG_DM_ETH) += eth.o
 obj-$(CONFIG_FIRMWARE) += firmware.o
 obj-$(CONFIG_DM_GPIO) += gpio.o
 obj-$(CONFIG_DM_I2C) += i2c.o
-obj-$(CONFIG_DM_SOUND) += i2s.o
+obj-$(CONFIG_SOUND) += i2s.o
 obj-$(CONFIG_LED) += led.o
 obj-$(CONFIG_DM_MAILBOX) += mailbox.o
 obj-$(CONFIG_DM_MMC) += mmc.o
@@ -54,7 +54,7 @@ obj-$(CONFIG_AXI) += axi.o
 obj-$(CONFIG_MISC) += misc.o
 obj-$(CONFIG_DM_SERIAL) += serial.o
 obj-$(CONFIG_CPU) += cpu.o
-obj-$(CONFIG_DM_SOUND) += sound.o
+obj-$(CONFIG_SOUND) += sound.o
 obj-$(CONFIG_TEE) += tee.o
 obj-$(CONFIG_VIRTIO_SANDBOX) += virtio.o
 endif
