summaryrefslogtreecommitdiff
path: root/drivers/sound
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2018-12-10 10:37:47 -0700
committerSimon Glass <sjg@chromium.org>2018-12-13 16:36:41 -0700
commitf2b25c9bf8212139f43ded090c78d604babc4337 (patch)
tree8da5a8bcb40cf982708cfb9af886f94c9f6364c1 /drivers/sound
parent1e224fef9446e8c0cde57636dd8a36d0ebc85437 (diff)
downloadu-boot-f2b25c9bf8212139f43ded090c78d604babc4337.tar.gz
dm: sound: Complete migration to driver model
All users of sound are converted to use driver model. Drop the old code and the CONFIG_DM_SOUND option. Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'drivers/sound')
-rw-r--r--drivers/sound/Kconfig6
-rw-r--r--drivers/sound/Makefile10
-rw-r--r--drivers/sound/max98095.c78
-rw-r--r--drivers/sound/sandbox.c19
-rw-r--r--drivers/sound/sound-i2s.c206
-rw-r--r--drivers/sound/wm8994.c95
6 files changed, 4 insertions, 410 deletions
diff --git a/drivers/sound/Kconfig b/drivers/sound/Kconfig
index 18d7ca1dcb..c0d97cca33 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 937df152fe..1de4346ec7 100644
--- a/drivers/sound/Makefile
+++ b/drivers/sound/Makefile
@@ -4,16 +4,12 @@
# 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_MAX98090) += max98090.o maxim_codec.o
obj-$(CONFIG_SOUND_MAX98095) += max98095.o maxim_codec.o
diff --git a/drivers/sound/max98095.c b/drivers/sound/max98095.c
index e9bf64f82f..93be50c34a 100644
--- a/drivers/sound/max98095.c
+++ b/drivers/sound/max98095.c
@@ -432,84 +432,6 @@ static int max98095_do_init(struct maxim_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 83b3295f0d..089d830972 100644
--- a/drivers/sound/sandbox.c
+++ b/drivers/sound/sandbox.c
@@ -8,7 +8,6 @@
#include <dm.h>
#include <i2s.h>
#include <sound.h>
-#include <asm/sound.h>
#include <asm/sdl.h>
struct sandbox_codec_priv {
@@ -28,22 +27,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();
-}
-
void sandbox_get_codec_params(struct udevice *dev, int *interfacep, int *ratep,
int *mclk_freqp, int *bits_per_samplep,
uint *channelsp)
@@ -102,7 +85,7 @@ static int sandbox_i2s_tx_data(struct udevice *dev, void *data,
for (i = 0; i < data_size; i++)
priv->sum += ((uint8_t *)data)[i];
- return 0;
+ return sandbox_sdl_sound_play(data, data_size);
}
static int sandbox_i2s_probe(struct udevice *dev)
diff --git a/drivers/sound/sound-i2s.c b/drivers/sound/sound-i2s.c
deleted file mode 100644
index a2fc78154f..0000000000
--- 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 d731a0dd86..b290c4e879 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);
@@ -819,61 +809,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,
@@ -905,36 +840,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)
{