[PATCH 12/12] pcm037: Add sound support

Sascha Hauer s.hauer at pengutronix.de
Thu Nov 19 10:48:26 EST 2009


Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
---
 arch/arm/mach-mx3/pcm037.c |   72 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 72 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-mx3/pcm037.c b/arch/arm/mach-mx3/pcm037.c
index 6cbaabe..15584b5 100644
--- a/arch/arm/mach-mx3/pcm037.c
+++ b/arch/arm/mach-mx3/pcm037.c
@@ -33,6 +33,7 @@
 #include <linux/irq.h>
 #include <linux/fsl_devices.h>
 #include <linux/can/platform/sja1000.h>
+#include <linux/mfd/mc13783.h>
 
 #include <media/soc_camera.h>
 
@@ -51,6 +52,9 @@
 #include <mach/mx3_camera.h>
 #include <mach/mx3fb.h>
 #include <mach/mxc_nand.h>
+#include <mach/spi.h>
+#include <mach/audmux.h>
+#include <mach/ssi.h>
 
 #include "devices.h"
 #include "pcm037.h"
@@ -124,6 +128,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 */
@@ -172,6 +178,15 @@ static unsigned int pcm037_pins[] = {
 	MX31_PIN_CSI_VSYNC__CSI_VSYNC,
 	/* GPIO */
 	IOMUX_MODE(MX31_PIN_ATA_DMACK, IOMUX_CONFIG_GPIO),
+	/* 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 = {
@@ -407,6 +422,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,
@@ -543,6 +583,10 @@ static struct platform_device pcm970_sja1000 = {
 	.num_resources = ARRAY_SIZE(pcm970_sja1000_resources),
 };
 
+struct imx_ssi_platform_data pcm037_ssi_pdata = {
+//	.flags = IMX_SSI_DMA,
+};
+
 /*
  * Board specific initialization.
  */
@@ -550,6 +594,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");
 
@@ -605,6 +669,14 @@ static void __init mxc_board_init(void)
 		mxc_register_device(&mx3_camera, &camera_pdata);
 
 	platform_device_register(&pcm970_sja1000);
+
+#ifdef CONFIG_SPI
+	mxc_register_device(&mxc_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




More information about the linux-arm-kernel mailing list