From: Tony Lindgren <tony@atomide.com>
To: Gregoire Gentil <gregoire@gentil.com>
Cc: linux-omap@vger.kernel.org, Tim Yamin <plasmaroo@gmail.com>
Subject: Re: [PATCH 2/5] AI TB: Board file of the Always Innovating OMAP3-based Touch Book.
Date: Mon, 16 Nov 2009 13:18:15 -0800 [thread overview]
Message-ID: <20091116211814.GS3684@atomide.com> (raw)
In-Reply-To: <1258345826.9089.17.camel@gregoire-laptop>
* Gregoire Gentil <gregoire@gentil.com> [091115 20:29]:
> Board file of the Always Innovating OMAP3-based Touch Book.
Cool. Looks like the patch needs to be formatted with tabs,
see Documentation/Submit* files.
Then run scripts/checkpatch.pl --strict /path/to/your/patch
on each of them to check for obvious issues :)
Then resend the patches to the related mailing lists:
To linux-omap list:
1. This patch reformatted
2. Defconfig
To linux-input list with linux-omap Cc'd:
3. ...
4. ...
To alsa-devel list with linux-omap Cc'd:
5. ...
Please see the MAINTAINERS file for the file paths of the
maintainers and mailing lists.
Regards,
Tony
>
>
>
>
> Signed-off-by: Gregoire Gentil <gregoire@gentil.com>
> ---
> arch/arm/mach-omap2/board-omap3touchbook.c | 683
> ++++++++++++++++++++++++++++
> 1 files changed, 683 insertions(+), 0 deletions(-)
> create mode 100644 arch/arm/mach-omap2/board-omap3touchbook.c
>
> diff --git a/arch/arm/mach-omap2/board-omap3touchbook.c
> b/arch/arm/mach-omap2/board-omap3touchbook.c
> new file mode 100644
> index 0000000..ad3ef6e
> --- /dev/null
> +++ b/arch/arm/mach-omap2/board-omap3touchbook.c
> @@ -0,0 +1,683 @@
> +/*
> + * linux/arch/arm/mach-omap2/board-omap3touchbook.c
> + *
> + * Copyright (C) 2009 Always Innovating
> + *
> + * Modified from mach-omap2/board-omap3beagleboard.c
> + *
> + * Initial code: Grégoire Gentil, Tim Yamin
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + */
> +
> +#include <linux/kernel.h>
> +#include <linux/init.h>
> +#include <linux/platform_device.h>
> +#include <linux/delay.h>
> +#include <linux/err.h>
> +#include <linux/clk.h>
> +#include <linux/io.h>
> +#include <linux/leds.h>
> +#include <linux/gpio.h>
> +#include <linux/input.h>
> +#include <linux/gpio_keys.h>
> +
> +#include <linux/mtd/mtd.h>
> +#include <linux/mtd/partitions.h>
> +#include <linux/mtd/nand.h>
> +
> +#include <plat/mcspi.h>
> +#include <linux/spi/spi.h>
> +
> +#include <linux/spi/ads7846.h>
> +#include <linux/mma7455l.h>
> +
> +#include <plat/dmtimer.h>
> +#include <linux/backlight.h>
> +
> +#include <linux/regulator/machine.h>
> +#include <linux/i2c/twl4030.h>
> +
> +#include <mach/hardware.h>
> +#include <asm/mach-types.h>
> +#include <asm/mach/arch.h>
> +#include <asm/mach/map.h>
> +#include <asm/mach/flash.h>
> +
> +#include <plat/board.h>
> +#include <plat/common.h>
> +#include <plat/gpmc.h>
> +#include <plat/nand.h>
> +#include <plat/mux.h>
> +#include <plat/usb.h>
> +#include <plat/timer-gp.h>
> +
> +#include "mmc-twl4030.h"
> +
> +#include <asm/setup.h>
> +
> +#define GPMC_CS0_BASE 0x60
> +#define GPMC_CS_SIZE 0x30
> +
> +#define NAND_BLOCK_SIZE SZ_128K
> +
> +#define OMAP3_AC_GPIO 136
> +#define OMAP3_TS_GPIO 162
> +#define TB_BL_PWM_TIMER 9
> +#define TB_KILL_POWER_GPIO 168
> +
> +unsigned long touchbook_revision;
> +
> +static struct mtd_partition omap3touchbook_nand_partitions[] = {
> + /* All the partition sizes are listed in terms of NAND block size */
> + {
> + .name = "X-Loader",
> + .offset = 0,
> + .size = 4 * NAND_BLOCK_SIZE,
> + .mask_flags = MTD_WRITEABLE, /* force read-only */
> + },
> + {
> + .name = "U-Boot",
> + .offset = MTDPART_OFS_APPEND, /* Offset = 0x80000 */
> + .size = 15 * NAND_BLOCK_SIZE,
> + .mask_flags = MTD_WRITEABLE, /* force read-only */
> + },
> + {
> + .name = "U-Boot Env",
> + .offset = MTDPART_OFS_APPEND, /* Offset = 0x260000 */
> + .size = 1 * NAND_BLOCK_SIZE,
> + },
> + {
> + .name = "Kernel",
> + .offset = MTDPART_OFS_APPEND, /* Offset = 0x280000 */
> + .size = 32 * NAND_BLOCK_SIZE,
> + },
> + {
> + .name = "File System",
> + .offset = MTDPART_OFS_APPEND, /* Offset = 0x680000 */
> + .size = MTDPART_SIZ_FULL,
> + },
> +};
> +
> +static struct omap_nand_platform_data omap3touchbook_nand_data = {
> + .options = NAND_BUSWIDTH_16,
> + .parts = omap3touchbook_nand_partitions,
> + .nr_parts = ARRAY_SIZE(omap3touchbook_nand_partitions),
> + .dma_channel = -1, /* disable DMA in OMAP NAND driver */
> + .nand_setup = NULL,
> + .dev_ready = NULL,
> +};
> +
> +static struct resource omap3touchbook_nand_resource = {
> + .flags = IORESOURCE_MEM,
> +};
> +
> +static struct platform_device omap3touchbook_nand_device = {
> + .name = "omap2-nand",
> + .id = -1,
> + .dev = {
> + .platform_data = &omap3touchbook_nand_data,
> + },
> + .num_resources = 1,
> + .resource = &omap3touchbook_nand_resource,
> +};
> +
> +#include "sdram-micron-mt46h32m32lf-6.h"
> +
> +static struct twl4030_hsmmc_info mmc[] = {
> + {
> + .mmc = 1,
> + .wires = 8,
> + .gpio_wp = 29,
> + },
> + {} /* Terminator */
> +};
> +
> +static struct platform_device omap3_touchbook_lcd_device = {
> + .name = "omap3touchbook_lcd",
> + .id = -1,
> +};
> +
> +static struct omap_lcd_config omap3_touchbook_lcd_config __initdata = {
> + .ctrl_name = "internal",
> +};
> +
> +static struct regulator_consumer_supply touchbook_vmmc1_supply = {
> + .supply = "vmmc",
> +};
> +
> +static struct regulator_consumer_supply touchbook_vsim_supply = {
> + .supply = "vmmc_aux",
> +};
> +
> +static struct gpio_led gpio_leds[];
> +
> +static int touchbook_twl_gpio_setup(struct device *dev,
> + unsigned gpio, unsigned ngpio)
> +{
> + if (system_rev >= 0x20 && system_rev <= 0x34301000) {
> + omap_cfg_reg(AG9_34XX_GPIO23);
> + mmc[0].gpio_wp = 23;
> + } else {
> + omap_cfg_reg(AH8_34XX_GPIO29);
> + }
> + /* gpio + 0 is "mmc0_cd" (input/IRQ) */
> + mmc[0].gpio_cd = gpio + 0;
> + twl4030_mmc_init(mmc);
> +
> + /* link regulators to MMC adapters */
> + touchbook_vmmc1_supply.dev = mmc[0].dev;
> + touchbook_vsim_supply.dev = mmc[0].dev;
> +
> + /* REVISIT: need ehci-omap hooks for external VBUS
> + * power switch and overcurrent detect
> + */
> +
> + gpio_request(gpio + 1, "EHCI_nOC");
> + gpio_direction_input(gpio + 1);
> +
> + /* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, active low) */
> + gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR");
> + gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0);
> +
> + /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
> + gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
> +
> + return 0;
> +}
> +
> +static struct twl4030_gpio_platform_data touchbook_gpio_data = {
> + .gpio_base = OMAP_MAX_GPIO_LINES,
> + .irq_base = TWL4030_GPIO_IRQ_BASE,
> + .irq_end = TWL4030_GPIO_IRQ_END,
> + .use_leds = true,
> + .pullups = BIT(1),
> + .pulldowns = BIT(2) | BIT(6) | BIT(7) | BIT(8) | BIT(13)
> + | BIT(15) | BIT(16) | BIT(17),
> + .setup = touchbook_twl_gpio_setup,
> +};
> +
> +static struct regulator_consumer_supply touchbook_vdac_supply = {
> + .supply = "vdac",
> + .dev = &omap3_touchbook_lcd_device.dev,
> +};
> +
> +static struct regulator_consumer_supply touchbook_vdvi_supply = {
> + .supply = "vdvi",
> + .dev = &omap3_touchbook_lcd_device.dev,
> +};
> +
> +/* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max
> 220 mA) */
> +static struct regulator_init_data touchbook_vmmc1 = {
> + .constraints = {
> + .min_uV = 1850000,
> + .max_uV = 3150000,
> + .valid_modes_mask = REGULATOR_MODE_NORMAL
> + | REGULATOR_MODE_STANDBY,
> + .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
> + | REGULATOR_CHANGE_MODE
> + | REGULATOR_CHANGE_STATUS,
> + },
> + .num_consumer_supplies = 1,
> + .consumer_supplies = &touchbook_vmmc1_supply,
> +};
> +
> +/* VSIM for MMC1 pins DAT4..DAT7 (2 mA, plus card == max 50 mA) */
> +static struct regulator_init_data touchbook_vsim = {
> + .constraints = {
> + .min_uV = 1800000,
> + .max_uV = 3000000,
> + .valid_modes_mask = REGULATOR_MODE_NORMAL
> + | REGULATOR_MODE_STANDBY,
> + .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
> + | REGULATOR_CHANGE_MODE
> + | REGULATOR_CHANGE_STATUS,
> + },
> + .num_consumer_supplies = 1,
> + .consumer_supplies = &touchbook_vsim_supply,
> +};
> +
> +/* VDAC for DSS driving S-Video (8 mA unloaded, max 65 mA) */
> +static struct regulator_init_data touchbook_vdac = {
> + .constraints = {
> + .min_uV = 1800000,
> + .max_uV = 1800000,
> + .valid_modes_mask = REGULATOR_MODE_NORMAL
> + | REGULATOR_MODE_STANDBY,
> + .valid_ops_mask = REGULATOR_CHANGE_MODE
> + | REGULATOR_CHANGE_STATUS,
> + },
> + .num_consumer_supplies = 1,
> + .consumer_supplies = &touchbook_vdac_supply,
> +};
> +
> +/* VPLL2 for digital video outputs */
> +static struct regulator_init_data touchbook_vpll2 = {
> + .constraints = {
> + .name = "VDVI",
> + .min_uV = 1800000,
> + .max_uV = 1800000,
> + .valid_modes_mask = REGULATOR_MODE_NORMAL
> + | REGULATOR_MODE_STANDBY,
> + .valid_ops_mask = REGULATOR_CHANGE_MODE
> + | REGULATOR_CHANGE_STATUS,
> + },
> + .num_consumer_supplies = 1,
> + .consumer_supplies = &touchbook_vdvi_supply,
> +};
> +
> +static struct twl4030_usb_data touchbook_usb_data = {
> + .usb_mode = T2_USB_MODE_ULPI,
> +};
> +
> +static struct twl4030_codec_audio_data touchbook_audio_data = {
> + .audio_mclk = 26000000,
> +};
> +
> +static struct twl4030_codec_data touchbook_codec_data = {
> + .audio_mclk = 26000000,
> + .audio = &touchbook_audio_data,
> +};
> +
> +static struct twl4030_platform_data touchbook_twldata = {
> + .irq_base = TWL4030_IRQ_BASE,
> + .irq_end = TWL4030_IRQ_END,
> +
> + /* platform_data for children goes here */
> + .usb = &touchbook_usb_data,
> + .gpio = &touchbook_gpio_data,
> + .codec = &touchbook_codec_data,
> + .vmmc1 = &touchbook_vmmc1,
> + .vsim = &touchbook_vsim,
> + .vdac = &touchbook_vdac,
> + .vpll2 = &touchbook_vpll2,
> +};
> +
> +static struct i2c_board_info __initdata touchbook_i2c_boardinfo[] = {
> + {
> + I2C_BOARD_INFO("twl4030", 0x48),
> + .flags = I2C_CLIENT_WAKE,
> + .irq = INT_34XX_SYS_NIRQ,
> + .platform_data = &touchbook_twldata,
> + },
> +};
> +
> +static struct i2c_board_info __initdata touchBook_i2c_boardinfo[] = {
> + {
> + I2C_BOARD_INFO("bq27200", 0x55),
> + },
> +};
> +
> +static int __init omap3_touchbook_i2c_init(void)
> +{
> + /* Standard TouchBook bus */
> + omap_register_i2c_bus(1, 2600, touchbook_i2c_boardinfo,
> + ARRAY_SIZE(touchbook_i2c_boardinfo));
> +
> + /* Additional TouchBook bus */
> + omap_register_i2c_bus(3, 100, touchBook_i2c_boardinfo,
> + ARRAY_SIZE(touchBook_i2c_boardinfo));
> +
> + return 0;
> +}
> +
> +static void __init omap3_ads7846_init(void)
> +{
> + if (gpio_request(OMAP3_TS_GPIO, "ads7846_pen_down")) {
> + printk(KERN_ERR "Failed to request GPIO %d for "
> + "ads7846 pen down IRQ\n", OMAP3_TS_GPIO);
> + return;
> + }
> +
> + gpio_direction_input(OMAP3_TS_GPIO);
> + omap_set_gpio_debounce(OMAP3_TS_GPIO, 1);
> + omap_set_gpio_debounce_time(OMAP3_TS_GPIO, 0xa);
> +}
> +
> +static struct ads7846_platform_data ads7846_config = {
> + .x_min = 100,
> + .y_min = 265,
> + .x_max = 3950,
> + .y_max = 3750,
> + .x_plate_ohms = 40,
> + .pressure_max = 255,
> + .debounce_max = 10,
> + .debounce_tol = 5,
> + .debounce_rep = 1,
> + .gpio_pendown = OMAP3_TS_GPIO,
> + .keep_vref_on = 1,
> +};
> +
> +static struct omap2_mcspi_device_config ads7846_mcspi_config = {
> + .turbo_mode = 0,
> + .single_channel = 1, /* 0: slave, 1: master */
> +};
> +
> +static struct spi_board_info omap3_ads7846_spi_board_info[] __initdata
> = {
> + {
> + .modalias = "ads7846",
> + .bus_num = 4,
> + .chip_select = 0,
> + .max_speed_hz = 1500000,
> + .controller_data = &ads7846_mcspi_config,
> + .irq = OMAP_GPIO_IRQ(OMAP3_TS_GPIO),
> + .platform_data = &ads7846_config,
> + }
> +};
> +
> +static struct gpio_led gpio_leds[] = {
> + {
> + .name = "touchbook::usr0",
> + .default_trigger = "heartbeat",
> + .gpio = 150,
> + },
> + {
> + .name = "touchbook::usr1",
> + .default_trigger = "mmc0",
> + .gpio = 149,
> + },
> + {
> + .name = "touchbook::pmu_stat",
> + .gpio = -EINVAL, /* gets replaced */
> + .active_low = true,
> + },
> +};
> +
> +static struct gpio_led_platform_data gpio_led_info = {
> + .leds = gpio_leds,
> + .num_leds = ARRAY_SIZE(gpio_leds),
> +};
> +
> +static struct platform_device leds_gpio = {
> + .name = "leds-gpio",
> + .id = -1,
> + .dev = {
> + .platform_data = &gpio_led_info,
> + },
> +};
> +
> +static struct gpio_keys_button gpio_buttons[] = {
> + {
> + .code = BTN_EXTRA,
> + .gpio = 7,
> + .desc = "user",
> + .wakeup = 1,
> + },
> + {
> + .code = KEY_POWER,
> + .gpio = 183,
> + .desc = "power",
> + .wakeup = 1,
> + },
> +};
> +
> +static struct gpio_keys_platform_data gpio_key_info = {
> + .buttons = gpio_buttons,
> + .nbuttons = ARRAY_SIZE(gpio_buttons),
> +};
> +
> +static struct platform_device keys_gpio = {
> + .name = "gpio-keys",
> + .id = -1,
> + .dev = {
> + .platform_data = &gpio_key_info,
> + },
> +};
> +
> +static struct omap_board_config_kernel omap3_touchbook_config[]
> __initdata = {
> + { OMAP_TAG_LCD, &omap3_touchbook_lcd_config },
> +};
> +
> +static void __init omap3_touchbook_init_irq(void)
> +{
> + omap_board_config = omap3_touchbook_config;
> + omap_board_config_size = ARRAY_SIZE(omap3_touchbook_config);
> + omap2_init_common_hw(mt46h32m32lf6_sdrc_params,
> + mt46h32m32lf6_sdrc_params);
> + omap_init_irq();
> +#ifdef CONFIG_OMAP_32K_TIMER
> + omap2_gp_clockevent_set_gptimer(12);
> +#endif
> + omap_gpio_init();
> +}
> +
> +static struct platform_device *omap3_touchbook_devices[] __initdata = {
> + &omap3_touchbook_lcd_device,
> + &leds_gpio,
> + &keys_gpio,
> +};
> +
> +static void __init omap3touchbook_flash_init(void)
> +{
> + u8 cs = 0;
> + u8 nandcs = GPMC_CS_NUM + 1;
> +
> + u32 gpmc_base_add = OMAP34XX_GPMC_VIRT;
> +
> + /* find out the chip-select on which NAND exists */
> + while (cs < GPMC_CS_NUM) {
> + u32 ret = 0;
> + ret = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG1);
> +
> + if ((ret & 0xC00) == 0x800) {
> + printk(KERN_INFO "Found NAND on CS%d\n", cs);
> + if (nandcs > GPMC_CS_NUM)
> + nandcs = cs;
> + }
> + cs++;
> + }
> +
> + if (nandcs > GPMC_CS_NUM) {
> + printk(KERN_INFO "NAND: Unable to find configuration "
> + "in GPMC\n ");
> + return;
> + }
> +
> + if (nandcs < GPMC_CS_NUM) {
> + omap3touchbook_nand_data.cs = nandcs;
> + omap3touchbook_nand_data.gpmc_cs_baseaddr = (void *)
> + (gpmc_base_add + GPMC_CS0_BASE + nandcs * GPMC_CS_SIZE);
> + omap3touchbook_nand_data.gpmc_baseaddr =
> + (void *) (gpmc_base_add);
> +
> + printk(KERN_INFO "Registering NAND on CS%d\n", nandcs);
> + if (platform_device_register(&omap3touchbook_nand_device) < 0)
> + printk(KERN_ERR "Unable to register NAND device\n");
> + }
> +}
> +
> +static void __init omap3_mma7455l_init(void)
> +{
> + int ret;
> +
> + ret = gpio_request(OMAP3_AC_GPIO, "mma7455l");
> + if (ret < 0) {
> + printk(KERN_ERR "Failed to request GPIO %d for mma7455l IRQ\n",
> + OMAP3_AC_GPIO);
> + return;
> + }
> +
> + gpio_direction_input(OMAP3_AC_GPIO);
> +}
> +
> +static struct mma7455l_platform_data mma7455l_config = {
> + .calibration_x = -4,
> + .calibration_y = 28,
> + .calibration_z = -28,
> +};
> +
> +static struct omap2_mcspi_device_config mma7455l_mcspi_config = {
> + .turbo_mode = 0,
> + .single_channel = 1, /* 0: slave, 1: master */
> +};
> +
> +static struct spi_board_info omap3_mma7455l_spi_board_info[] __initdata
> = {
> + {
> + .modalias = "mma7455l",
> + .bus_num = 3,
> + .chip_select = 0,
> + .max_speed_hz = 200000,
> + .irq = OMAP_GPIO_IRQ(OMAP3_AC_GPIO),
> + .controller_data = &mma7455l_mcspi_config,
> + .platform_data = &mma7455l_config,
> + }
> +};
> +
> +static struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
> +
> + .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY,
> + .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY,
> + .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN,
> +
> + .phy_reset = true,
> + .reset_gpio_port[0] = -EINVAL,
> + .reset_gpio_port[1] = 147,
> + .reset_gpio_port[2] = -EINVAL
> +};
> +
> +static int touchbook_backlight_brightness = 50;
> +static struct omap_dm_timer *touchbook_backlight_pwm;
> +
> +static int touchbook_backlight_read(struct backlight_device *bd)
> +{
> + return touchbook_backlight_brightness;
> +}
> +
> +static int touchbook_backlight_update(struct backlight_device *bd)
> +{
> + int value = bd->props.brightness;
> + touchbook_backlight_brightness = value;
> +
> + /* Frequency calculation:
> + - For 200Hz PWM, you want to load -164 (=> -32768Hz / 200Hz).
> + - Minimum duty cycle for the backlight is 15%.
> + - You have (164*0.85) => ~140 levels of brightness.
> + */
> +
> + /* For maximum brightness, just stop the timer... */
> + if (value != bd->props.max_brightness) {
> + /* Load the appropriate value for 200Hz PWM */
> + u32 period = clk_get_rate(omap_dm_timer_get_fclk(
> + touchbook_backlight_pwm)) / 200;
> +
> + /* Minimum duty cycle is 15% */
> + u32 minimum = (period * 3) / 20;
> + u32 maximum = (period * 17) / 20;
> +
> + /* Work out match value */
> + u32 match = (maximum * value) / 100;
> +
> + /* Start... */
> + omap_dm_timer_set_load(touchbook_backlight_pwm,
> + 1, 0xFFFFFFFF - period - 1);
> + omap_dm_timer_set_match(touchbook_backlight_pwm,
> + 1, 0xFFFFFFFF - minimum - match);
> + omap_dm_timer_write_counter(touchbook_backlight_pwm, -1);
> + omap_dm_timer_start(touchbook_backlight_pwm);
> + } else
> + omap_dm_timer_stop(touchbook_backlight_pwm);
> +
> +
> + return 0;
> +}
> +
> +static struct backlight_ops touchbook_backlight_properties = {
> + .get_brightness = touchbook_backlight_read,
> + .update_status = touchbook_backlight_update,
> +};
> +
> +static void __init omap3_touchbook_backlight_init(void)
> +{
> + static struct backlight_device *bd;
> + bd = backlight_device_register("touchbook", NULL, NULL,
> + &touchbook_backlight_properties);
> +
> + if (bd) {
> + touchbook_backlight_pwm = omap_dm_timer_request_specific(
> + TB_BL_PWM_TIMER);
> + omap_dm_timer_enable(touchbook_backlight_pwm);
> + omap_dm_timer_set_source(touchbook_backlight_pwm,
> + OMAP_TIMER_SRC_SYS_CLK);
> + omap_dm_timer_set_pwm(touchbook_backlight_pwm,
> + 1, 1, OMAP_TIMER_TRIGGER_OVERFLOW_AND_COMPARE);
> +
> + bd->props.max_brightness = 100;
> + bd->props.brightness = touchbook_backlight_brightness;
> + }
> +
> + touchbook_backlight_update(bd);
> +}
> +
> +static void omap3_touchbook_poweroff(void)
> +{
> + int r;
> +
> + r = gpio_request(TB_KILL_POWER_GPIO, "DVI reset");
> + if (r < 0) {
> + printk(KERN_ERR "Unable to get kill power GPIO\n");
> + return;
> + }
> +
> + gpio_direction_output(TB_KILL_POWER_GPIO, 0);
> +}
> +
> +static void __init early_touchbook_revision(char **p)
> +{
> + if (!*p)
> + return;
> +
> + strict_strtoul(*p, 10, &touchbook_revision);
> +}
> +__early_param("tbr=", early_touchbook_revision);
> +
> +static void __init omap3_touchbook_init(void)
> +{
> + pm_power_off = omap3_touchbook_poweroff;
> +
> + omap3_touchbook_i2c_init();
> + platform_add_devices(omap3_touchbook_devices,
> + ARRAY_SIZE(omap3_touchbook_devices));
> + omap_serial_init();
> +
> + omap_cfg_reg(J25_34XX_GPIO170);
> + gpio_request(176, "DVI_nPD");
> + /* REVISIT leave DVI powered down until it's needed ... */
> + gpio_direction_output(176, true);
> +
> + /* Touchscreen and accelerometer */
> + spi_register_board_info(omap3_ads7846_spi_board_info,
> + ARRAY_SIZE(omap3_ads7846_spi_board_info));
> + spi_register_board_info(omap3_mma7455l_spi_board_info,
> + ARRAY_SIZE(omap3_mma7455l_spi_board_info));
> + omap3_ads7846_init();
> + omap3_mma7455l_init();
> +
> + omap3_touchbook_backlight_init();
> +
> + usb_musb_init();
> + usb_ehci_init(&ehci_pdata);
> + omap3touchbook_flash_init();
> +
> + /* Ensure SDRC pins are mux'd for self-refresh */
> + omap_cfg_reg(H16_34XX_SDRC_CKE0);
> + omap_cfg_reg(H17_34XX_SDRC_CKE1);
> +}
> +
> +static void __init omap3_touchbook_map_io(void)
> +{
> + omap2_set_globals_343x();
> + omap2_map_common_io();
> +}
> +
> +MACHINE_START(TOUCHBOOK, "OMAP3 touchbook Board")
> + /* Maintainer: Gregoire Gentil - http://www.alwaysinnovating.com */
> + .phys_io = 0x48000000,
> + .io_pg_offst = ((0xd8000000) >> 18) & 0xfffc,
> + .boot_params = 0x80000100,
> + .map_io = omap3_touchbook_map_io,
> + .init_irq = omap3_touchbook_init_irq,
> + .init_machine = omap3_touchbook_init,
> + .timer = &omap_timer,
> +MACHINE_END
> --
> 1.6.0.4
>
>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2009-11-16 21:18 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-11-14 19:47 [PATCH 3/3] htcherald: Add default kernel configuration for Herald Cory Maccarrone
2009-11-16 4:30 ` [PATCH 0/5] AI TB: Always Innovating OMAP3-based Touch Book Gregoire Gentil
2009-11-16 4:30 ` [PATCH 1/5] AI TB: Defconfig file of the " Gregoire Gentil
2009-11-16 4:30 ` [PATCH 2/5] AI TB: Board " Gregoire Gentil
2009-11-16 21:18 ` Tony Lindgren [this message]
2009-11-16 4:30 ` [PATCH 3/5] AI TB: Driver for the Freescale MMA7455L accelerometer Gregoire Gentil
2009-11-16 4:30 ` [PATCH 4/5] AI TB: Driver for the Always Innovating Touch Book keyboard Gregoire Gentil
2009-11-16 4:30 ` [PATCH 5/5] AI TB: Additional modifications for the Always Innovating OMAP3-based Touch Book, including video and sound Gregoire Gentil
2009-11-19 2:57 ` [PATCH 2/8] AI TB: Board file of Always Innovating OMAP3-based Touch Book Gregoire Gentil
2009-11-19 2:57 ` [PATCH 4/8] AI TB: Driver for Always Innovating OMAP3-based Touch Book keyboard Gregoire Gentil
2009-11-19 2:57 ` [PATCH 5/8] AI TB: HID file " Gregoire Gentil
2009-11-19 6:30 ` Dmitry Torokhov
2009-11-19 2:57 ` [PATCH 6/8] AI TB: Audio driver of Always Innovating OMAP3-based Touch Book Gregoire Gentil
2009-11-23 11:33 ` [alsa-devel] " Mark Brown
2009-11-19 2:58 ` [PATCH 7/8] AI TB: Video " Gregoire Gentil
2009-11-19 2:58 ` [PATCH 8/8] AI TB: Additional files for " Gregoire Gentil
2009-11-16 20:39 ` [APPLIED] [PATCH 3/3] htcherald: Add default kernel configuration for Herald Tony Lindgren
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20091116211814.GS3684@atomide.com \
--to=tony@atomide.com \
--cc=gregoire@gentil.com \
--cc=linux-omap@vger.kernel.org \
--cc=plasmaroo@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.