Path: blob/master/arch/arm/mach-omap2/board-cm-t3517.c
10817 views
/*1* linux/arch/arm/mach-omap2/board-cm-t3517.c2*3* Support for the CompuLab CM-T3517 modules4*5* Copyright (C) 2010 CompuLab, Ltd.6* Author: Igor Grinberg <[email protected]>7*8* This program is free software; you can redistribute it and/or9* modify it under the terms of the GNU General Public License10* version 2 as published by the Free Software Foundation.11*12* This program is distributed in the hope that it will be useful, but13* WITHOUT ANY WARRANTY; without even the implied warranty of14* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU15* General Public License for more details.16*17* You should have received a copy of the GNU General Public License18* along with this program; if not, write to the Free Software19* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA20* 02110-1301 USA21*22*/2324#include <linux/kernel.h>25#include <linux/init.h>26#include <linux/platform_device.h>27#include <linux/delay.h>28#include <linux/gpio.h>29#include <linux/leds.h>30#include <linux/rtc-v3020.h>31#include <linux/mtd/mtd.h>32#include <linux/mtd/nand.h>33#include <linux/mtd/partitions.h>34#include <linux/can/platform/ti_hecc.h>3536#include <asm/mach-types.h>37#include <asm/mach/arch.h>38#include <asm/mach/map.h>3940#include <plat/board.h>41#include <plat/common.h>42#include <plat/usb.h>43#include <plat/nand.h>44#include <plat/gpmc.h>4546#include <mach/am35xx.h>4748#include "mux.h"49#include "control.h"50#include "common-board-devices.h"5152#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)53static struct gpio_led cm_t3517_leds[] = {54[0] = {55.gpio = 186,56.name = "cm-t3517:green",57.default_trigger = "heartbeat",58.active_low = 0,59},60};6162static struct gpio_led_platform_data cm_t3517_led_pdata = {63.num_leds = ARRAY_SIZE(cm_t3517_leds),64.leds = cm_t3517_leds,65};6667static struct platform_device cm_t3517_led_device = {68.name = "leds-gpio",69.id = -1,70.dev = {71.platform_data = &cm_t3517_led_pdata,72},73};7475static void __init cm_t3517_init_leds(void)76{77platform_device_register(&cm_t3517_led_device);78}79#else80static inline void cm_t3517_init_leds(void) {}81#endif8283#if defined(CONFIG_CAN_TI_HECC) || defined(CONFIG_CAN_TI_HECC_MODULE)84static struct resource cm_t3517_hecc_resources[] = {85{86.start = AM35XX_IPSS_HECC_BASE,87.end = AM35XX_IPSS_HECC_BASE + SZ_16K - 1,88.flags = IORESOURCE_MEM,89},90{91.start = INT_35XX_HECC0_IRQ,92.end = INT_35XX_HECC0_IRQ,93.flags = IORESOURCE_IRQ,94},95};9697static struct ti_hecc_platform_data cm_t3517_hecc_pdata = {98.scc_hecc_offset = AM35XX_HECC_SCC_HECC_OFFSET,99.scc_ram_offset = AM35XX_HECC_SCC_RAM_OFFSET,100.hecc_ram_offset = AM35XX_HECC_RAM_OFFSET,101.mbx_offset = AM35XX_HECC_MBOX_OFFSET,102.int_line = AM35XX_HECC_INT_LINE,103.version = AM35XX_HECC_VERSION,104};105106static struct platform_device cm_t3517_hecc_device = {107.name = "ti_hecc",108.id = 1,109.num_resources = ARRAY_SIZE(cm_t3517_hecc_resources),110.resource = cm_t3517_hecc_resources,111.dev = {112.platform_data = &cm_t3517_hecc_pdata,113},114};115116static void cm_t3517_init_hecc(void)117{118platform_device_register(&cm_t3517_hecc_device);119}120#else121static inline void cm_t3517_init_hecc(void) {}122#endif123124#if defined(CONFIG_RTC_DRV_V3020) || defined(CONFIG_RTC_DRV_V3020_MODULE)125#define RTC_IO_GPIO (153)126#define RTC_WR_GPIO (154)127#define RTC_RD_GPIO (53)128#define RTC_CS_GPIO (163)129#define RTC_CS_EN_GPIO (160)130131struct v3020_platform_data cm_t3517_v3020_pdata = {132.use_gpio = 1,133.gpio_cs = RTC_CS_GPIO,134.gpio_wr = RTC_WR_GPIO,135.gpio_rd = RTC_RD_GPIO,136.gpio_io = RTC_IO_GPIO,137};138139static struct platform_device cm_t3517_rtc_device = {140.name = "v3020",141.id = -1,142.dev = {143.platform_data = &cm_t3517_v3020_pdata,144}145};146147static void __init cm_t3517_init_rtc(void)148{149int err;150151err = gpio_request_one(RTC_CS_EN_GPIO, GPIOF_OUT_INIT_HIGH,152"rtc cs en");153if (err) {154pr_err("CM-T3517: rtc cs en gpio request failed: %d\n", err);155return;156}157158platform_device_register(&cm_t3517_rtc_device);159}160#else161static inline void cm_t3517_init_rtc(void) {}162#endif163164#if defined(CONFIG_USB_EHCI_HCD) || defined(CONFIG_USB_EHCI_HCD_MODULE)165#define HSUSB1_RESET_GPIO (146)166#define HSUSB2_RESET_GPIO (147)167#define USB_HUB_RESET_GPIO (152)168169static struct usbhs_omap_board_data cm_t3517_ehci_pdata __initdata = {170.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,171.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,172.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,173174.phy_reset = true,175.reset_gpio_port[0] = HSUSB1_RESET_GPIO,176.reset_gpio_port[1] = HSUSB2_RESET_GPIO,177.reset_gpio_port[2] = -EINVAL,178};179180static int __init cm_t3517_init_usbh(void)181{182int err;183184err = gpio_request_one(USB_HUB_RESET_GPIO, GPIOF_OUT_INIT_LOW,185"usb hub rst");186if (err) {187pr_err("CM-T3517: usb hub rst gpio request failed: %d\n", err);188} else {189udelay(10);190gpio_set_value(USB_HUB_RESET_GPIO, 1);191msleep(1);192}193194usbhs_init(&cm_t3517_ehci_pdata);195196return 0;197}198#else199static inline int cm_t3517_init_usbh(void)200{201return 0;202}203#endif204205#if defined(CONFIG_MTD_NAND_OMAP2) || defined(CONFIG_MTD_NAND_OMAP2_MODULE)206static struct mtd_partition cm_t3517_nand_partitions[] = {207{208.name = "xloader",209.offset = 0, /* Offset = 0x00000 */210.size = 4 * NAND_BLOCK_SIZE,211.mask_flags = MTD_WRITEABLE212},213{214.name = "uboot",215.offset = MTDPART_OFS_APPEND, /* Offset = 0x80000 */216.size = 15 * NAND_BLOCK_SIZE,217},218{219.name = "uboot environment",220.offset = MTDPART_OFS_APPEND, /* Offset = 0x260000 */221.size = 2 * NAND_BLOCK_SIZE,222},223{224.name = "linux",225.offset = MTDPART_OFS_APPEND, /* Offset = 0x2A0000 */226.size = 32 * NAND_BLOCK_SIZE,227},228{229.name = "rootfs",230.offset = MTDPART_OFS_APPEND, /* Offset = 0x6A0000 */231.size = MTDPART_SIZ_FULL,232},233};234235static struct omap_nand_platform_data cm_t3517_nand_data = {236.parts = cm_t3517_nand_partitions,237.nr_parts = ARRAY_SIZE(cm_t3517_nand_partitions),238.dma_channel = -1, /* disable DMA in OMAP NAND driver */239.cs = 0,240};241242static void __init cm_t3517_init_nand(void)243{244if (gpmc_nand_init(&cm_t3517_nand_data) < 0)245pr_err("CM-T3517: NAND initialization failed\n");246}247#else248static inline void cm_t3517_init_nand(void) {}249#endif250251static struct omap_board_config_kernel cm_t3517_config[] __initdata = {252};253254static void __init cm_t3517_init_early(void)255{256omap2_init_common_infrastructure();257omap2_init_common_devices(NULL, NULL);258}259260#ifdef CONFIG_OMAP_MUX261static struct omap_board_mux board_mux[] __initdata = {262/* GPIO186 - Green LED */263OMAP3_MUX(SYS_CLKOUT2, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),264265/* RTC GPIOs: */266/* IO - GPIO153 */267OMAP3_MUX(MCBSP4_DR, OMAP_MUX_MODE4 | OMAP_PIN_INPUT),268/* WR# - GPIO154 */269OMAP3_MUX(MCBSP4_DX, OMAP_MUX_MODE4 | OMAP_PIN_INPUT),270/* RD# - GPIO53 */271OMAP3_MUX(GPMC_NCS2, OMAP_MUX_MODE4 | OMAP_PIN_INPUT),272/* CS# - GPIO163 */273OMAP3_MUX(UART3_CTS_RCTX, OMAP_MUX_MODE4 | OMAP_PIN_INPUT),274/* CS EN - GPIO160 */275OMAP3_MUX(MCBSP_CLKS, OMAP_MUX_MODE4 | OMAP_PIN_INPUT),276277/* HSUSB1 RESET */278OMAP3_MUX(UART2_TX, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),279/* HSUSB2 RESET */280OMAP3_MUX(UART2_RX, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),281/* CM-T3517 USB HUB nRESET */282OMAP3_MUX(MCBSP4_CLKX, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),283284{ .reg_offset = OMAP_MUX_TERMINATOR },285};286#endif287288static void __init cm_t3517_init(void)289{290omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);291omap_serial_init();292omap_board_config = cm_t3517_config;293omap_board_config_size = ARRAY_SIZE(cm_t3517_config);294cm_t3517_init_leds();295cm_t3517_init_nand();296cm_t3517_init_rtc();297cm_t3517_init_usbh();298cm_t3517_init_hecc();299}300301MACHINE_START(CM_T3517, "Compulab CM-T3517")302.boot_params = 0x80000100,303.reserve = omap_reserve,304.map_io = omap3_map_io,305.init_early = cm_t3517_init_early,306.init_irq = omap_init_irq,307.init_machine = cm_t3517_init,308.timer = &omap_timer,309MACHINE_END310311312