@@ -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,6 +70,87 @@ 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 */
+};
+
+/* 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,
+};
+/*
+ * The following EDMA channels/slots are not being used by drivers (for
+ * example: Timer, GPIO, UART events etc) on da850/omap-l138 EVM, hence
+ * they are being reserved for codecs on the DSP side.
+ */
+static const s16 da850_dma0_rsv_chans[][2] = {
+ /* (offset, number) */
+ { 8, 6},
+ {24, 4},
+ {30, 2},
+ {-1, -1}
+};
+
+static const s16 da850_dma0_rsv_slots[][2] = {
+ /* (offset, number) */
+ { 8, 6},
+ {24, 4},
+ {30, 50},
+ {-1, -1}
+};
+
+static const s16 da850_dma1_rsv_chans[][2] = {
+ /* (offset, number) */
+ { 0, 28},
+ {30, 2},
+ {-1, -1}
+};
+
+static const s16 da850_dma1_rsv_slots[][2] = {
+ /* (offset, number) */
+ { 0, 28},
+ {30, 90},
+ {-1, -1}
+};
+
+static struct edma_rsv_info da850_edma_cc0_rsv = {
+ .rsv_chans = da850_dma0_rsv_chans,
+ .rsv_slots = da850_dma0_rsv_slots,
+};
+
+static struct edma_rsv_info da850_edma_cc1_rsv = {
+ .rsv_chans = da850_dma1_rsv_chans,
+ .rsv_slots = da850_dma1_rsv_slots,
+};
+
+static struct edma_rsv_info *da850_edma_rsv[2] = {
+ &da850_edma_cc0_rsv,
+ &da850_edma_cc1_rsv,
+};
+
static struct davinci_uart_config omapl138_hawk_uart_config __initdata = {
.enabled_uarts = 0x7,
};
@@ -79,6 +161,29 @@ static __init void omapl138_hawk_init(void)
davinci_serial_init(&omapl138_hawk_uart_config);
+
+ ret = da850_register_edma(da850_edma_rsv);
+ if (ret)
+ pr_warning("hawk_init: edma registration failed: %d\n",
+ ret);
+
+ 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);
+
+ 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);
+
+
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 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