Path: blob/master/arch/arm/mach-omap2/board-rm680.c
10817 views
/*1* Board support file for Nokia RM-680.2*3* Copyright (C) 2010 Nokia4*5* This program is free software; you can redistribute it and/or modify6* it under the terms of the GNU General Public License version 2 as7* published by the Free Software Foundation.8*/910#include <linux/io.h>11#include <linux/i2c.h>12#include <linux/gpio.h>13#include <linux/init.h>14#include <linux/i2c/twl.h>15#include <linux/platform_device.h>16#include <linux/regulator/fixed.h>17#include <linux/regulator/machine.h>18#include <linux/regulator/consumer.h>1920#include <asm/mach/arch.h>21#include <asm/mach-types.h>2223#include <plat/i2c.h>24#include <plat/mmc.h>25#include <plat/usb.h>26#include <plat/gpmc.h>27#include <plat/common.h>28#include <plat/onenand.h>2930#include "mux.h"31#include "hsmmc.h"32#include "sdram-nokia.h"33#include "common-board-devices.h"3435static struct regulator_consumer_supply rm680_vemmc_consumers[] = {36REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1"),37};3839/* Fixed regulator for internal eMMC */40static struct regulator_init_data rm680_vemmc = {41.constraints = {42.name = "rm680_vemmc",43.valid_modes_mask = REGULATOR_MODE_NORMAL44| REGULATOR_MODE_STANDBY,45.valid_ops_mask = REGULATOR_CHANGE_STATUS46| REGULATOR_CHANGE_MODE,47},48.num_consumer_supplies = ARRAY_SIZE(rm680_vemmc_consumers),49.consumer_supplies = rm680_vemmc_consumers,50};5152static struct fixed_voltage_config rm680_vemmc_config = {53.supply_name = "VEMMC",54.microvolts = 2900000,55.gpio = 157,56.startup_delay = 150,57.enable_high = 1,58.init_data = &rm680_vemmc,59};6061static struct platform_device rm680_vemmc_device = {62.name = "reg-fixed-voltage",63.dev = {64.platform_data = &rm680_vemmc_config,65},66};6768static struct platform_device *rm680_peripherals_devices[] __initdata = {69&rm680_vemmc_device,70};7172/* TWL */73static struct twl4030_gpio_platform_data rm680_gpio_data = {74.gpio_base = OMAP_MAX_GPIO_LINES,75.irq_base = TWL4030_GPIO_IRQ_BASE,76.irq_end = TWL4030_GPIO_IRQ_END,77.pullups = BIT(0),78.pulldowns = BIT(1) | BIT(2) | BIT(8) | BIT(15),79};8081static struct twl4030_usb_data rm680_usb_data = {82.usb_mode = T2_USB_MODE_ULPI,83};8485static struct twl4030_platform_data rm680_twl_data = {86.irq_base = TWL4030_IRQ_BASE,87.irq_end = TWL4030_IRQ_END,88.gpio = &rm680_gpio_data,89.usb = &rm680_usb_data,90/* add rest of the children here */91};9293static void __init rm680_i2c_init(void)94{95omap_pmic_init(1, 2900, "twl5031", INT_34XX_SYS_NIRQ, &rm680_twl_data);96omap_register_i2c_bus(2, 400, NULL, 0);97omap_register_i2c_bus(3, 400, NULL, 0);98}99100#if defined(CONFIG_MTD_ONENAND_OMAP2) || \101defined(CONFIG_MTD_ONENAND_OMAP2_MODULE)102static struct omap_onenand_platform_data board_onenand_data[] = {103{104.gpio_irq = 65,105.flags = ONENAND_SYNC_READWRITE,106}107};108#endif109110/* eMMC */111static struct omap2_hsmmc_info mmc[] __initdata = {112{113.name = "internal",114.mmc = 2,115.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_MMC_HIGHSPEED,116.gpio_cd = -EINVAL,117.gpio_wp = -EINVAL,118},119{ /* Terminator */ }120};121122static void __init rm680_peripherals_init(void)123{124platform_add_devices(rm680_peripherals_devices,125ARRAY_SIZE(rm680_peripherals_devices));126rm680_i2c_init();127gpmc_onenand_init(board_onenand_data);128omap2_hsmmc_init(mmc);129}130131static void __init rm680_init_early(void)132{133struct omap_sdrc_params *sdrc_params;134135omap2_init_common_infrastructure();136sdrc_params = nokia_get_sdram_timings();137omap2_init_common_devices(sdrc_params, sdrc_params);138}139140#ifdef CONFIG_OMAP_MUX141static struct omap_board_mux board_mux[] __initdata = {142{ .reg_offset = OMAP_MUX_TERMINATOR },143};144#endif145146static void __init rm680_init(void)147{148omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);149omap_serial_init();150usb_musb_init(NULL);151rm680_peripherals_init();152}153154static void __init rm680_map_io(void)155{156omap2_set_globals_3xxx();157omap34xx_map_common_io();158}159160MACHINE_START(NOKIA_RM680, "Nokia RM-680 board")161.boot_params = 0x80000100,162.reserve = omap_reserve,163.map_io = rm680_map_io,164.init_early = rm680_init_early,165.init_irq = omap_init_irq,166.init_machine = rm680_init,167.timer = &omap_timer,168MACHINE_END169170171