linux/arch/arm/mach-mmp/teton_bga.c
<<
>>
Prefs
   1/*
   2 *  linux/arch/arm/mach-mmp/teton_bga.c
   3 *
   4 *  Support for the Marvell PXA168 Teton BGA Development Platform.
   5 *
   6 *  Author: Mark F. Brown <mark.brown314@gmail.com>
   7 *
   8 *  This code is based on aspenite.c
   9 *
  10 *  This program is free software; you can redistribute it and/or modify
  11 *  it under the terms of the GNU General Public License version 2 as
  12 *  publishhed by the Free Software Foundation.
  13 */
  14
  15#include <linux/init.h>
  16#include <linux/kernel.h>
  17#include <linux/platform_device.h>
  18#include <linux/gpio.h>
  19#include <linux/gpio-pxa.h>
  20#include <linux/input.h>
  21#include <linux/platform_data/keypad-pxa27x.h>
  22#include <linux/i2c.h>
  23
  24#include <asm/mach-types.h>
  25#include <asm/mach/arch.h>
  26#include "addr-map.h"
  27#include "mfp-pxa168.h"
  28#include "pxa168.h"
  29#include "teton_bga.h"
  30#include "irqs.h"
  31
  32#include "common.h"
  33
  34static unsigned long teton_bga_pin_config[] __initdata = {
  35        /* UART1 */
  36        GPIO107_UART1_TXD,
  37        GPIO108_UART1_RXD,
  38
  39        /* Keypad */
  40        GPIO109_KP_MKIN1,
  41        GPIO110_KP_MKIN0,
  42        GPIO111_KP_MKOUT7,
  43        GPIO112_KP_MKOUT6,
  44
  45        /* I2C Bus */
  46        GPIO105_CI2C_SDA,
  47        GPIO106_CI2C_SCL,
  48
  49        /* RTC */
  50        GPIO78_GPIO,
  51};
  52
  53static struct pxa_gpio_platform_data pxa168_gpio_pdata = {
  54        .irq_base       = MMP_GPIO_TO_IRQ(0),
  55};
  56
  57static unsigned int teton_bga_matrix_key_map[] = {
  58        KEY(0, 6, KEY_ESC),
  59        KEY(0, 7, KEY_ENTER),
  60        KEY(1, 6, KEY_LEFT),
  61        KEY(1, 7, KEY_RIGHT),
  62};
  63
  64static struct matrix_keymap_data teton_bga_matrix_keymap_data = {
  65        .keymap                 = teton_bga_matrix_key_map,
  66        .keymap_size            = ARRAY_SIZE(teton_bga_matrix_key_map),
  67};
  68
  69static struct pxa27x_keypad_platform_data teton_bga_keypad_info __initdata = {
  70        .matrix_key_rows        = 2,
  71        .matrix_key_cols        = 8,
  72        .matrix_keymap_data     = &teton_bga_matrix_keymap_data,
  73        .debounce_interval      = 30,
  74};
  75
  76static struct i2c_board_info teton_bga_i2c_info[] __initdata = {
  77        {
  78                I2C_BOARD_INFO("ds1337", 0x68),
  79                .irq = MMP_GPIO_TO_IRQ(RTC_INT_GPIO)
  80        },
  81};
  82
  83static void __init teton_bga_init(void)
  84{
  85        mfp_config(ARRAY_AND_SIZE(teton_bga_pin_config));
  86
  87        /* on-chip devices */
  88        pxa168_add_uart(1);
  89        pxa168_add_keypad(&teton_bga_keypad_info);
  90        pxa168_add_twsi(0, NULL, ARRAY_AND_SIZE(teton_bga_i2c_info));
  91        platform_device_add_data(&pxa168_device_gpio, &pxa168_gpio_pdata,
  92                                 sizeof(struct pxa_gpio_platform_data));
  93        platform_device_register(&pxa168_device_gpio);
  94}
  95
  96MACHINE_START(TETON_BGA, "PXA168-based Teton BGA Development Platform")
  97        .map_io         = mmp_map_io,
  98        .nr_irqs        = MMP_NR_IRQS,
  99        .init_irq       = pxa168_init_irq,
 100        .init_time      = pxa168_timer_init,
 101        .init_machine   = teton_bga_init,
 102        .restart        = pxa168_restart,
 103MACHINE_END
 104