From 8b4873639bb66d8269f0767ddfbb4c8a7f8082f7 Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Thu, 12 Nov 2009 14:02:13 +0100 Subject: [PATCH 25/28] pcm037: Add sound support Signed-off-by: Sascha Hauer --- arch/arm/mach-mx3/pcm037.c | 71 ++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 71 insertions(+), 0 deletions(-) diff --git a/arch/arm/mach-mx3/pcm037.c b/arch/arm/mach-mx3/pcm037.c index 840cfda..8ef6c79 100644 --- a/arch/arm/mach-mx3/pcm037.c +++ b/arch/arm/mach-mx3/pcm037.c @@ -32,6 +32,7 @@ #include #include #include +#include #include @@ -50,6 +51,9 @@ #include #include #include +#include +#include +#include #include "devices.h" #include "pcm037.h" @@ -123,6 +127,8 @@ static unsigned int pcm037_pins[] = { MX31_PIN_CSPI3_SPI_RDY__CTS3, /* LAN9217 irq pin */ IOMUX_MODE(MX31_PIN_GPIO3_1, IOMUX_CONFIG_GPIO), + /* MC13783 IRQ pim */ + IOMUX_MODE(MX31_PIN_GPIO3_0, IOMUX_CONFIG_GPIO), /* Onewire */ MX31_PIN_BATT_LINE__OWIRE, /* Framebuffer */ @@ -169,6 +175,15 @@ static unsigned int pcm037_pins[] = { MX31_PIN_CSI_MCLK__CSI_MCLK, MX31_PIN_CSI_PIXCLK__CSI_PIXCLK, MX31_PIN_CSI_VSYNC__CSI_VSYNC, + /* SSI */ + MX31_PIN_STXD4__STXD4, + MX31_PIN_SRXD4__SRXD4, + MX31_PIN_SCK4__SCK4, + MX31_PIN_SFS4__SFS4, + MX31_PIN_STXD5__STXD5, + MX31_PIN_SRXD5__SRXD5, + MX31_PIN_SCK5__SCK5, + MX31_PIN_SFS5__SFS5, }; static struct physmap_flash_data pcm037_flash_data = { @@ -406,6 +421,31 @@ static void pcm970_sdhc1_exit(struct device *dev, void *data) gpio_free(SDHC1_GPIO_WP); } +#ifdef CONFIG_SPI +static struct mc13783_platform_data pcm037_pmic = { + .flags = MC13783_USE_ADC | MC13783_USE_TOUCHSCREEN | + MC13783_USE_CODEC, +}; + +static unsigned int pcm037_spi_cs[] = {MXC_SPI_CS(0), }; + +static struct spi_imx_master pcm037_spi_0_data = { + .chipselect = pcm037_spi_cs, + .num_chipselect = ARRAY_SIZE(pcm037_spi_cs), +}; + +static struct spi_board_info pcm037_spi_board_info[] __initdata = { + { + .modalias = "mc13783", + .irq = IOMUX_TO_IRQ(MX31_PIN_GPIO3_0), + .max_speed_hz = 3000000, + .bus_num = 0, + .platform_data = &pcm037_pmic, + .chip_select = 0, + } +}; +#endif /* CONFIG_SPI */ + static struct imxmmc_platform_data sdhc_pdata = { #ifdef PCM970_SDHC_RW_SWITCH .get_ro = pcm970_sdhc1_get_ro, @@ -515,6 +555,9 @@ static struct mx3fb_platform_data mx3fb_pdata = { .num_modes = ARRAY_SIZE(fb_modedb), }; +struct imx_ssi_platform_data pcm037_ssi_pdata = { +}; + /* * Board specific initialization. */ @@ -522,6 +565,26 @@ static void __init mxc_board_init(void) { int ret; + mxc_audmux_v2_configure_port(MX31_AUDMUX_PORT1_SSI0, + MXC_AUDMUX_V2_PTCR_TFSDIR | + MXC_AUDMUX_V2_PTCR_TCLKDIR | + MXC_AUDMUX_V2_PTCR_TFSEL(MX31_AUDMUX_PORT4_SSI_PINS_4) | + MXC_AUDMUX_V2_PTCR_TCSEL(MX31_AUDMUX_PORT4_SSI_PINS_4) | + MXC_AUDMUX_V2_PTCR_RFSDIR | + MXC_AUDMUX_V2_PTCR_RCLKDIR | + MXC_AUDMUX_V2_PTCR_RFSEL(MX31_AUDMUX_PORT5_SSI_PINS_5) | + MXC_AUDMUX_V2_PTCR_RCSEL(MX31_AUDMUX_PORT5_SSI_PINS_5), + MXC_AUDMUX_V2_PDCR_RXDSEL(MX31_AUDMUX_PORT5_SSI_PINS_5)); + mxc_audmux_v2_configure_port(MX31_AUDMUX_PORT5_SSI_PINS_5, + 0, + MXC_AUDMUX_V2_PDCR_RXDSEL(MX31_AUDMUX_PORT1_SSI0)); + mxc_audmux_v2_configure_port(MX31_AUDMUX_PORT4_SSI_PINS_4, + MXC_AUDMUX_V2_PTCR_TFSEL(MX31_AUDMUX_PORT1_SSI0) | + MXC_AUDMUX_V2_PTCR_TCSEL(MX31_AUDMUX_PORT1_SSI0) | + MXC_AUDMUX_V2_PTCR_RFSEL(MX31_AUDMUX_PORT1_SSI0) | + MXC_AUDMUX_V2_PTCR_RCSEL(MX31_AUDMUX_PORT1_SSI0), + 0); + mxc_iomux_setup_multiple_pins(pcm037_pins, ARRAY_SIZE(pcm037_pins), "pcm037"); @@ -575,6 +638,14 @@ static void __init mxc_board_init(void) if (!pcm037_camera_alloc_dma(4 * 1024 * 1024)) mxc_register_device(&mx3_camera, &camera_pdata); + +#ifdef CONFIG_SPI + mxc_register_device(&imx_spi_device0, &pcm037_spi_0_data); + + spi_register_board_info(pcm037_spi_board_info, + ARRAY_SIZE(pcm037_spi_board_info)); +#endif + mxc_register_device(&imx_ssi_device0, &pcm037_ssi_pdata); } static void __init pcm037_timer_init(void) -- 1.6.5.2