Path: blob/master/arch/arm/mach-mx5/eukrea_mbimx51-baseboard.c
10817 views
/*1*2* Copyright (C) 2010 Eric Bénard <[email protected]>3*4* The code contained herein is licensed under the GNU General Public5* License. You may obtain a copy of the GNU General Public License6* Version 2 or later at the following locations:7*8* http://www.opensource.org/licenses/gpl-license.html9* http://www.gnu.org/copyleft/gpl.html10*/1112#include <linux/init.h>13#include <linux/platform_device.h>14#include <linux/serial_8250.h>15#include <linux/i2c.h>16#include <linux/gpio.h>17#include <linux/io.h>18#include <linux/interrupt.h>19#include <linux/irq.h>20#include <linux/i2c/tsc2007.h>21#include <linux/leds.h>2223#include <mach/common.h>24#include <mach/hardware.h>25#include <mach/iomux-mx51.h>2627#include <asm/mach/arch.h>2829#include "devices-imx51.h"30#include "devices.h"3132#define MBIMX51_TSC2007_GPIO IMX_GPIO_NR(3, 30)33#define MBIMX51_TSC2007_IRQ (MXC_INTERNAL_IRQS + MBIMX51_TSC2007_GPIO)34#define MBIMX51_LED0 IMX_GPIO_NR(3, 5)35#define MBIMX51_LED1 IMX_GPIO_NR(3, 6)36#define MBIMX51_LED2 IMX_GPIO_NR(3, 7)37#define MBIMX51_LED3 IMX_GPIO_NR(3, 8)3839static struct gpio_led mbimx51_leds[] = {40{41.name = "led0",42.default_trigger = "heartbeat",43.active_low = 1,44.gpio = MBIMX51_LED0,45},46{47.name = "led1",48.default_trigger = "nand-disk",49.active_low = 1,50.gpio = MBIMX51_LED1,51},52{53.name = "led2",54.default_trigger = "mmc0",55.active_low = 1,56.gpio = MBIMX51_LED2,57},58{59.name = "led3",60.default_trigger = "default-on",61.active_low = 1,62.gpio = MBIMX51_LED3,63},64};6566static struct gpio_led_platform_data mbimx51_leds_info = {67.leds = mbimx51_leds,68.num_leds = ARRAY_SIZE(mbimx51_leds),69};7071static struct platform_device mbimx51_leds_gpio = {72.name = "leds-gpio",73.id = -1,74.dev = {75.platform_data = &mbimx51_leds_info,76},77};7879static struct platform_device *devices[] __initdata = {80&mbimx51_leds_gpio,81};8283static iomux_v3_cfg_t mbimx51_pads[] = {84/* UART2 */85MX51_PAD_UART2_RXD__UART2_RXD,86MX51_PAD_UART2_TXD__UART2_TXD,8788/* UART3 */89MX51_PAD_UART3_RXD__UART3_RXD,90MX51_PAD_UART3_TXD__UART3_TXD,91MX51_PAD_KEY_COL4__UART3_RTS,92MX51_PAD_KEY_COL5__UART3_CTS,9394/* TSC2007 IRQ */95MX51_PAD_NANDF_D10__GPIO3_30,9697/* LEDS */98MX51_PAD_DISPB2_SER_DIN__GPIO3_5,99MX51_PAD_DISPB2_SER_DIO__GPIO3_6,100MX51_PAD_DISPB2_SER_CLK__GPIO3_7,101MX51_PAD_DISPB2_SER_RS__GPIO3_8,102103/* KPP */104MX51_PAD_KEY_ROW0__KEY_ROW0,105MX51_PAD_KEY_ROW1__KEY_ROW1,106MX51_PAD_KEY_ROW2__KEY_ROW2,107MX51_PAD_KEY_ROW3__KEY_ROW3,108MX51_PAD_KEY_COL0__KEY_COL0,109MX51_PAD_KEY_COL1__KEY_COL1,110MX51_PAD_KEY_COL2__KEY_COL2,111MX51_PAD_KEY_COL3__KEY_COL3,112113/* SD 1 */114MX51_PAD_SD1_CMD__SD1_CMD,115MX51_PAD_SD1_CLK__SD1_CLK,116MX51_PAD_SD1_DATA0__SD1_DATA0,117MX51_PAD_SD1_DATA1__SD1_DATA1,118MX51_PAD_SD1_DATA2__SD1_DATA2,119MX51_PAD_SD1_DATA3__SD1_DATA3,120121/* SD 2 */122MX51_PAD_SD2_CMD__SD2_CMD,123MX51_PAD_SD2_CLK__SD2_CLK,124MX51_PAD_SD2_DATA0__SD2_DATA0,125MX51_PAD_SD2_DATA1__SD2_DATA1,126MX51_PAD_SD2_DATA2__SD2_DATA2,127MX51_PAD_SD2_DATA3__SD2_DATA3,128};129130static const struct imxuart_platform_data uart_pdata __initconst = {131.flags = IMXUART_HAVE_RTSCTS,132};133134static int mbimx51_keymap[] = {135KEY(0, 0, KEY_1),136KEY(0, 1, KEY_2),137KEY(0, 2, KEY_3),138KEY(0, 3, KEY_UP),139140KEY(1, 0, KEY_4),141KEY(1, 1, KEY_5),142KEY(1, 2, KEY_6),143KEY(1, 3, KEY_LEFT),144145KEY(2, 0, KEY_7),146KEY(2, 1, KEY_8),147KEY(2, 2, KEY_9),148KEY(2, 3, KEY_RIGHT),149150KEY(3, 0, KEY_0),151KEY(3, 1, KEY_DOWN),152KEY(3, 2, KEY_ESC),153KEY(3, 3, KEY_ENTER),154};155156static const struct matrix_keymap_data mbimx51_map_data __initconst = {157.keymap = mbimx51_keymap,158.keymap_size = ARRAY_SIZE(mbimx51_keymap),159};160161static int tsc2007_get_pendown_state(void)162{163return !gpio_get_value(MBIMX51_TSC2007_GPIO);164}165166struct tsc2007_platform_data tsc2007_data = {167.model = 2007,168.x_plate_ohms = 180,169.get_pendown_state = tsc2007_get_pendown_state,170};171172static struct i2c_board_info mbimx51_i2c_devices[] = {173{174I2C_BOARD_INFO("tsc2007", 0x49),175.irq = MBIMX51_TSC2007_IRQ,176.platform_data = &tsc2007_data,177}, {178I2C_BOARD_INFO("tlv320aic23", 0x1a),179},180};181182/*183* baseboard initialization.184*/185void __init eukrea_mbimx51_baseboard_init(void)186{187mxc_iomux_v3_setup_multiple_pads(mbimx51_pads,188ARRAY_SIZE(mbimx51_pads));189190imx51_add_imx_uart(1, NULL);191imx51_add_imx_uart(2, &uart_pdata);192193gpio_request(MBIMX51_LED0, "LED0");194gpio_direction_output(MBIMX51_LED0, 1);195gpio_free(MBIMX51_LED0);196gpio_request(MBIMX51_LED1, "LED1");197gpio_direction_output(MBIMX51_LED1, 1);198gpio_free(MBIMX51_LED1);199gpio_request(MBIMX51_LED2, "LED2");200gpio_direction_output(MBIMX51_LED2, 1);201gpio_free(MBIMX51_LED2);202gpio_request(MBIMX51_LED3, "LED3");203gpio_direction_output(MBIMX51_LED3, 1);204gpio_free(MBIMX51_LED3);205206platform_add_devices(devices, ARRAY_SIZE(devices));207208imx51_add_imx_keypad(&mbimx51_map_data);209210gpio_request(MBIMX51_TSC2007_GPIO, "tsc2007_irq");211gpio_direction_input(MBIMX51_TSC2007_GPIO);212irq_set_irq_type(MBIMX51_TSC2007_IRQ, IRQF_TRIGGER_FALLING);213i2c_register_board_info(1, mbimx51_i2c_devices,214ARRAY_SIZE(mbimx51_i2c_devices));215216imx51_add_sdhci_esdhc_imx(0, NULL);217imx51_add_sdhci_esdhc_imx(1, NULL);218}219220221