Path: blob/master/arch/avr32/boards/atstk1000/setup.c
10819 views
/*1* ATSTK1000 board-specific setup code.2*3* Copyright (C) 2005-2006 Atmel Corporation4*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*/9#include <linux/bootmem.h>10#include <linux/fb.h>11#include <linux/init.h>12#include <linux/platform_device.h>13#include <linux/types.h>14#include <linux/linkage.h>1516#include <video/atmel_lcdc.h>1718#include <asm/setup.h>1920#include <mach/at32ap700x.h>21#include <mach/board.h>22#include <mach/portmux.h>2324#include "atstk1000.h"2526/* Initialized by bootloader-specific startup code. */27struct tag *bootloader_tags __initdata;2829static struct fb_videomode __initdata ltv350qv_modes[] = {30{31.name = "320x240 @ 75",32.refresh = 75,33.xres = 320, .yres = 240,34.pixclock = KHZ2PICOS(6891),3536.left_margin = 17, .right_margin = 33,37.upper_margin = 10, .lower_margin = 10,38.hsync_len = 16, .vsync_len = 1,3940.sync = 0,41.vmode = FB_VMODE_NONINTERLACED,42},43};4445static struct fb_monspecs __initdata atstk1000_default_monspecs = {46.manufacturer = "SNG",47.monitor = "LTV350QV",48.modedb = ltv350qv_modes,49.modedb_len = ARRAY_SIZE(ltv350qv_modes),50.hfmin = 14820,51.hfmax = 22230,52.vfmin = 60,53.vfmax = 90,54.dclkmax = 30000000,55};5657struct atmel_lcdfb_info __initdata atstk1000_lcdc_data = {58.default_bpp = 24,59.default_dmacon = ATMEL_LCDC_DMAEN | ATMEL_LCDC_DMA2DEN,60.default_lcdcon2 = (ATMEL_LCDC_DISTYPE_TFT61| ATMEL_LCDC_INVCLK62| ATMEL_LCDC_CLKMOD_ALWAYSACTIVE63| ATMEL_LCDC_MEMOR_BIG),64.default_monspecs = &atstk1000_default_monspecs,65.guard_time = 2,66};6768#ifdef CONFIG_BOARD_ATSTK1000_J2_LED69#include <linux/leds.h>7071static struct gpio_led stk1000_j2_led[] = {72#ifdef CONFIG_BOARD_ATSTK1000_J2_LED873#define LEDSTRING "J2 jumpered to LED8"74{ .name = "led0:amber", .gpio = GPIO_PIN_PB( 8), },75{ .name = "led1:amber", .gpio = GPIO_PIN_PB( 9), },76{ .name = "led2:amber", .gpio = GPIO_PIN_PB(10), },77{ .name = "led3:amber", .gpio = GPIO_PIN_PB(13), },78{ .name = "led4:amber", .gpio = GPIO_PIN_PB(14), },79{ .name = "led5:amber", .gpio = GPIO_PIN_PB(15), },80{ .name = "led6:amber", .gpio = GPIO_PIN_PB(16), },81{ .name = "led7:amber", .gpio = GPIO_PIN_PB(30),82.default_trigger = "heartbeat", },83#else /* RGB */84#define LEDSTRING "J2 jumpered to RGB LEDs"85{ .name = "r1:red", .gpio = GPIO_PIN_PB( 8), },86{ .name = "g1:green", .gpio = GPIO_PIN_PB(10), },87{ .name = "b1:blue", .gpio = GPIO_PIN_PB(14), },8889{ .name = "r2:red", .gpio = GPIO_PIN_PB( 9),90.default_trigger = "heartbeat", },91{ .name = "g2:green", .gpio = GPIO_PIN_PB(13), },92{ .name = "b2:blue", .gpio = GPIO_PIN_PB(15),93.default_trigger = "heartbeat", },94/* PB16, PB30 unused */95#endif96};9798static struct gpio_led_platform_data stk1000_j2_led_data = {99.num_leds = ARRAY_SIZE(stk1000_j2_led),100.leds = stk1000_j2_led,101};102103static struct platform_device stk1000_j2_led_dev = {104.name = "leds-gpio",105.id = 2, /* gpio block J2 */106.dev = {107.platform_data = &stk1000_j2_led_data,108},109};110111void __init atstk1000_setup_j2_leds(void)112{113unsigned i;114115for (i = 0; i < ARRAY_SIZE(stk1000_j2_led); i++)116at32_select_gpio(stk1000_j2_led[i].gpio, AT32_GPIOF_OUTPUT);117118printk("STK1000: " LEDSTRING "\n");119platform_device_register(&stk1000_j2_led_dev);120}121#else /* CONFIG_BOARD_ATSTK1000_J2_LED */122void __init atstk1000_setup_j2_leds(void)123{124125}126#endif /* CONFIG_BOARD_ATSTK1000_J2_LED */127128129