Loading arch/arm/mach-mx3/Kconfig +8 −0 Original line number Original line Diff line number Diff line Loading @@ -36,6 +36,14 @@ config MACH_PCM037 Include support for Phytec pcm037 platform. This includes Include support for Phytec pcm037 platform. This includes specific configurations for the board and its peripherals. specific configurations for the board and its peripherals. config MACH_PCM037_EET bool "Support pcm037 EET board extensions" depends on MACH_PCM037 help Add support for PCM037 EET baseboard extensions. If you are using the OLED display with EET, use "video=mx3fb:CMEL-OLED" kernel command-line parameter. config MACH_MX31LITE config MACH_MX31LITE bool "Support MX31 LITEKIT (LogicPD)" bool "Support MX31 LITEKIT (LogicPD)" select ARCH_MX31 select ARCH_MX31 Loading arch/arm/mach-mx3/Makefile +1 −0 Original line number Original line Diff line number Diff line Loading @@ -11,6 +11,7 @@ obj-$(CONFIG_MACH_MX31ADS) += mx31ads.o obj-$(CONFIG_MACH_MX31LILLY) += mx31lilly.o mx31lilly-db.o obj-$(CONFIG_MACH_MX31LILLY) += mx31lilly.o mx31lilly-db.o obj-$(CONFIG_MACH_MX31LITE) += mx31lite.o obj-$(CONFIG_MACH_MX31LITE) += mx31lite.o obj-$(CONFIG_MACH_PCM037) += pcm037.o obj-$(CONFIG_MACH_PCM037) += pcm037.o obj-$(CONFIG_MACH_PCM037_EET) += pcm037_eet.o obj-$(CONFIG_MACH_MX31_3DS) += mx31pdk.o obj-$(CONFIG_MACH_MX31_3DS) += mx31pdk.o obj-$(CONFIG_MACH_MX31MOBOARD) += mx31moboard.o mx31moboard-devboard.o \ obj-$(CONFIG_MACH_MX31MOBOARD) += mx31moboard.o mx31moboard-devboard.o \ mx31moboard-marxbot.o mx31moboard-marxbot.o Loading arch/arm/mach-mx3/armadillo5x0.c +63 −0 Original line number Original line Diff line number Diff line Loading @@ -31,6 +31,8 @@ #include <linux/smsc911x.h> #include <linux/smsc911x.h> #include <linux/interrupt.h> #include <linux/interrupt.h> #include <linux/irq.h> #include <linux/irq.h> #include <linux/mtd/physmap.h> #include <linux/io.h> #include <mach/hardware.h> #include <mach/hardware.h> #include <asm/mach-types.h> #include <asm/mach-types.h> Loading @@ -46,8 +48,10 @@ #include <mach/mmc.h> #include <mach/mmc.h> #include <mach/ipu.h> #include <mach/ipu.h> #include <mach/mx3fb.h> #include <mach/mx3fb.h> #include <mach/mxc_nand.h> #include "devices.h" #include "devices.h" #include "crm_regs.h" static int armadillo5x0_pins[] = { static int armadillo5x0_pins[] = { /* UART1 */ /* UART1 */ Loading Loading @@ -93,7 +97,56 @@ static int armadillo5x0_pins[] = { MX31_PIN_FPSHIFT__FPSHIFT, MX31_PIN_FPSHIFT__FPSHIFT, MX31_PIN_DRDY0__DRDY0, MX31_PIN_DRDY0__DRDY0, IOMUX_MODE(MX31_PIN_LCS1, IOMUX_CONFIG_GPIO), /*ADV7125_PSAVE*/ IOMUX_MODE(MX31_PIN_LCS1, IOMUX_CONFIG_GPIO), /*ADV7125_PSAVE*/ }; /* * NAND Flash */ static struct mxc_nand_platform_data armadillo5x0_nand_flash_pdata = { .width = 1, .hw_ecc = 1, }; /* * MTD NOR Flash */ static struct mtd_partition armadillo5x0_nor_flash_partitions[] = { { .name = "nor.bootloader", .offset = 0x00000000, .size = 4*32*1024, }, { .name = "nor.kernel", .offset = MTDPART_OFS_APPEND, .size = 16*128*1024, }, { .name = "nor.userland", .offset = MTDPART_OFS_APPEND, .size = 110*128*1024, }, { .name = "nor.config", .offset = MTDPART_OFS_APPEND, .size = 1*128*1024, }, }; static struct physmap_flash_data armadillo5x0_nor_flash_pdata = { .width = 2, .parts = armadillo5x0_nor_flash_partitions, .nr_parts = ARRAY_SIZE(armadillo5x0_nor_flash_partitions), }; static struct resource armadillo5x0_nor_flash_resource = { .flags = IORESOURCE_MEM, .start = CS0_BASE_ADDR, .end = CS0_BASE_ADDR + SZ_64M - 1, }; static struct platform_device armadillo5x0_nor_flash = { .name = "physmap-flash", .id = -1, .num_resources = 1, .resource = &armadillo5x0_nor_flash_resource, }; }; /* /* Loading Loading @@ -272,6 +325,16 @@ static void __init armadillo5x0_init(void) /* Register FB */ /* Register FB */ mxc_register_device(&mx3_ipu, &mx3_ipu_data); mxc_register_device(&mx3_ipu, &mx3_ipu_data); mxc_register_device(&mx3_fb, &mx3fb_pdata); mxc_register_device(&mx3_fb, &mx3fb_pdata); /* Register NOR Flash */ mxc_register_device(&armadillo5x0_nor_flash, &armadillo5x0_nor_flash_pdata); /* Register NAND Flash */ mxc_register_device(&mxc_nand_device, &armadillo5x0_nand_flash_pdata); /* set NAND page size to 2k if not configured via boot mode pins */ __raw_writel(__raw_readl(MXC_CCM_RCSR) | (1 << 30), MXC_CCM_RCSR); } } static void __init armadillo5x0_timer_init(void) static void __init armadillo5x0_timer_init(void) Loading arch/arm/mach-mx3/devices.c +0 −1 Original line number Original line Diff line number Diff line Loading @@ -22,7 +22,6 @@ #include <linux/platform_device.h> #include <linux/platform_device.h> #include <linux/serial.h> #include <linux/serial.h> #include <linux/gpio.h> #include <linux/gpio.h> #include <linux/dma-mapping.h> #include <mach/hardware.h> #include <mach/hardware.h> #include <mach/irqs.h> #include <mach/irqs.h> #include <mach/common.h> #include <mach/common.h> Loading arch/arm/mach-mx3/pcm037.c +165 −18 Original line number Original line Diff line number Diff line Loading @@ -18,7 +18,7 @@ #include <linux/types.h> #include <linux/types.h> #include <linux/init.h> #include <linux/init.h> #include <linux/dma-mapping.h> #include <linux/platform_device.h> #include <linux/platform_device.h> #include <linux/mtd/physmap.h> #include <linux/mtd/physmap.h> #include <linux/mtd/plat-ram.h> #include <linux/mtd/plat-ram.h> Loading @@ -33,29 +33,67 @@ #include <linux/irq.h> #include <linux/irq.h> #include <linux/fsl_devices.h> #include <linux/fsl_devices.h> #include <mach/hardware.h> #include <media/soc_camera.h> #include <asm/mach-types.h> #include <asm/mach-types.h> #include <asm/mach/arch.h> #include <asm/mach/arch.h> #include <asm/mach/time.h> #include <asm/mach/time.h> #include <asm/mach/map.h> #include <asm/mach/map.h> #include <mach/board-pcm037.h> #include <mach/common.h> #include <mach/common.h> #include <mach/hardware.h> #include <mach/i2c.h> #include <mach/imx-uart.h> #include <mach/imx-uart.h> #include <mach/iomux-mx3.h> #include <mach/iomux-mx3.h> #include <mach/ipu.h> #include <mach/ipu.h> #include <mach/board-pcm037.h> #include <mach/mmc.h> #include <mach/mx3_camera.h> #include <mach/mx3fb.h> #include <mach/mx3fb.h> #include <mach/mxc_nand.h> #include <mach/mxc_nand.h> #include <mach/mmc.h> #ifdef CONFIG_I2C_IMX #include <mach/i2c.h> #endif #include "devices.h" #include "devices.h" #include "pcm037.h" static enum pcm037_board_variant pcm037_instance = PCM037_PCM970; static int __init pcm037_variant_setup(char *str) { if (!strcmp("eet", str)) pcm037_instance = PCM037_EET; else if (strcmp("pcm970", str)) pr_warning("Unknown pcm037 baseboard variant %s\n", str); return 1; } /* Supported values: "pcm970" (default) and "eet" */ __setup("pcm037_variant=", pcm037_variant_setup); enum pcm037_board_variant pcm037_variant(void) { return pcm037_instance; } /* UART1 with RTS/CTS handshake signals */ static unsigned int pcm037_uart1_handshake_pins[] = { MX31_PIN_CTS1__CTS1, MX31_PIN_RTS1__RTS1, MX31_PIN_TXD1__TXD1, MX31_PIN_RXD1__RXD1, }; /* UART1 without RTS/CTS handshake signals */ static unsigned int pcm037_uart1_pins[] = { MX31_PIN_TXD1__TXD1, MX31_PIN_RXD1__RXD1, }; static unsigned int pcm037_pins[] = { static unsigned int pcm037_pins[] = { /* I2C */ /* I2C */ MX31_PIN_CSPI2_MOSI__SCL, MX31_PIN_CSPI2_MOSI__SCL, MX31_PIN_CSPI2_MISO__SDA, MX31_PIN_CSPI2_MISO__SDA, MX31_PIN_CSPI2_SS2__I2C3_SDA, MX31_PIN_CSPI2_SCLK__I2C3_SCL, /* SDHC1 */ /* SDHC1 */ MX31_PIN_SD1_DATA3__SD1_DATA3, MX31_PIN_SD1_DATA3__SD1_DATA3, MX31_PIN_SD1_DATA2__SD1_DATA2, MX31_PIN_SD1_DATA2__SD1_DATA2, Loading @@ -73,11 +111,6 @@ static unsigned int pcm037_pins[] = { MX31_PIN_CSPI1_SS0__SS0, MX31_PIN_CSPI1_SS0__SS0, MX31_PIN_CSPI1_SS1__SS1, MX31_PIN_CSPI1_SS1__SS1, MX31_PIN_CSPI1_SS2__SS2, MX31_PIN_CSPI1_SS2__SS2, /* UART1 */ MX31_PIN_CTS1__CTS1, MX31_PIN_RTS1__RTS1, MX31_PIN_TXD1__TXD1, MX31_PIN_RXD1__RXD1, /* UART2 */ /* UART2 */ MX31_PIN_TXD2__TXD2, MX31_PIN_TXD2__TXD2, MX31_PIN_RXD2__RXD2, MX31_PIN_RXD2__RXD2, Loading Loading @@ -120,6 +153,22 @@ static unsigned int pcm037_pins[] = { MX31_PIN_D3_SPL__D3_SPL, MX31_PIN_D3_SPL__D3_SPL, MX31_PIN_D3_CLS__D3_CLS, MX31_PIN_D3_CLS__D3_CLS, MX31_PIN_LCS0__GPI03_23, MX31_PIN_LCS0__GPI03_23, /* CSI */ IOMUX_MODE(MX31_PIN_CSI_D5, IOMUX_CONFIG_GPIO), MX31_PIN_CSI_D6__CSI_D6, MX31_PIN_CSI_D7__CSI_D7, MX31_PIN_CSI_D8__CSI_D8, MX31_PIN_CSI_D9__CSI_D9, MX31_PIN_CSI_D10__CSI_D10, MX31_PIN_CSI_D11__CSI_D11, MX31_PIN_CSI_D12__CSI_D12, MX31_PIN_CSI_D13__CSI_D13, MX31_PIN_CSI_D14__CSI_D14, MX31_PIN_CSI_D15__CSI_D15, MX31_PIN_CSI_HSYNC__CSI_HSYNC, MX31_PIN_CSI_MCLK__CSI_MCLK, MX31_PIN_CSI_PIXCLK__CSI_PIXCLK, MX31_PIN_CSI_VSYNC__CSI_VSYNC, }; }; static struct physmap_flash_data pcm037_flash_data = { static struct physmap_flash_data pcm037_flash_data = { Loading Loading @@ -250,17 +299,41 @@ static struct mxc_nand_platform_data pcm037_nand_board_info = { .hw_ecc = 1, .hw_ecc = 1, }; }; #ifdef CONFIG_I2C_IMX static struct imxi2c_platform_data pcm037_i2c_1_data = { static struct imxi2c_platform_data pcm037_i2c_1_data = { .bitrate = 100000, .bitrate = 100000, }; }; static struct imxi2c_platform_data pcm037_i2c_2_data = { .bitrate = 20000, }; static struct at24_platform_data board_eeprom = { static struct at24_platform_data board_eeprom = { .byte_len = 4096, .byte_len = 4096, .page_size = 32, .page_size = 32, .flags = AT24_FLAG_ADDR16, .flags = AT24_FLAG_ADDR16, }; }; static int pcm037_camera_power(struct device *dev, int on) { /* disable or enable the camera in X7 or X8 PCM970 connector */ gpio_set_value(IOMUX_TO_GPIO(MX31_PIN_CSI_D5), !on); return 0; } static struct i2c_board_info pcm037_i2c_2_devices[] = { { I2C_BOARD_INFO("mt9t031", 0x5d), }, }; static struct soc_camera_link iclink = { .bus_id = 0, /* Must match with the camera ID */ .power = pcm037_camera_power, .board_info = &pcm037_i2c_2_devices[0], .i2c_adapter_id = 2, .module_name = "mt9t031", }; static struct i2c_board_info pcm037_i2c_devices[] = { static struct i2c_board_info pcm037_i2c_devices[] = { { { I2C_BOARD_INFO("at24", 0x52), /* E0=0, E1=1, E2=0 */ I2C_BOARD_INFO("at24", 0x52), /* E0=0, E1=1, E2=0 */ Loading @@ -270,7 +343,14 @@ static struct i2c_board_info pcm037_i2c_devices[] = { .type = "pcf8563", .type = "pcf8563", } } }; }; #endif static struct platform_device pcm037_camera = { .name = "soc-camera-pdrv", .id = 0, .dev = { .platform_data = &iclink, }, }; /* Not connected by default */ /* Not connected by default */ #ifdef PCM970_SDHC_RW_SWITCH #ifdef PCM970_SDHC_RW_SWITCH Loading Loading @@ -334,9 +414,41 @@ static struct imxmmc_platform_data sdhc_pdata = { .exit = pcm970_sdhc1_exit, .exit = pcm970_sdhc1_exit, }; }; struct mx3_camera_pdata camera_pdata = { .dma_dev = &mx3_ipu.dev, .flags = MX3_CAMERA_DATAWIDTH_8 | MX3_CAMERA_DATAWIDTH_10, .mclk_10khz = 2000, }; static int __init pcm037_camera_alloc_dma(const size_t buf_size) { dma_addr_t dma_handle; void *buf; int dma; if (buf_size < 2 * 1024 * 1024) return -EINVAL; buf = dma_alloc_coherent(NULL, buf_size, &dma_handle, GFP_KERNEL); if (!buf) { pr_err("%s: cannot allocate camera buffer-memory\n", __func__); return -ENOMEM; } memset(buf, 0, buf_size); dma = dma_declare_coherent_memory(&mx3_camera.dev, dma_handle, dma_handle, buf_size, DMA_MEMORY_MAP | DMA_MEMORY_EXCLUSIVE); /* The way we call dma_declare_coherent_memory only a malloc can fail */ return dma & DMA_MEMORY_MAP ? 0 : -ENOMEM; } static struct platform_device *devices[] __initdata = { static struct platform_device *devices[] __initdata = { &pcm037_flash, &pcm037_flash, &pcm037_sram_device, &pcm037_sram_device, &pcm037_camera, }; }; static struct ipu_platform_data mx3_ipu_data = { static struct ipu_platform_data mx3_ipu_data = { Loading Loading @@ -377,6 +489,22 @@ static const struct fb_videomode fb_modedb[] = { .sync = FB_SYNC_VERT_HIGH_ACT | FB_SYNC_OE_ACT_HIGH, .sync = FB_SYNC_VERT_HIGH_ACT | FB_SYNC_OE_ACT_HIGH, .vmode = FB_VMODE_NONINTERLACED, .vmode = FB_VMODE_NONINTERLACED, .flag = 0, .flag = 0, }, { /* 240x320 @ 60 Hz */ .name = "CMEL-OLED", .refresh = 60, .xres = 240, .yres = 320, .pixclock = 185925, .left_margin = 9, .right_margin = 16, .upper_margin = 7, .lower_margin = 9, .hsync_len = 1, .vsync_len = 1, .sync = FB_SYNC_OE_ACT_HIGH | FB_SYNC_CLK_INVERT, .vmode = FB_VMODE_NONINTERLACED, .flag = 0, }, }, }; }; Loading @@ -397,6 +525,14 @@ static void __init mxc_board_init(void) mxc_iomux_setup_multiple_pins(pcm037_pins, ARRAY_SIZE(pcm037_pins), mxc_iomux_setup_multiple_pins(pcm037_pins, ARRAY_SIZE(pcm037_pins), "pcm037"); "pcm037"); if (pcm037_variant() == PCM037_EET) mxc_iomux_setup_multiple_pins(pcm037_uart1_pins, ARRAY_SIZE(pcm037_uart1_pins), "pcm037_uart1"); else mxc_iomux_setup_multiple_pins(pcm037_uart1_handshake_pins, ARRAY_SIZE(pcm037_uart1_handshake_pins), "pcm037_uart1"); platform_add_devices(devices, ARRAY_SIZE(devices)); platform_add_devices(devices, ARRAY_SIZE(devices)); mxc_register_device(&mxc_uart_device0, &uart_pdata); mxc_register_device(&mxc_uart_device0, &uart_pdata); Loading @@ -415,18 +551,30 @@ static void __init mxc_board_init(void) } } #ifdef CONFIG_I2C_IMX /* I2C adapters and devices */ i2c_register_board_info(1, pcm037_i2c_devices, i2c_register_board_info(1, pcm037_i2c_devices, ARRAY_SIZE(pcm037_i2c_devices)); ARRAY_SIZE(pcm037_i2c_devices)); mxc_register_device(&mxc_i2c_device1, &pcm037_i2c_1_data); mxc_register_device(&mxc_i2c_device1, &pcm037_i2c_1_data); #endif mxc_register_device(&mxc_i2c_device2, &pcm037_i2c_2_data); mxc_register_device(&mxc_nand_device, &pcm037_nand_board_info); mxc_register_device(&mxc_nand_device, &pcm037_nand_board_info); mxc_register_device(&mxcsdhc_device0, &sdhc_pdata); mxc_register_device(&mxcsdhc_device0, &sdhc_pdata); mxc_register_device(&mx3_ipu, &mx3_ipu_data); mxc_register_device(&mx3_ipu, &mx3_ipu_data); mxc_register_device(&mx3_fb, &mx3fb_pdata); mxc_register_device(&mx3_fb, &mx3fb_pdata); if (!gpio_usbotg_hs_activate()) if (!gpio_usbotg_hs_activate()) mxc_register_device(&mxc_otg_udc_device, &usb_pdata); mxc_register_device(&mxc_otg_udc_device, &usb_pdata); /* CSI */ /* Camera power: default - off */ ret = gpio_request(IOMUX_TO_GPIO(MX31_PIN_CSI_D5), "mt9t031-power"); if (!ret) gpio_direction_output(IOMUX_TO_GPIO(MX31_PIN_CSI_D5), 1); else iclink.power = NULL; if (!pcm037_camera_alloc_dma(4 * 1024 * 1024)) mxc_register_device(&mx3_camera, &camera_pdata); } } static void __init pcm037_timer_init(void) static void __init pcm037_timer_init(void) Loading @@ -448,4 +596,3 @@ MACHINE_START(PCM037, "Phytec Phycore pcm037") .init_machine = mxc_board_init, .init_machine = mxc_board_init, .timer = &pcm037_timer, .timer = &pcm037_timer, MACHINE_END MACHINE_END Loading
arch/arm/mach-mx3/Kconfig +8 −0 Original line number Original line Diff line number Diff line Loading @@ -36,6 +36,14 @@ config MACH_PCM037 Include support for Phytec pcm037 platform. This includes Include support for Phytec pcm037 platform. This includes specific configurations for the board and its peripherals. specific configurations for the board and its peripherals. config MACH_PCM037_EET bool "Support pcm037 EET board extensions" depends on MACH_PCM037 help Add support for PCM037 EET baseboard extensions. If you are using the OLED display with EET, use "video=mx3fb:CMEL-OLED" kernel command-line parameter. config MACH_MX31LITE config MACH_MX31LITE bool "Support MX31 LITEKIT (LogicPD)" bool "Support MX31 LITEKIT (LogicPD)" select ARCH_MX31 select ARCH_MX31 Loading
arch/arm/mach-mx3/Makefile +1 −0 Original line number Original line Diff line number Diff line Loading @@ -11,6 +11,7 @@ obj-$(CONFIG_MACH_MX31ADS) += mx31ads.o obj-$(CONFIG_MACH_MX31LILLY) += mx31lilly.o mx31lilly-db.o obj-$(CONFIG_MACH_MX31LILLY) += mx31lilly.o mx31lilly-db.o obj-$(CONFIG_MACH_MX31LITE) += mx31lite.o obj-$(CONFIG_MACH_MX31LITE) += mx31lite.o obj-$(CONFIG_MACH_PCM037) += pcm037.o obj-$(CONFIG_MACH_PCM037) += pcm037.o obj-$(CONFIG_MACH_PCM037_EET) += pcm037_eet.o obj-$(CONFIG_MACH_MX31_3DS) += mx31pdk.o obj-$(CONFIG_MACH_MX31_3DS) += mx31pdk.o obj-$(CONFIG_MACH_MX31MOBOARD) += mx31moboard.o mx31moboard-devboard.o \ obj-$(CONFIG_MACH_MX31MOBOARD) += mx31moboard.o mx31moboard-devboard.o \ mx31moboard-marxbot.o mx31moboard-marxbot.o Loading
arch/arm/mach-mx3/armadillo5x0.c +63 −0 Original line number Original line Diff line number Diff line Loading @@ -31,6 +31,8 @@ #include <linux/smsc911x.h> #include <linux/smsc911x.h> #include <linux/interrupt.h> #include <linux/interrupt.h> #include <linux/irq.h> #include <linux/irq.h> #include <linux/mtd/physmap.h> #include <linux/io.h> #include <mach/hardware.h> #include <mach/hardware.h> #include <asm/mach-types.h> #include <asm/mach-types.h> Loading @@ -46,8 +48,10 @@ #include <mach/mmc.h> #include <mach/mmc.h> #include <mach/ipu.h> #include <mach/ipu.h> #include <mach/mx3fb.h> #include <mach/mx3fb.h> #include <mach/mxc_nand.h> #include "devices.h" #include "devices.h" #include "crm_regs.h" static int armadillo5x0_pins[] = { static int armadillo5x0_pins[] = { /* UART1 */ /* UART1 */ Loading Loading @@ -93,7 +97,56 @@ static int armadillo5x0_pins[] = { MX31_PIN_FPSHIFT__FPSHIFT, MX31_PIN_FPSHIFT__FPSHIFT, MX31_PIN_DRDY0__DRDY0, MX31_PIN_DRDY0__DRDY0, IOMUX_MODE(MX31_PIN_LCS1, IOMUX_CONFIG_GPIO), /*ADV7125_PSAVE*/ IOMUX_MODE(MX31_PIN_LCS1, IOMUX_CONFIG_GPIO), /*ADV7125_PSAVE*/ }; /* * NAND Flash */ static struct mxc_nand_platform_data armadillo5x0_nand_flash_pdata = { .width = 1, .hw_ecc = 1, }; /* * MTD NOR Flash */ static struct mtd_partition armadillo5x0_nor_flash_partitions[] = { { .name = "nor.bootloader", .offset = 0x00000000, .size = 4*32*1024, }, { .name = "nor.kernel", .offset = MTDPART_OFS_APPEND, .size = 16*128*1024, }, { .name = "nor.userland", .offset = MTDPART_OFS_APPEND, .size = 110*128*1024, }, { .name = "nor.config", .offset = MTDPART_OFS_APPEND, .size = 1*128*1024, }, }; static struct physmap_flash_data armadillo5x0_nor_flash_pdata = { .width = 2, .parts = armadillo5x0_nor_flash_partitions, .nr_parts = ARRAY_SIZE(armadillo5x0_nor_flash_partitions), }; static struct resource armadillo5x0_nor_flash_resource = { .flags = IORESOURCE_MEM, .start = CS0_BASE_ADDR, .end = CS0_BASE_ADDR + SZ_64M - 1, }; static struct platform_device armadillo5x0_nor_flash = { .name = "physmap-flash", .id = -1, .num_resources = 1, .resource = &armadillo5x0_nor_flash_resource, }; }; /* /* Loading Loading @@ -272,6 +325,16 @@ static void __init armadillo5x0_init(void) /* Register FB */ /* Register FB */ mxc_register_device(&mx3_ipu, &mx3_ipu_data); mxc_register_device(&mx3_ipu, &mx3_ipu_data); mxc_register_device(&mx3_fb, &mx3fb_pdata); mxc_register_device(&mx3_fb, &mx3fb_pdata); /* Register NOR Flash */ mxc_register_device(&armadillo5x0_nor_flash, &armadillo5x0_nor_flash_pdata); /* Register NAND Flash */ mxc_register_device(&mxc_nand_device, &armadillo5x0_nand_flash_pdata); /* set NAND page size to 2k if not configured via boot mode pins */ __raw_writel(__raw_readl(MXC_CCM_RCSR) | (1 << 30), MXC_CCM_RCSR); } } static void __init armadillo5x0_timer_init(void) static void __init armadillo5x0_timer_init(void) Loading
arch/arm/mach-mx3/devices.c +0 −1 Original line number Original line Diff line number Diff line Loading @@ -22,7 +22,6 @@ #include <linux/platform_device.h> #include <linux/platform_device.h> #include <linux/serial.h> #include <linux/serial.h> #include <linux/gpio.h> #include <linux/gpio.h> #include <linux/dma-mapping.h> #include <mach/hardware.h> #include <mach/hardware.h> #include <mach/irqs.h> #include <mach/irqs.h> #include <mach/common.h> #include <mach/common.h> Loading
arch/arm/mach-mx3/pcm037.c +165 −18 Original line number Original line Diff line number Diff line Loading @@ -18,7 +18,7 @@ #include <linux/types.h> #include <linux/types.h> #include <linux/init.h> #include <linux/init.h> #include <linux/dma-mapping.h> #include <linux/platform_device.h> #include <linux/platform_device.h> #include <linux/mtd/physmap.h> #include <linux/mtd/physmap.h> #include <linux/mtd/plat-ram.h> #include <linux/mtd/plat-ram.h> Loading @@ -33,29 +33,67 @@ #include <linux/irq.h> #include <linux/irq.h> #include <linux/fsl_devices.h> #include <linux/fsl_devices.h> #include <mach/hardware.h> #include <media/soc_camera.h> #include <asm/mach-types.h> #include <asm/mach-types.h> #include <asm/mach/arch.h> #include <asm/mach/arch.h> #include <asm/mach/time.h> #include <asm/mach/time.h> #include <asm/mach/map.h> #include <asm/mach/map.h> #include <mach/board-pcm037.h> #include <mach/common.h> #include <mach/common.h> #include <mach/hardware.h> #include <mach/i2c.h> #include <mach/imx-uart.h> #include <mach/imx-uart.h> #include <mach/iomux-mx3.h> #include <mach/iomux-mx3.h> #include <mach/ipu.h> #include <mach/ipu.h> #include <mach/board-pcm037.h> #include <mach/mmc.h> #include <mach/mx3_camera.h> #include <mach/mx3fb.h> #include <mach/mx3fb.h> #include <mach/mxc_nand.h> #include <mach/mxc_nand.h> #include <mach/mmc.h> #ifdef CONFIG_I2C_IMX #include <mach/i2c.h> #endif #include "devices.h" #include "devices.h" #include "pcm037.h" static enum pcm037_board_variant pcm037_instance = PCM037_PCM970; static int __init pcm037_variant_setup(char *str) { if (!strcmp("eet", str)) pcm037_instance = PCM037_EET; else if (strcmp("pcm970", str)) pr_warning("Unknown pcm037 baseboard variant %s\n", str); return 1; } /* Supported values: "pcm970" (default) and "eet" */ __setup("pcm037_variant=", pcm037_variant_setup); enum pcm037_board_variant pcm037_variant(void) { return pcm037_instance; } /* UART1 with RTS/CTS handshake signals */ static unsigned int pcm037_uart1_handshake_pins[] = { MX31_PIN_CTS1__CTS1, MX31_PIN_RTS1__RTS1, MX31_PIN_TXD1__TXD1, MX31_PIN_RXD1__RXD1, }; /* UART1 without RTS/CTS handshake signals */ static unsigned int pcm037_uart1_pins[] = { MX31_PIN_TXD1__TXD1, MX31_PIN_RXD1__RXD1, }; static unsigned int pcm037_pins[] = { static unsigned int pcm037_pins[] = { /* I2C */ /* I2C */ MX31_PIN_CSPI2_MOSI__SCL, MX31_PIN_CSPI2_MOSI__SCL, MX31_PIN_CSPI2_MISO__SDA, MX31_PIN_CSPI2_MISO__SDA, MX31_PIN_CSPI2_SS2__I2C3_SDA, MX31_PIN_CSPI2_SCLK__I2C3_SCL, /* SDHC1 */ /* SDHC1 */ MX31_PIN_SD1_DATA3__SD1_DATA3, MX31_PIN_SD1_DATA3__SD1_DATA3, MX31_PIN_SD1_DATA2__SD1_DATA2, MX31_PIN_SD1_DATA2__SD1_DATA2, Loading @@ -73,11 +111,6 @@ static unsigned int pcm037_pins[] = { MX31_PIN_CSPI1_SS0__SS0, MX31_PIN_CSPI1_SS0__SS0, MX31_PIN_CSPI1_SS1__SS1, MX31_PIN_CSPI1_SS1__SS1, MX31_PIN_CSPI1_SS2__SS2, MX31_PIN_CSPI1_SS2__SS2, /* UART1 */ MX31_PIN_CTS1__CTS1, MX31_PIN_RTS1__RTS1, MX31_PIN_TXD1__TXD1, MX31_PIN_RXD1__RXD1, /* UART2 */ /* UART2 */ MX31_PIN_TXD2__TXD2, MX31_PIN_TXD2__TXD2, MX31_PIN_RXD2__RXD2, MX31_PIN_RXD2__RXD2, Loading Loading @@ -120,6 +153,22 @@ static unsigned int pcm037_pins[] = { MX31_PIN_D3_SPL__D3_SPL, MX31_PIN_D3_SPL__D3_SPL, MX31_PIN_D3_CLS__D3_CLS, MX31_PIN_D3_CLS__D3_CLS, MX31_PIN_LCS0__GPI03_23, MX31_PIN_LCS0__GPI03_23, /* CSI */ IOMUX_MODE(MX31_PIN_CSI_D5, IOMUX_CONFIG_GPIO), MX31_PIN_CSI_D6__CSI_D6, MX31_PIN_CSI_D7__CSI_D7, MX31_PIN_CSI_D8__CSI_D8, MX31_PIN_CSI_D9__CSI_D9, MX31_PIN_CSI_D10__CSI_D10, MX31_PIN_CSI_D11__CSI_D11, MX31_PIN_CSI_D12__CSI_D12, MX31_PIN_CSI_D13__CSI_D13, MX31_PIN_CSI_D14__CSI_D14, MX31_PIN_CSI_D15__CSI_D15, MX31_PIN_CSI_HSYNC__CSI_HSYNC, MX31_PIN_CSI_MCLK__CSI_MCLK, MX31_PIN_CSI_PIXCLK__CSI_PIXCLK, MX31_PIN_CSI_VSYNC__CSI_VSYNC, }; }; static struct physmap_flash_data pcm037_flash_data = { static struct physmap_flash_data pcm037_flash_data = { Loading Loading @@ -250,17 +299,41 @@ static struct mxc_nand_platform_data pcm037_nand_board_info = { .hw_ecc = 1, .hw_ecc = 1, }; }; #ifdef CONFIG_I2C_IMX static struct imxi2c_platform_data pcm037_i2c_1_data = { static struct imxi2c_platform_data pcm037_i2c_1_data = { .bitrate = 100000, .bitrate = 100000, }; }; static struct imxi2c_platform_data pcm037_i2c_2_data = { .bitrate = 20000, }; static struct at24_platform_data board_eeprom = { static struct at24_platform_data board_eeprom = { .byte_len = 4096, .byte_len = 4096, .page_size = 32, .page_size = 32, .flags = AT24_FLAG_ADDR16, .flags = AT24_FLAG_ADDR16, }; }; static int pcm037_camera_power(struct device *dev, int on) { /* disable or enable the camera in X7 or X8 PCM970 connector */ gpio_set_value(IOMUX_TO_GPIO(MX31_PIN_CSI_D5), !on); return 0; } static struct i2c_board_info pcm037_i2c_2_devices[] = { { I2C_BOARD_INFO("mt9t031", 0x5d), }, }; static struct soc_camera_link iclink = { .bus_id = 0, /* Must match with the camera ID */ .power = pcm037_camera_power, .board_info = &pcm037_i2c_2_devices[0], .i2c_adapter_id = 2, .module_name = "mt9t031", }; static struct i2c_board_info pcm037_i2c_devices[] = { static struct i2c_board_info pcm037_i2c_devices[] = { { { I2C_BOARD_INFO("at24", 0x52), /* E0=0, E1=1, E2=0 */ I2C_BOARD_INFO("at24", 0x52), /* E0=0, E1=1, E2=0 */ Loading @@ -270,7 +343,14 @@ static struct i2c_board_info pcm037_i2c_devices[] = { .type = "pcf8563", .type = "pcf8563", } } }; }; #endif static struct platform_device pcm037_camera = { .name = "soc-camera-pdrv", .id = 0, .dev = { .platform_data = &iclink, }, }; /* Not connected by default */ /* Not connected by default */ #ifdef PCM970_SDHC_RW_SWITCH #ifdef PCM970_SDHC_RW_SWITCH Loading Loading @@ -334,9 +414,41 @@ static struct imxmmc_platform_data sdhc_pdata = { .exit = pcm970_sdhc1_exit, .exit = pcm970_sdhc1_exit, }; }; struct mx3_camera_pdata camera_pdata = { .dma_dev = &mx3_ipu.dev, .flags = MX3_CAMERA_DATAWIDTH_8 | MX3_CAMERA_DATAWIDTH_10, .mclk_10khz = 2000, }; static int __init pcm037_camera_alloc_dma(const size_t buf_size) { dma_addr_t dma_handle; void *buf; int dma; if (buf_size < 2 * 1024 * 1024) return -EINVAL; buf = dma_alloc_coherent(NULL, buf_size, &dma_handle, GFP_KERNEL); if (!buf) { pr_err("%s: cannot allocate camera buffer-memory\n", __func__); return -ENOMEM; } memset(buf, 0, buf_size); dma = dma_declare_coherent_memory(&mx3_camera.dev, dma_handle, dma_handle, buf_size, DMA_MEMORY_MAP | DMA_MEMORY_EXCLUSIVE); /* The way we call dma_declare_coherent_memory only a malloc can fail */ return dma & DMA_MEMORY_MAP ? 0 : -ENOMEM; } static struct platform_device *devices[] __initdata = { static struct platform_device *devices[] __initdata = { &pcm037_flash, &pcm037_flash, &pcm037_sram_device, &pcm037_sram_device, &pcm037_camera, }; }; static struct ipu_platform_data mx3_ipu_data = { static struct ipu_platform_data mx3_ipu_data = { Loading Loading @@ -377,6 +489,22 @@ static const struct fb_videomode fb_modedb[] = { .sync = FB_SYNC_VERT_HIGH_ACT | FB_SYNC_OE_ACT_HIGH, .sync = FB_SYNC_VERT_HIGH_ACT | FB_SYNC_OE_ACT_HIGH, .vmode = FB_VMODE_NONINTERLACED, .vmode = FB_VMODE_NONINTERLACED, .flag = 0, .flag = 0, }, { /* 240x320 @ 60 Hz */ .name = "CMEL-OLED", .refresh = 60, .xres = 240, .yres = 320, .pixclock = 185925, .left_margin = 9, .right_margin = 16, .upper_margin = 7, .lower_margin = 9, .hsync_len = 1, .vsync_len = 1, .sync = FB_SYNC_OE_ACT_HIGH | FB_SYNC_CLK_INVERT, .vmode = FB_VMODE_NONINTERLACED, .flag = 0, }, }, }; }; Loading @@ -397,6 +525,14 @@ static void __init mxc_board_init(void) mxc_iomux_setup_multiple_pins(pcm037_pins, ARRAY_SIZE(pcm037_pins), mxc_iomux_setup_multiple_pins(pcm037_pins, ARRAY_SIZE(pcm037_pins), "pcm037"); "pcm037"); if (pcm037_variant() == PCM037_EET) mxc_iomux_setup_multiple_pins(pcm037_uart1_pins, ARRAY_SIZE(pcm037_uart1_pins), "pcm037_uart1"); else mxc_iomux_setup_multiple_pins(pcm037_uart1_handshake_pins, ARRAY_SIZE(pcm037_uart1_handshake_pins), "pcm037_uart1"); platform_add_devices(devices, ARRAY_SIZE(devices)); platform_add_devices(devices, ARRAY_SIZE(devices)); mxc_register_device(&mxc_uart_device0, &uart_pdata); mxc_register_device(&mxc_uart_device0, &uart_pdata); Loading @@ -415,18 +551,30 @@ static void __init mxc_board_init(void) } } #ifdef CONFIG_I2C_IMX /* I2C adapters and devices */ i2c_register_board_info(1, pcm037_i2c_devices, i2c_register_board_info(1, pcm037_i2c_devices, ARRAY_SIZE(pcm037_i2c_devices)); ARRAY_SIZE(pcm037_i2c_devices)); mxc_register_device(&mxc_i2c_device1, &pcm037_i2c_1_data); mxc_register_device(&mxc_i2c_device1, &pcm037_i2c_1_data); #endif mxc_register_device(&mxc_i2c_device2, &pcm037_i2c_2_data); mxc_register_device(&mxc_nand_device, &pcm037_nand_board_info); mxc_register_device(&mxc_nand_device, &pcm037_nand_board_info); mxc_register_device(&mxcsdhc_device0, &sdhc_pdata); mxc_register_device(&mxcsdhc_device0, &sdhc_pdata); mxc_register_device(&mx3_ipu, &mx3_ipu_data); mxc_register_device(&mx3_ipu, &mx3_ipu_data); mxc_register_device(&mx3_fb, &mx3fb_pdata); mxc_register_device(&mx3_fb, &mx3fb_pdata); if (!gpio_usbotg_hs_activate()) if (!gpio_usbotg_hs_activate()) mxc_register_device(&mxc_otg_udc_device, &usb_pdata); mxc_register_device(&mxc_otg_udc_device, &usb_pdata); /* CSI */ /* Camera power: default - off */ ret = gpio_request(IOMUX_TO_GPIO(MX31_PIN_CSI_D5), "mt9t031-power"); if (!ret) gpio_direction_output(IOMUX_TO_GPIO(MX31_PIN_CSI_D5), 1); else iclink.power = NULL; if (!pcm037_camera_alloc_dma(4 * 1024 * 1024)) mxc_register_device(&mx3_camera, &camera_pdata); } } static void __init pcm037_timer_init(void) static void __init pcm037_timer_init(void) Loading @@ -448,4 +596,3 @@ MACHINE_START(PCM037, "Phytec Phycore pcm037") .init_machine = mxc_board_init, .init_machine = mxc_board_init, .timer = &pcm037_timer, .timer = &pcm037_timer, MACHINE_END MACHINE_END