From ee3f2c10d8adcd0cf2dae3cc329abb72480a58fb Mon Sep 17 00:00:00 2001
From: Victor Rodriguez <victor.rodriguez@sasken.com>
Date: Mon, 27 Sep 2010 17:44:43 -0500
Subject: [PATCH v1] davinci: AUDIO support for Omapl138-Hawkboard
This patch adds AUDIO support for the Hawkboard-L138 system
It is under the machine name "omapl138_hawkboard".
This system is based on the da850 davinci CPU architecture.
Signed-off-by: Victor Rodriguez <victor.rodriguez@sasken.com>
---
arch/arm/configs/da8xx_omapl_defconfig | 9 +++--
arch/arm/mach-davinci/board-omapl138-hawk.c | 52 +++++++++++++++++++++++++++
arch/arm/mach-davinci/da850.c | 2 +-
sound/soc/davinci/Kconfig | 4 +-
sound/soc/davinci/davinci-evm.c | 6 ++-
5 files changed, 64 insertions(+), 9 deletions(-)
@@ -88,10 +88,11 @@ CONFIG_FB_DA8XX=y
# CONFIG_VGA_CONSOLE is not set
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_LOGO=y
-CONFIG_SOUND=m
-CONFIG_SND=m
-CONFIG_SND_SOC=m
-CONFIG_SND_DAVINCI_SOC=m
+CONFIG_SOUND=y
+CONFIG_SND=y
+CONFIG_SND_SOC=y
+CONFIG_SND_DAVINCI_SOC=y
+CONFIG_SND_DA850_SOC_EVM=y
# CONFIG_HID_SUPPORT is not set
# CONFIG_USB_SUPPORT is not set
CONFIG_EXT2_FS=y
@@ -13,6 +13,7 @@
#include <linux/init.h>
#include <linux/console.h>
#include <linux/gpio.h>
+#include <linux/i2c.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
@@ -69,16 +70,67 @@ static int __init omapl138_hawk_config_emac(void)
}
device_initcall(omapl138_hawk_config_emac);
+static struct i2c_board_info __initdata omapl138_hawk_i2c_devices[] = {
+ {
+ I2C_BOARD_INFO("tlv320aic3x", 0x18),
+ },
+};
+
+static struct davinci_i2c_platform_data omapl138_hawk_i2c_0_pdata = {
+ .bus_freq = 100, /* kHz */
+ .bus_delay = 0, /* usec */
+};
+
static struct davinci_uart_config omapl138_hawk_uart_config __initdata = {
.enabled_uarts = 0x7,
};
+/* davinci da850 evm audio machine driver */
+static u8 da850_iis_serializer_direction[] = {
+ INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
+ INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
+ INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
+ INACTIVE_MODE, TX_MODE, RX_MODE, INACTIVE_MODE,
+};
+
+static struct snd_platform_data omapl138_hawk_snd_data = {
+ .tx_dma_offset = 0x2000,
+ .rx_dma_offset = 0x2000,
+ .op_mode = DAVINCI_MCASP_IIS_MODE,
+ .num_serializer = ARRAY_SIZE(da850_iis_serializer_direction),
+ .tdm_slots = 2,
+ .serial_dir = da850_iis_serializer_direction,
+ .asp_chan_q = EVENTQ_1,
+ .version = MCASP_VERSION_2,
+ .txnumevt = 1,
+ .rxnumevt = 1,
+};
+
static __init void omapl138_hawk_init(void)
{
int ret;
+ /* UART */
davinci_serial_init(&omapl138_hawk_uart_config);
+ /* I2C */
+ i2c_register_board_info(1, omapl138_hawk_i2c_devices,
+ ARRAY_SIZE(omapl138_hawk_i2c_devices));
+
+ ret = da8xx_register_i2c(0, &omapl138_hawk_i2c_0_pdata);
+ if (ret)
+ pr_warning("omapl138_hawk_init: "
+ "i2c0 registration failed: %d\n",
+ ret);
+ /* AUDIO*/
+ ret = davinci_cfg_reg_list(da850_mcasp_pins);
+ if (ret)
+ pr_warning("omapl138_hawk_init: "
+ "mcasp mux setup failed: %d\n",
+ ret);
+ da8xx_register_mcasp(0, &omapl138_hawk_snd_data);
+
+ /* WDT */
ret = da8xx_register_watchdog();
if (ret)
pr_warning("omapl138_hawk_init: "
@@ -591,7 +591,7 @@ const short da850_cpgmac_pins[] __initdata = {
const short da850_mcasp_pins[] __initdata = {
DA850_AHCLKX, DA850_ACLKX, DA850_AFSX,
DA850_AHCLKR, DA850_ACLKR, DA850_AFSR, DA850_AMUTE,
- DA850_AXR_11, DA850_AXR_12,
+ DA850_AXR_11, DA850_AXR_12, DA850_AXR_13, DA850_AXR_14,
-1
};
@@ -76,8 +76,8 @@ config SND_DA830_SOC_EVM
DA830/OMAP-L137 EVM
config SND_DA850_SOC_EVM
- tristate "SoC Audio support for DA850/OMAP-L138 EVM"
- depends on SND_DAVINCI_SOC && MACH_DAVINCI_DA850_EVM
+ tristate "SoC Audio support for DA850/OMAP-L138/AM18xx EVM / Hawkboard"
+ depends on SND_DAVINCI_SOC && (MACH_DAVINCI_DA850_EVM || MACH_OMAPL138_HAWKBOARD)
select SND_DAVINCI_SOC_MCASP
select SND_SOC_TLV320AIC3X
help
@@ -59,7 +59,8 @@ static int evm_hw_params(struct snd_pcm_substream *substream,
sysclk = 12288000;
else if (machine_is_davinci_da830_evm() ||
- machine_is_davinci_da850_evm())
+ machine_is_davinci_da850_evm() ||
+ machine_is_omapl138_hawkboard())
sysclk = 24576000;
else
@@ -311,7 +312,8 @@ static int __init evm_init(void)
} else if (machine_is_davinci_da830_evm()) {
evm_snd_dev_data = &da830_evm_snd_devdata;
index = 1;
- } else if (machine_is_davinci_da850_evm()) {
+ } else if (machine_is_davinci_da850_evm() ||
+ machine_is_omapl138_hawkboard()) {
evm_snd_dev_data = &da850_evm_snd_devdata;
index = 0;
} else
--
1.6.0.5