Path: blob/master/arch/avr32/boards/atngw100/evklcd10x.c
10819 views
/*1* Board-specific setup code for the ATEVKLCD10X addon board to the ATNGW1002* Network Gateway3*4* Copyright (C) 2008 Atmel Corporation5*6* This program is free software; you can redistribute it and/or modify it7* under the terms of the GNU General Public License version 2 as published by8* the Free Software Foundation.9*/1011#include <linux/init.h>12#include <linux/linkage.h>13#include <linux/gpio.h>14#include <linux/fb.h>15#include <linux/platform_device.h>1617#include <video/atmel_lcdc.h>1819#include <asm/setup.h>2021#include <mach/at32ap700x.h>22#include <mach/portmux.h>23#include <mach/board.h>2425#include <sound/atmel-ac97c.h>2627static struct ac97c_platform_data __initdata ac97c0_data = {28.reset_pin = GPIO_PIN_PB(19),29};3031#ifdef CONFIG_BOARD_ATNGW100_EVKLCD10X_VGA32static struct fb_videomode __initdata tcg057vglad_modes[] = {33{34.name = "640x480 @ 50",35.refresh = 50,36.xres = 640, .yres = 480,37.pixclock = KHZ2PICOS(25180),3839.left_margin = 64, .right_margin = 96,40.upper_margin = 34, .lower_margin = 11,41.hsync_len = 64, .vsync_len = 15,4243.sync = 0,44.vmode = FB_VMODE_NONINTERLACED,45},46};4748static struct fb_monspecs __initdata atevklcd10x_default_monspecs = {49.manufacturer = "KYO",50.monitor = "TCG057VGLAD",51.modedb = tcg057vglad_modes,52.modedb_len = ARRAY_SIZE(tcg057vglad_modes),53.hfmin = 19948,54.hfmax = 31478,55.vfmin = 50,56.vfmax = 67,57.dclkmax = 28330000,58};5960static struct atmel_lcdfb_info __initdata atevklcd10x_lcdc_data = {61.default_bpp = 16,62.default_dmacon = ATMEL_LCDC_DMAEN | ATMEL_LCDC_DMA2DEN,63.default_lcdcon2 = (ATMEL_LCDC_DISTYPE_TFT64| ATMEL_LCDC_CLKMOD_ALWAYSACTIVE65| ATMEL_LCDC_MEMOR_BIG),66.default_monspecs = &atevklcd10x_default_monspecs,67.guard_time = 2,68};69#elif CONFIG_BOARD_ATNGW100_EVKLCD10X_QVGA70static struct fb_videomode __initdata tcg057qvlad_modes[] = {71{72.name = "320x240 @ 50",73.refresh = 50,74.xres = 320, .yres = 240,75.pixclock = KHZ2PICOS(6300),7677.left_margin = 34, .right_margin = 46,78.upper_margin = 7, .lower_margin = 15,79.hsync_len = 64, .vsync_len = 12,8081.sync = 0,82.vmode = FB_VMODE_NONINTERLACED,83},84};8586static struct fb_monspecs __initdata atevklcd10x_default_monspecs = {87.manufacturer = "KYO",88.monitor = "TCG057QVLAD",89.modedb = tcg057qvlad_modes,90.modedb_len = ARRAY_SIZE(tcg057qvlad_modes),91.hfmin = 19948,92.hfmax = 31478,93.vfmin = 50,94.vfmax = 67,95.dclkmax = 7000000,96};9798static struct atmel_lcdfb_info __initdata atevklcd10x_lcdc_data = {99.default_bpp = 16,100.default_dmacon = ATMEL_LCDC_DMAEN | ATMEL_LCDC_DMA2DEN,101.default_lcdcon2 = (ATMEL_LCDC_DISTYPE_TFT102| ATMEL_LCDC_CLKMOD_ALWAYSACTIVE103| ATMEL_LCDC_MEMOR_BIG),104.default_monspecs = &atevklcd10x_default_monspecs,105.guard_time = 2,106};107#elif CONFIG_BOARD_ATNGW100_EVKLCD10X_POW_QVGA108static struct fb_videomode __initdata ph320240t_modes[] = {109{110.name = "320x240 @ 60",111.refresh = 60,112.xres = 320, .yres = 240,113.pixclock = KHZ2PICOS(6300),114115.left_margin = 38, .right_margin = 20,116.upper_margin = 15, .lower_margin = 5,117.hsync_len = 30, .vsync_len = 3,118119.sync = 0,120.vmode = FB_VMODE_NONINTERLACED,121},122};123124static struct fb_monspecs __initdata atevklcd10x_default_monspecs = {125.manufacturer = "POW",126.monitor = "PH320240T",127.modedb = ph320240t_modes,128.modedb_len = ARRAY_SIZE(ph320240t_modes),129.hfmin = 14400,130.hfmax = 21600,131.vfmin = 50,132.vfmax = 90,133.dclkmax = 6400000,134};135136static struct atmel_lcdfb_info __initdata atevklcd10x_lcdc_data = {137.default_bpp = 16,138.default_dmacon = ATMEL_LCDC_DMAEN | ATMEL_LCDC_DMA2DEN,139.default_lcdcon2 = (ATMEL_LCDC_DISTYPE_TFT140| ATMEL_LCDC_CLKMOD_ALWAYSACTIVE141| ATMEL_LCDC_MEMOR_BIG),142.default_monspecs = &atevklcd10x_default_monspecs,143.guard_time = 2,144};145#endif146147static void atevklcd10x_lcdc_power_control(int on)148{149gpio_set_value(GPIO_PIN_PB(15), on);150}151152static int __init atevklcd10x_init(void)153{154/* PB15 is connected to the enable line on the boost regulator155* controlling the backlight for the LCD panel.156*/157at32_select_gpio(GPIO_PIN_PB(15), AT32_GPIOF_OUTPUT);158gpio_request(GPIO_PIN_PB(15), "backlight");159gpio_direction_output(GPIO_PIN_PB(15), 0);160161atevklcd10x_lcdc_data.atmel_lcdfb_power_control =162atevklcd10x_lcdc_power_control;163164at32_add_device_lcdc(0, &atevklcd10x_lcdc_data,165fbmem_start, fbmem_size,166#ifdef CONFIG_BOARD_ATNGW100_MKII167ATMEL_LCDC_PRI_18BIT | ATMEL_LCDC_PC_DVAL168#else169ATMEL_LCDC_ALT_18BIT | ATMEL_LCDC_PE_DVAL170#endif171);172173at32_add_device_ac97c(0, &ac97c0_data, AC97C_BOTH);174175return 0;176}177postcore_initcall(atevklcd10x_init);178179180