linux/arch/avr32/boards/atstk1000/setup.c
<<
>>
Prefs
   1/*
   2 * ATSTK1000 board-specific setup code.
   3 *
   4 * Copyright (C) 2005-2006 Atmel Corporation
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License version 2 as
   8 * published by the Free Software Foundation.
   9 */
  10#include <linux/bootmem.h>
  11#include <linux/fb.h>
  12#include <linux/init.h>
  13#include <linux/platform_device.h>
  14#include <linux/types.h>
  15#include <linux/linkage.h>
  16
  17#include <video/atmel_lcdc.h>
  18
  19#include <asm/setup.h>
  20
  21#include <mach/at32ap700x.h>
  22#include <mach/board.h>
  23#include <mach/portmux.h>
  24
  25#include "atstk1000.h"
  26
  27/* Initialized by bootloader-specific startup code. */
  28struct tag *bootloader_tags __initdata;
  29
  30static struct fb_videomode __initdata ltv350qv_modes[] = {
  31        {
  32                .name           = "320x240 @ 75",
  33                .refresh        = 75,
  34                .xres           = 320,          .yres           = 240,
  35                .pixclock       = KHZ2PICOS(6891),
  36
  37                .left_margin    = 17,           .right_margin   = 33,
  38                .upper_margin   = 10,           .lower_margin   = 10,
  39                .hsync_len      = 16,           .vsync_len      = 1,
  40
  41                .sync           = 0,
  42                .vmode          = FB_VMODE_NONINTERLACED,
  43        },
  44};
  45
  46static struct fb_monspecs __initdata atstk1000_default_monspecs = {
  47        .manufacturer           = "SNG",
  48        .monitor                = "LTV350QV",
  49        .modedb                 = ltv350qv_modes,
  50        .modedb_len             = ARRAY_SIZE(ltv350qv_modes),
  51        .hfmin                  = 14820,
  52        .hfmax                  = 22230,
  53        .vfmin                  = 60,
  54        .vfmax                  = 90,
  55        .dclkmax                = 30000000,
  56};
  57
  58struct atmel_lcdfb_info __initdata atstk1000_lcdc_data = {
  59        .default_bpp            = 24,
  60        .default_dmacon         = ATMEL_LCDC_DMAEN | ATMEL_LCDC_DMA2DEN,
  61        .default_lcdcon2        = (ATMEL_LCDC_DISTYPE_TFT
  62                                   | ATMEL_LCDC_INVCLK
  63                                   | ATMEL_LCDC_CLKMOD_ALWAYSACTIVE
  64                                   | ATMEL_LCDC_MEMOR_BIG),
  65        .default_monspecs       = &atstk1000_default_monspecs,
  66        .guard_time             = 2,
  67};
  68
  69#ifdef CONFIG_BOARD_ATSTK1000_J2_LED
  70#include <linux/leds.h>
  71
  72static struct gpio_led stk1000_j2_led[] = {
  73#ifdef CONFIG_BOARD_ATSTK1000_J2_LED8
  74#define LEDSTRING "J2 jumpered to LED8"
  75        { .name = "led0:amber", .gpio = GPIO_PIN_PB( 8), },
  76        { .name = "led1:amber", .gpio = GPIO_PIN_PB( 9), },
  77        { .name = "led2:amber", .gpio = GPIO_PIN_PB(10), },
  78        { .name = "led3:amber", .gpio = GPIO_PIN_PB(13), },
  79        { .name = "led4:amber", .gpio = GPIO_PIN_PB(14), },
  80        { .name = "led5:amber", .gpio = GPIO_PIN_PB(15), },
  81        { .name = "led6:amber", .gpio = GPIO_PIN_PB(16), },
  82        { .name = "led7:amber", .gpio = GPIO_PIN_PB(30),
  83                        .default_trigger = "heartbeat", },
  84#else   /* RGB */
  85#define LEDSTRING "J2 jumpered to RGB LEDs"
  86        { .name = "r1:red",     .gpio = GPIO_PIN_PB( 8), },
  87        { .name = "g1:green",   .gpio = GPIO_PIN_PB(10), },
  88        { .name = "b1:blue",    .gpio = GPIO_PIN_PB(14), },
  89
  90        { .name = "r2:red",     .gpio = GPIO_PIN_PB( 9),
  91                        .default_trigger = "heartbeat", },
  92        { .name = "g2:green",   .gpio = GPIO_PIN_PB(13), },
  93        { .name = "b2:blue",    .gpio = GPIO_PIN_PB(15),
  94                        .default_trigger = "heartbeat", },
  95        /* PB16, PB30 unused */
  96#endif
  97};
  98
  99static struct gpio_led_platform_data stk1000_j2_led_data = {
 100        .num_leds       = ARRAY_SIZE(stk1000_j2_led),
 101        .leds           = stk1000_j2_led,
 102};
 103
 104static struct platform_device stk1000_j2_led_dev = {
 105        .name           = "leds-gpio",
 106        .id             = 2,    /* gpio block J2 */
 107        .dev            = {
 108                .platform_data  = &stk1000_j2_led_data,
 109        },
 110};
 111
 112void __init atstk1000_setup_j2_leds(void)
 113{
 114        unsigned        i;
 115
 116        for (i = 0; i < ARRAY_SIZE(stk1000_j2_led); i++)
 117                at32_select_gpio(stk1000_j2_led[i].gpio, AT32_GPIOF_OUTPUT);
 118
 119        printk("STK1000: " LEDSTRING "\n");
 120        platform_device_register(&stk1000_j2_led_dev);
 121}
 122#else /* CONFIG_BOARD_ATSTK1000_J2_LED */
 123void __init atstk1000_setup_j2_leds(void)
 124{
 125
 126}
 127#endif /* CONFIG_BOARD_ATSTK1000_J2_LED */
 128