Commit f57ec639 authored by Kevin Hilman's avatar Kevin Hilman

Merge branch 'davinci-next'

Conflicts:
	arch/arm/configs/davinci_all_defconfig
	arch/arm/mach-davinci/board-dm365-evm.c
parents 6d92e53c f1551158
...@@ -5315,6 +5315,12 @@ F: arch/arm/mach-s3c2410/ ...@@ -5315,6 +5315,12 @@ F: arch/arm/mach-s3c2410/
F: drivers/*/*s3c2410* F: drivers/*/*s3c2410*
F: drivers/*/*/*s3c2410* F: drivers/*/*/*s3c2410*
TI DAVINCI MACHINE SUPPORT
P: Kevin Hilman
M: davinci-linux-open-source@linux.davincidsp.com
S: Supported
F: arch/arm/mach-davinci
SIS 190 ETHERNET DRIVER SIS 190 ETHERNET DRIVER
P: Francois Romieu P: Francois Romieu
M: romieu@fr.zoreil.com M: romieu@fr.zoreil.com
......
This diff is collapsed.
...@@ -60,6 +60,7 @@ config MACH_SFFSDR ...@@ -60,6 +60,7 @@ config MACH_SFFSDR
config MACH_DAVINCI_DM355_EVM config MACH_DAVINCI_DM355_EVM
bool "TI DM355 EVM" bool "TI DM355 EVM"
default ARCH_DAVINCI_DM355
depends on ARCH_DAVINCI_DM355 depends on ARCH_DAVINCI_DM355
help help
Configure this option to specify the whether the board used Configure this option to specify the whether the board used
...@@ -74,6 +75,7 @@ config MACH_DM355_LEOPARD ...@@ -74,6 +75,7 @@ config MACH_DM355_LEOPARD
config MACH_DAVINCI_DM6467_EVM config MACH_DAVINCI_DM6467_EVM
bool "TI DM6467 EVM" bool "TI DM6467 EVM"
default ARCH_DAVINCI_DM646x
depends on ARCH_DAVINCI_DM646x depends on ARCH_DAVINCI_DM646x
help help
Configure this option to specify the whether the board used Configure this option to specify the whether the board used
......
...@@ -118,6 +118,10 @@ static struct davinci_i2c_platform_data i2c_pdata = { ...@@ -118,6 +118,10 @@ static struct davinci_i2c_platform_data i2c_pdata = {
.bus_delay = 0 /* usec */, .bus_delay = 0 /* usec */,
}; };
static struct snd_platform_data dm355_evm_snd_data = {
.clk_name = "asp1",
};
static int dm355evm_mmc_gpios = -EINVAL; static int dm355evm_mmc_gpios = -EINVAL;
static void dm355evm_mmcsd_gpios(unsigned gpio) static void dm355evm_mmcsd_gpios(unsigned gpio)
...@@ -280,6 +284,9 @@ static __init void dm355_evm_init(void) ...@@ -280,6 +284,9 @@ static __init void dm355_evm_init(void)
dm355_init_spi0(BIT(0), dm355_evm_spi_info, dm355_init_spi0(BIT(0), dm355_evm_spi_info,
ARRAY_SIZE(dm355_evm_spi_info)); ARRAY_SIZE(dm355_evm_spi_info));
/* DM335 EVM uses ASP1; line-out is a stereo mini-jack */
dm355_init_asp1(ASP1_TX_EVT_EN | ASP1_RX_EVT_EN, &dm355_evm_snd_data);
} }
static __init void dm355_evm_irq_init(void) static __init void dm355_evm_irq_init(void)
......
...@@ -226,6 +226,10 @@ static struct platform_device ide_dev = { ...@@ -226,6 +226,10 @@ static struct platform_device ide_dev = {
}, },
}; };
static struct snd_platform_data dm644x_evm_snd_data = {
.clk_name = "asp0",
};
/*----------------------------------------------------------------------*/ /*----------------------------------------------------------------------*/
/* /*
...@@ -667,6 +671,7 @@ static __init void davinci_evm_init(void) ...@@ -667,6 +671,7 @@ static __init void davinci_evm_init(void)
davinci_setup_mmc(0, &dm6446evm_mmc_config); davinci_setup_mmc(0, &dm6446evm_mmc_config);
davinci_serial_init(&uart_config); davinci_serial_init(&uart_config);
dm644x_init_asp(&dm644x_evm_snd_data);
soc_info->emac_pdata->phy_mask = DM644X_EVM_PHY_MASK; soc_info->emac_pdata->phy_mask = DM644X_EVM_PHY_MASK;
soc_info->emac_pdata->mdio_max_freq = DM644X_EVM_MDIO_FREQUENCY; soc_info->emac_pdata->mdio_max_freq = DM644X_EVM_MDIO_FREQUENCY;
......
...@@ -207,6 +207,37 @@ static struct at24_platform_data eeprom_info = { ...@@ -207,6 +207,37 @@ static struct at24_platform_data eeprom_info = {
.context = (void *)0x7f00, .context = (void *)0x7f00,
}; };
static u8 dm646x_iis_serializer_direction[] = {
TX_MODE, RX_MODE, INACTIVE_MODE, INACTIVE_MODE,
};
static u8 dm646x_dit_serializer_direction[] = {
TX_MODE,
};
static struct snd_platform_data dm646x_evm_snd_data[] = {
{
.clk_name = "mcasp0",
.tx_dma_offset = 0x400,
.rx_dma_offset = 0x400,
.op_mode = DAVINCI_MCASP_IIS_MODE,
.num_serializer = ARRAY_SIZE(dm646x_iis_serializer_direction),
.tdm_slots = 2,
.serial_dir = dm646x_iis_serializer_direction,
.eventq_no = EVENTQ_0,
},
{
.clk_name = "mcasp1",
.tx_dma_offset = 0x400,
.rx_dma_offset = 0,
.op_mode = DAVINCI_MCASP_DIT_MODE,
.num_serializer = ARRAY_SIZE(dm646x_dit_serializer_direction),
.tdm_slots = 32,
.serial_dir = dm646x_dit_serializer_direction,
.eventq_no = EVENTQ_0,
},
};
static struct i2c_board_info __initdata i2c_info[] = { static struct i2c_board_info __initdata i2c_info[] = {
{ {
I2C_BOARD_INFO("24c256", 0x50), I2C_BOARD_INFO("24c256", 0x50),
...@@ -240,6 +271,8 @@ static __init void evm_init(void) ...@@ -240,6 +271,8 @@ static __init void evm_init(void)
evm_init_i2c(); evm_init_i2c();
davinci_serial_init(&uart_config); davinci_serial_init(&uart_config);
dm646x_init_mcasp0(&dm646x_evm_snd_data[0]);
dm646x_init_mcasp1(&dm646x_evm_snd_data[1]);
soc_info->emac_pdata->phy_mask = DM646X_EVM_PHY_MASK; soc_info->emac_pdata->phy_mask = DM646X_EVM_PHY_MASK;
soc_info->emac_pdata->mdio_max_freq = DM646X_EVM_MDIO_FREQUENCY; soc_info->emac_pdata->mdio_max_freq = DM646X_EVM_MDIO_FREQUENCY;
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include <mach/time.h> #include <mach/time.h>
#include <mach/serial.h> #include <mach/serial.h>
#include <mach/common.h> #include <mach/common.h>
#include <mach/asp.h>
#include "clock.h" #include "clock.h"
#include "mux.h" #include "mux.h"
...@@ -360,8 +361,8 @@ static struct davinci_clk dm355_clks[] = { ...@@ -360,8 +361,8 @@ static struct davinci_clk dm355_clks[] = {
CLK(NULL, "uart1", &uart1_clk), CLK(NULL, "uart1", &uart1_clk),
CLK(NULL, "uart2", &uart2_clk), CLK(NULL, "uart2", &uart2_clk),
CLK("i2c_davinci.1", NULL, &i2c_clk), CLK("i2c_davinci.1", NULL, &i2c_clk),
CLK("soc-audio.0", NULL, &asp0_clk), CLK(NULL, "asp0", &asp0_clk),
CLK("soc-audio.1", NULL, &asp1_clk), CLK(NULL, "asp1", &asp1_clk),
CLK("davinci_mmc.0", NULL, &mmcsd0_clk), CLK("davinci_mmc.0", NULL, &mmcsd0_clk),
CLK("davinci_mmc.1", NULL, &mmcsd1_clk), CLK("davinci_mmc.1", NULL, &mmcsd1_clk),
CLK(NULL, "spi0", &spi0_clk), CLK(NULL, "spi0", &spi0_clk),
...@@ -623,6 +624,31 @@ static struct platform_device dm355_edma_device = { ...@@ -623,6 +624,31 @@ static struct platform_device dm355_edma_device = {
.resource = edma_resources, .resource = edma_resources,
}; };
static struct resource dm355_asp1_resources[] = {
{
.start = DAVINCI_ASP1_BASE,
.end = DAVINCI_ASP1_BASE + SZ_8K - 1,
.flags = IORESOURCE_MEM,
},
{
.start = DAVINCI_DMA_ASP1_TX,
.end = DAVINCI_DMA_ASP1_TX,
.flags = IORESOURCE_DMA,
},
{
.start = DAVINCI_DMA_ASP1_RX,
.end = DAVINCI_DMA_ASP1_RX,
.flags = IORESOURCE_DMA,
},
};
static struct platform_device dm355_asp1_device = {
.name = "davinci-asp",
.id = -1,
.num_resources = ARRAY_SIZE(dm355_asp1_resources),
.resource = dm355_asp1_resources,
};
/*----------------------------------------------------------------------*/ /*----------------------------------------------------------------------*/
static struct map_desc dm355_io_desc[] = { static struct map_desc dm355_io_desc[] = {
...@@ -731,6 +757,19 @@ static struct davinci_soc_info davinci_soc_info_dm355 = { ...@@ -731,6 +757,19 @@ static struct davinci_soc_info davinci_soc_info_dm355 = {
.sram_len = SZ_32K, .sram_len = SZ_32K,
}; };
void __init dm355_init_asp1(u32 evt_enable, struct snd_platform_data *pdata)
{
/* we don't use ASP1 IRQs, or we'd need to mux them ... */
if (evt_enable & ASP1_TX_EVT_EN)
davinci_cfg_reg(DM355_EVT8_ASP1_TX);
if (evt_enable & ASP1_RX_EVT_EN)
davinci_cfg_reg(DM355_EVT9_ASP1_RX);
dm355_asp1_device.dev.platform_data = pdata;
platform_device_register(&dm355_asp1_device);
}
void __init dm355_init(void) void __init dm355_init(void)
{ {
davinci_common_init(&davinci_soc_info_dm355); davinci_common_init(&davinci_soc_info_dm355);
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include <mach/time.h> #include <mach/time.h>
#include <mach/serial.h> #include <mach/serial.h>
#include <mach/common.h> #include <mach/common.h>
#include <mach/asp.h>
#include "clock.h" #include "clock.h"
#include "mux.h" #include "mux.h"
...@@ -303,7 +304,7 @@ struct davinci_clk dm644x_clks[] = { ...@@ -303,7 +304,7 @@ struct davinci_clk dm644x_clks[] = {
CLK("davinci_emac.1", NULL, &emac_clk), CLK("davinci_emac.1", NULL, &emac_clk),
CLK("i2c_davinci.1", NULL, &i2c_clk), CLK("i2c_davinci.1", NULL, &i2c_clk),
CLK("palm_bk3710", NULL, &ide_clk), CLK("palm_bk3710", NULL, &ide_clk),
CLK("soc-audio.0", NULL, &asp_clk), CLK(NULL, "asp0", &asp_clk),
CLK("davinci_mmc.0", NULL, &mmcsd_clk), CLK("davinci_mmc.0", NULL, &mmcsd_clk),
CLK(NULL, "spi", &spi_clk), CLK(NULL, "spi", &spi_clk),
CLK(NULL, "gpio", &gpio_clk), CLK(NULL, "gpio", &gpio_clk),
...@@ -549,6 +550,32 @@ static struct platform_device dm644x_edma_device = { ...@@ -549,6 +550,32 @@ static struct platform_device dm644x_edma_device = {
.resource = edma_resources, .resource = edma_resources,
}; };
/* DM6446 EVM uses ASP0; line-out is a pair of RCA jacks */
static struct resource dm644x_asp_resources[] = {
{
.start = DAVINCI_ASP0_BASE,
.end = DAVINCI_ASP0_BASE + SZ_8K - 1,
.flags = IORESOURCE_MEM,
},
{
.start = DAVINCI_DMA_ASP0_TX,
.end = DAVINCI_DMA_ASP0_TX,
.flags = IORESOURCE_DMA,
},
{
.start = DAVINCI_DMA_ASP0_RX,
.end = DAVINCI_DMA_ASP0_RX,
.flags = IORESOURCE_DMA,
},
};
static struct platform_device dm644x_asp_device = {
.name = "davinci-asp",
.id = -1,
.num_resources = ARRAY_SIZE(dm644x_asp_resources),
.resource = dm644x_asp_resources,
};
/*----------------------------------------------------------------------*/ /*----------------------------------------------------------------------*/
static struct map_desc dm644x_io_desc[] = { static struct map_desc dm644x_io_desc[] = {
...@@ -665,6 +692,13 @@ static struct davinci_soc_info davinci_soc_info_dm644x = { ...@@ -665,6 +692,13 @@ static struct davinci_soc_info davinci_soc_info_dm644x = {
.sram_len = SZ_16K, .sram_len = SZ_16K,
}; };
void __init dm644x_init_asp(struct snd_platform_data *pdata)
{
davinci_cfg_reg(DM644X_MCBSP);
dm644x_asp_device.dev.platform_data = pdata;
platform_device_register(&dm644x_asp_device);
}
void __init dm644x_init(void) void __init dm644x_init(void)
{ {
davinci_common_init(&davinci_soc_info_dm644x); davinci_common_init(&davinci_soc_info_dm644x);
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include <mach/time.h> #include <mach/time.h>
#include <mach/serial.h> #include <mach/serial.h>
#include <mach/common.h> #include <mach/common.h>
#include <mach/asp.h>
#include "clock.h" #include "clock.h"
#include "mux.h" #include "mux.h"
...@@ -587,6 +588,66 @@ static struct platform_device dm646x_edma_device = { ...@@ -587,6 +588,66 @@ static struct platform_device dm646x_edma_device = {
.resource = edma_resources, .resource = edma_resources,
}; };
static struct resource dm646x_mcasp0_resources[] = {
{
.name = "mcasp0",
.start = DAVINCI_DM646X_MCASP0_REG_BASE,
.end = DAVINCI_DM646X_MCASP0_REG_BASE + (SZ_1K << 1) - 1,
.flags = IORESOURCE_MEM,
},
/* first TX, then RX */
{
.start = DAVINCI_DM646X_DMA_MCASP0_AXEVT0,
.end = DAVINCI_DM646X_DMA_MCASP0_AXEVT0,
.flags = IORESOURCE_DMA,
},
{
.start = DAVINCI_DM646X_DMA_MCASP0_AREVT0,
.end = DAVINCI_DM646X_DMA_MCASP0_AREVT0,
.flags = IORESOURCE_DMA,
},
};
static struct resource dm646x_mcasp1_resources[] = {
{
.name = "mcasp1",
.start = DAVINCI_DM646X_MCASP1_REG_BASE,
.end = DAVINCI_DM646X_MCASP1_REG_BASE + (SZ_1K << 1) - 1,
.flags = IORESOURCE_MEM,
},
/* DIT mode, only TX event */
{
.start = DAVINCI_DM646X_DMA_MCASP1_AXEVT1,
.end = DAVINCI_DM646X_DMA_MCASP1_AXEVT1,
.flags = IORESOURCE_DMA,
},
/* DIT mode, dummy entry */
{
.start = -1,
.end = -1,
.flags = IORESOURCE_DMA,
},
};
static struct platform_device dm646x_mcasp0_device = {
.name = "davinci-mcasp",
.id = 0,
.num_resources = ARRAY_SIZE(dm646x_mcasp0_resources),
.resource = dm646x_mcasp0_resources,
};
static struct platform_device dm646x_mcasp1_device = {
.name = "davinci-mcasp",
.id = 1,
.num_resources = ARRAY_SIZE(dm646x_mcasp1_resources),
.resource = dm646x_mcasp1_resources,
};
static struct platform_device dm646x_dit_device = {
.name = "spdif-dit",
.id = -1,
};
/*----------------------------------------------------------------------*/ /*----------------------------------------------------------------------*/
static struct map_desc dm646x_io_desc[] = { static struct map_desc dm646x_io_desc[] = {
...@@ -696,6 +757,19 @@ static struct davinci_soc_info davinci_soc_info_dm646x = { ...@@ -696,6 +757,19 @@ static struct davinci_soc_info davinci_soc_info_dm646x = {
.sram_len = SZ_32K, .sram_len = SZ_32K,
}; };
void __init dm646x_init_mcasp0(struct snd_platform_data *pdata)
{
dm646x_mcasp0_device.dev.platform_data = pdata;
platform_device_register(&dm646x_mcasp0_device);
}
void __init dm646x_init_mcasp1(struct snd_platform_data *pdata)
{
dm646x_mcasp1_device.dev.platform_data = pdata;
platform_device_register(&dm646x_mcasp1_device);
platform_device_register(&dm646x_dit_device);
}
void __init dm646x_init(void) void __init dm646x_init(void)
{ {
davinci_common_init(&davinci_soc_info_dm646x); davinci_common_init(&davinci_soc_info_dm646x);
......
...@@ -5,21 +5,52 @@ ...@@ -5,21 +5,52 @@
#define __ASM_ARCH_DAVINCI_ASP_H #define __ASM_ARCH_DAVINCI_ASP_H
#include <mach/irqs.h> #include <mach/irqs.h>
#include <mach/edma.h>
/* Bases of register banks */ /* Bases of dm644x and dm355 register banks */
#define DAVINCI_ASP0_BASE 0x01E02000 #define DAVINCI_ASP0_BASE 0x01E02000
#define DAVINCI_ASP1_BASE 0x01E04000 #define DAVINCI_ASP1_BASE 0x01E04000
/* EDMA channels */ /* Bases of dm646x register banks */
#define DAVINCI_DM646X_MCASP0_REG_BASE 0x01D01000
#define DAVINCI_DM646X_MCASP1_REG_BASE 0x01D01800
/* EDMA channels of dm644x and dm355 */
#define DAVINCI_DMA_ASP0_TX 2 #define DAVINCI_DMA_ASP0_TX 2
#define DAVINCI_DMA_ASP0_RX 3 #define DAVINCI_DMA_ASP0_RX 3
#define DAVINCI_DMA_ASP1_TX 8 #define DAVINCI_DMA_ASP1_TX 8
#define DAVINCI_DMA_ASP1_RX 9 #define DAVINCI_DMA_ASP1_RX 9
/* EDMA channels of dm646x */
#define DAVINCI_DM646X_DMA_MCASP0_AXEVT0 6
#define DAVINCI_DM646X_DMA_MCASP0_AREVT0 9
#define DAVINCI_DM646X_DMA_MCASP1_AXEVT1 12
/* Interrupts */ /* Interrupts */
#define DAVINCI_ASP0_RX_INT IRQ_MBRINT #define DAVINCI_ASP0_RX_INT IRQ_MBRINT
#define DAVINCI_ASP0_TX_INT IRQ_MBXINT #define DAVINCI_ASP0_TX_INT IRQ_MBXINT
#define DAVINCI_ASP1_RX_INT IRQ_MBRINT #define DAVINCI_ASP1_RX_INT IRQ_MBRINT
#define DAVINCI_ASP1_TX_INT IRQ_MBXINT #define DAVINCI_ASP1_TX_INT IRQ_MBXINT
struct snd_platform_data {
char *clk_name;
u32 tx_dma_offset;
u32 rx_dma_offset;
enum dma_event_q eventq_no; /* event queue number */
unsigned int codec_fmt;
/* McASP specific fields */
int tdm_slots;
u8 op_mode;
u8 num_serializer;
u8 *serial_dir;
};
#define INACTIVE_MODE 0
#define TX_MODE 1
#define RX_MODE 2
#define DAVINCI_MCASP_IIS_MODE 0
#define DAVINCI_MCASP_DIT_MODE 1
#endif /* __ASM_ARCH_DAVINCI_ASP_H */ #endif /* __ASM_ARCH_DAVINCI_ASP_H */
...@@ -12,11 +12,16 @@ ...@@ -12,11 +12,16 @@
#define __ASM_ARCH_DM355_H #define __ASM_ARCH_DM355_H
#include <mach/hardware.h> #include <mach/hardware.h>
#include <mach/asp.h>
#define ASP1_TX_EVT_EN 1
#define ASP1_RX_EVT_EN 2
struct spi_board_info; struct spi_board_info;
void __init dm355_init(void); void __init dm355_init(void);
void dm355_init_spi0(unsigned chipselect_mask, void dm355_init_spi0(unsigned chipselect_mask,
struct spi_board_info *info, unsigned len); struct spi_board_info *info, unsigned len);
void __init dm355_init_asp1(u32 evt_enable, struct snd_platform_data *pdata);
#endif /* __ASM_ARCH_DM355_H */ #endif /* __ASM_ARCH_DM355_H */
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include <mach/emac.h> #include <mach/emac.h>
#include <mach/asp.h>
#define DM644X_EMAC_BASE (0x01C80000) #define DM644X_EMAC_BASE (0x01C80000)
#define DM644X_EMAC_CNTRL_OFFSET (0x0000) #define DM644X_EMAC_CNTRL_OFFSET (0x0000)
...@@ -34,5 +35,6 @@ ...@@ -34,5 +35,6 @@
#define DM644X_EMAC_CNTRL_RAM_SIZE (0x2000) #define DM644X_EMAC_CNTRL_RAM_SIZE (0x2000)
void __init dm644x_init(void); void __init dm644x_init(void);
void __init dm644x_init_asp(struct snd_platform_data *pdata);
#endif /* __ASM_ARCH_DM644X_H */ #endif /* __ASM_ARCH_DM644X_H */
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include <mach/hardware.h> #include <mach/hardware.h>
#include <mach/emac.h> #include <mach/emac.h>
#include <mach/asp.h>
#define DM646X_EMAC_BASE (0x01C80000) #define DM646X_EMAC_BASE (0x01C80000)
#define DM646X_EMAC_CNTRL_OFFSET (0x0000) #define DM646X_EMAC_CNTRL_OFFSET (0x0000)
...@@ -22,5 +23,7 @@ ...@@ -22,5 +23,7 @@
#define DM646X_EMAC_CNTRL_RAM_SIZE (0x2000) #define DM646X_EMAC_CNTRL_RAM_SIZE (0x2000)
void __init dm646x_init(void); void __init dm646x_init(void);
void __init dm646x_init_mcasp0(struct snd_platform_data *pdata);
void __init dm646x_init_mcasp1(struct snd_platform_data *pdata);
#endif /* __ASM_ARCH_DM646X_H */ #endif /* __ASM_ARCH_DM646X_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment