linux/arch/arm/mach-omap2/board-2430sdp.c
<<
>>
Prefs
   1/*
   2 * linux/arch/arm/mach-omap2/board-2430sdp.c
   3 *
   4 * Copyright (C) 2006 Texas Instruments
   5 *
   6 * Modified from mach-omap2/board-generic.c
   7 *
   8 * Initial Code : Based on a patch from Komal Shah and Richard Woodruff
   9 * Updated the Code for 2430 SDP : Syed Mohammed Khasim
  10 *
  11 * This program is free software; you can redistribute it and/or modify
  12 * it under the terms of the GNU General Public License version 2 as
  13 * published by the Free Software Foundation.
  14 */
  15
  16#include <linux/kernel.h>
  17#include <linux/init.h>
  18#include <linux/platform_device.h>
  19#include <linux/mtd/mtd.h>
  20#include <linux/mtd/partitions.h>
  21#include <linux/mtd/physmap.h>
  22#include <linux/mmc/host.h>
  23#include <linux/delay.h>
  24#include <linux/i2c/twl.h>
  25#include <linux/regulator/machine.h>
  26#include <linux/err.h>
  27#include <linux/clk.h>
  28#include <linux/io.h>
  29#include <linux/gpio.h>
  30#include <linux/usb/phy.h>
  31
  32#include <asm/mach-types.h>
  33#include <asm/mach/arch.h>
  34#include <asm/mach/map.h>
  35
  36#include "common.h"
  37#include "gpmc.h"
  38#include "gpmc-smc91x.h"
  39
  40#include <video/omapdss.h>
  41#include <video/omap-panel-data.h>
  42
  43#include "mux.h"
  44#include "hsmmc.h"
  45#include "common-board-devices.h"
  46
  47#define SDP2430_CS0_BASE        0x04000000
  48#define SECONDARY_LCD_GPIO              147
  49
  50static struct mtd_partition sdp2430_partitions[] = {
  51        /* bootloader (U-Boot, etc) in first sector */
  52        {
  53                .name           = "bootloader",
  54                .offset         = 0,
  55                .size           = SZ_256K,
  56                .mask_flags     = MTD_WRITEABLE,        /* force read-only */
  57         },
  58        /* bootloader params in the next sector */
  59        {
  60                .name           = "params",
  61                .offset         = MTDPART_OFS_APPEND,
  62                .size           = SZ_128K,
  63                .mask_flags     = 0,
  64         },
  65        /* kernel */
  66        {
  67                .name           = "kernel",
  68                .offset         = MTDPART_OFS_APPEND,
  69                .size           = SZ_2M,
  70                .mask_flags     = 0
  71        },
  72        /* file system */
  73        {
  74                .name           = "filesystem",
  75                .offset         = MTDPART_OFS_APPEND,
  76                .size           = MTDPART_SIZ_FULL,
  77                .mask_flags     = 0
  78        }
  79};
  80
  81static struct physmap_flash_data sdp2430_flash_data = {
  82        .width          = 2,
  83        .parts          = sdp2430_partitions,
  84        .nr_parts       = ARRAY_SIZE(sdp2430_partitions),
  85};
  86
  87static struct resource sdp2430_flash_resource = {
  88        .start          = SDP2430_CS0_BASE,
  89        .end            = SDP2430_CS0_BASE + SZ_64M - 1,
  90        .flags          = IORESOURCE_MEM,
  91};
  92
  93static struct platform_device sdp2430_flash_device = {
  94        .name           = "physmap-flash",
  95        .id             = 0,
  96        .dev = {
  97                .platform_data  = &sdp2430_flash_data,
  98        },
  99        .num_resources  = 1,
 100        .resource       = &sdp2430_flash_resource,
 101};
 102
 103static struct platform_device *sdp2430_devices[] __initdata = {
 104        &sdp2430_flash_device,
 105};
 106
 107/* LCD */
 108#define SDP2430_LCD_PANEL_BACKLIGHT_GPIO        91
 109#define SDP2430_LCD_PANEL_ENABLE_GPIO           154
 110
 111static struct panel_generic_dpi_data sdp2430_panel_data = {
 112        .name                   = "nec_nl2432dr22-11b",
 113        .num_gpios              = 2,
 114        .gpios                  = {
 115                SDP2430_LCD_PANEL_ENABLE_GPIO,
 116                SDP2430_LCD_PANEL_BACKLIGHT_GPIO,
 117        },
 118};
 119
 120static struct omap_dss_device sdp2430_lcd_device = {
 121        .name                   = "lcd",
 122        .driver_name            = "generic_dpi_panel",
 123        .type                   = OMAP_DISPLAY_TYPE_DPI,
 124        .phy.dpi.data_lines     = 16,
 125        .data                   = &sdp2430_panel_data,
 126};
 127
 128static struct omap_dss_device *sdp2430_dss_devices[] = {
 129        &sdp2430_lcd_device,
 130};
 131
 132static struct omap_dss_board_info sdp2430_dss_data = {
 133        .num_devices    = ARRAY_SIZE(sdp2430_dss_devices),
 134        .devices        = sdp2430_dss_devices,
 135        .default_device = &sdp2430_lcd_device,
 136};
 137
 138#if IS_ENABLED(CONFIG_SMC91X)
 139
 140static struct omap_smc91x_platform_data board_smc91x_data = {
 141        .cs             = 5,
 142        .gpio_irq       = 149,
 143        .flags          = GPMC_MUX_ADD_DATA | GPMC_TIMINGS_SMC91C96 |
 144                                IORESOURCE_IRQ_LOWLEVEL,
 145
 146};
 147
 148static void __init board_smc91x_init(void)
 149{
 150        omap_mux_init_gpio(149, OMAP_PIN_INPUT);
 151        gpmc_smc91x_init(&board_smc91x_data);
 152}
 153
 154#else
 155
 156static inline void board_smc91x_init(void)
 157{
 158}
 159
 160#endif
 161
 162static struct regulator_consumer_supply sdp2430_vmmc1_supplies[] = {
 163        REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"),
 164};
 165
 166/* VMMC1 for OMAP VDD_MMC1 (i/o) and MMC1 card */
 167static struct regulator_init_data sdp2430_vmmc1 = {
 168        .constraints = {
 169                .min_uV                 = 1850000,
 170                .max_uV                 = 3150000,
 171                .valid_modes_mask       = REGULATOR_MODE_NORMAL
 172                                        | REGULATOR_MODE_STANDBY,
 173                .valid_ops_mask         = REGULATOR_CHANGE_VOLTAGE
 174                                        | REGULATOR_CHANGE_MODE
 175                                        | REGULATOR_CHANGE_STATUS,
 176        },
 177        .num_consumer_supplies  = ARRAY_SIZE(sdp2430_vmmc1_supplies),
 178        .consumer_supplies      = &sdp2430_vmmc1_supplies[0],
 179};
 180
 181static struct twl4030_gpio_platform_data sdp2430_gpio_data = {
 182};
 183
 184static struct twl4030_platform_data sdp2430_twldata = {
 185        /* platform_data for children goes here */
 186        .gpio           = &sdp2430_gpio_data,
 187        .vmmc1          = &sdp2430_vmmc1,
 188};
 189
 190static struct i2c_board_info __initdata sdp2430_i2c1_boardinfo[] = {
 191        {
 192                I2C_BOARD_INFO("isp1301_omap", 0x2D),
 193                .flags = I2C_CLIENT_WAKE,
 194        },
 195};
 196
 197static int __init omap2430_i2c_init(void)
 198{
 199        sdp2430_i2c1_boardinfo[0].irq = gpio_to_irq(78);
 200        omap_register_i2c_bus(1, 100, sdp2430_i2c1_boardinfo,
 201                        ARRAY_SIZE(sdp2430_i2c1_boardinfo));
 202        omap_pmic_init(2, 100, "twl4030", 7 + OMAP_INTC_START,
 203                        &sdp2430_twldata);
 204        return 0;
 205}
 206
 207static struct omap2_hsmmc_info mmc[] __initdata = {
 208        {
 209                .mmc            = 1,
 210                .caps           = MMC_CAP_4_BIT_DATA,
 211                .gpio_cd        = -EINVAL,
 212                .gpio_wp        = -EINVAL,
 213                .ext_clock      = 1,
 214        },
 215        {}      /* Terminator */
 216};
 217
 218#ifdef CONFIG_OMAP_MUX
 219static struct omap_board_mux board_mux[] __initdata = {
 220        { .reg_offset = OMAP_MUX_TERMINATOR },
 221};
 222#endif
 223
 224static void __init omap_2430sdp_init(void)
 225{
 226        omap2430_mux_init(board_mux, OMAP_PACKAGE_ZAC);
 227
 228        omap2430_i2c_init();
 229
 230        platform_add_devices(sdp2430_devices, ARRAY_SIZE(sdp2430_devices));
 231        omap_serial_init();
 232        omap_sdrc_init(NULL, NULL);
 233        omap_hsmmc_init(mmc);
 234
 235        omap_mux_init_signal("usb0hs_stp", OMAP_PULL_ENA | OMAP_PULL_UP);
 236        usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb");
 237        usb_musb_init(NULL);
 238
 239        board_smc91x_init();
 240
 241        /* Turn off secondary LCD backlight */
 242        gpio_request_one(SECONDARY_LCD_GPIO, GPIOF_OUT_INIT_LOW,
 243                         "Secondary LCD backlight");
 244
 245        omap_display_init(&sdp2430_dss_data);
 246}
 247
 248MACHINE_START(OMAP_2430SDP, "OMAP2430 sdp2430 board")
 249        /* Maintainer: Syed Khasim - Texas Instruments Inc */
 250        .atag_offset    = 0x100,
 251        .reserve        = omap_reserve,
 252        .map_io         = omap243x_map_io,
 253        .init_early     = omap2430_init_early,
 254        .init_irq       = omap2_init_irq,
 255        .handle_irq     = omap2_intc_handle_irq,
 256        .init_machine   = omap_2430sdp_init,
 257        .init_late      = omap2430_init_late,
 258        .init_time      = omap2_sync32k_timer_init,
 259        .restart        = omap2xxx_restart,
 260MACHINE_END
 261