kumquat-buildroot/target/device/valka/v100sc2/kernel-patches/linux-2.6.24-200-atngw100-video.patch
2008-03-06 18:59:14 +00:00

176 lines
6.3 KiB
Diff

diff -Nrup linux-2.6.24/arch/avr32/boards/atngw100/flash.c linux-2.6.24-patched/arch/avr32/boards/atngw100/flash.c
--- a/arch/avr32/boards/atngw100/flash.c 2008-01-31 10:47:55.000000000 -0500
+++ b/arch/avr32/boards/atngw100/flash.c 2008-01-31 10:21:07.000000000 -0500
@@ -42,7 +42,6 @@ static struct mtd_partition flash_parts[
.name = "u-boot",
.offset = 0x00000000,
.size = 0x00020000, /* 128 KiB */
- .mask_flags = MTD_WRITEABLE,
},
{
.name = "root",
diff -Nrup linux-2.6.24/arch/avr32/boards/atngw100/setup.c linux-2.6.24-patched/arch/avr32/boards/atngw100/setup.c
--- a/arch/avr32/boards/atngw100/setup.c 2008-01-31 10:47:55.000000000 -0500
+++ b/arch/avr32/boards/atngw100/setup.c 2008-01-31 10:28:00.000000000 -0500
@@ -16,6 +16,8 @@
#include <linux/types.h>
#include <linux/leds.h>
#include <linux/spi/spi.h>
+#include <linux/fb.h>
+#include <video/atmel_lcdc.h>
#include <asm/io.h>
#include <asm/setup.h>
@@ -27,6 +29,58 @@
/* Initialized by bootloader-specific startup code. */
struct tag *bootloader_tags __initdata;
+static struct fb_videomode __initdata video_modes[] = {
+ {
+ .name = "640x480@60",
+ .refresh = 60,
+ .xres = 640, .yres = 480,
+ .pixclock = KHZ2PICOS(23856),
+
+ .left_margin = 80, .right_margin = 16,
+ .upper_margin = 13, .lower_margin = 1,
+ .hsync_len = 64, .vsync_len = 3,
+
+ .sync = 0,
+ .vmode = FB_VMODE_NONINTERLACED,
+ },
+ {
+ .name = "320x240@117",
+ .refresh = 117,
+ .xres = 320, .yres = 240,
+ .pixclock = KHZ2PICOS(12074),
+
+ .left_margin = 40, .right_margin = 8,
+ .upper_margin = 14, .lower_margin = 1,
+ .hsync_len = 32, .vsync_len = 3,
+
+ .sync = 0,
+ .vmode = FB_VMODE_NONINTERLACED,
+ },
+};
+
+static struct fb_monspecs __initdata atngw100_default_monspecs = {
+ .manufacturer = "ATM",
+ .monitor = "GENERIC",
+ .modedb = video_modes,
+ .modedb_len = ARRAY_SIZE(video_modes),
+ .hfmin = 14820,
+ .hfmax = 32000,
+ .vfmin = 30,
+ .vfmax = 200,
+ .dclkmax = 30000000,
+};
+
+struct atmel_lcdfb_info __initdata atngw100_lcdc_data = {
+ .default_bpp = 16,
+ .default_dmacon = ATMEL_LCDC_DMAEN | ATMEL_LCDC_DMA2DEN,
+ .default_lcdcon2 = (ATMEL_LCDC_DISTYPE_TFT
+ | ATMEL_LCDC_INVCLK
+ | ATMEL_LCDC_INVDVAL_NORMAL
+ | ATMEL_LCDC_CLKMOD_ALWAYSACTIVE
+ | ATMEL_LCDC_MEMOR_BIG),
+ .default_monspecs = &atngw100_default_monspecs,
+ .guard_time = 2,
+};
struct eth_addr {
u8 addr[6];
@@ -156,16 +210,19 @@ static int __init atngw100_init(void)
* reserve any pins for it.
*/
+ at32_add_device_lcdc(1, &atngw100_lcdc_data, fbmem_start, fbmem_size);
+
at32_add_system_devices();
at32_add_device_usart(0);
set_hw_addr(at32_add_device_eth(0, &eth_data[0]));
- set_hw_addr(at32_add_device_eth(1, &eth_data[1]));
+ //set_hw_addr(at32_add_device_eth(1, &eth_data[1]));
at32_add_device_spi(0, spi0_board_info, ARRAY_SIZE(spi0_board_info));
at32_add_device_mci(0, &mci0_data);
at32_add_device_usba(0, NULL);
+ at32_add_device_ac97c(0);
for (i = 0; i < ARRAY_SIZE(ngw_leds); i++) {
at32_select_gpio(ngw_leds[i].gpio,
diff -Nrup linux-2.6.24/arch/avr32/mach-at32ap/at32ap700x.c linux-2.6.24-patched/arch/avr32/mach-at32ap/at32ap700x.c
--- a/arch/avr32/mach-at32ap/at32ap700x.c 2008-01-31 10:47:55.000000000 -0500
+++ b/arch/avr32/mach-at32ap/at32ap700x.c 2008-01-31 10:29:22.000000000 -0500
@@ -1116,6 +1116,15 @@ at32_add_device_lcdc(unsigned int id, st
struct fb_videomode *modedb;
unsigned int modedb_size;
+ /* help to prevent DMA underruns, which causes
+ the screen position to jump around */
+ hmatrix_writel(SCFG4, HMATRIX_BIT(ARBT)
+ | HMATRIX_BF(FIXED_DEFMSTR, 0x5)
+ | HMATRIX_BF(SLOT_CYCLE, 0x40)
+ | HMATRIX_BF(DEFMSTR_TYPE
+ , HMATRIX_DEFMSTR_TYPE_FIXED_DEFAULT));
+ hmatrix_writel(PRAS4, 0x0FF00000);
+
/*
* Do a deep copy of the fb data, monspecs and modedb. Make
* sure all allocations are done before setting up the
@@ -1133,7 +1142,7 @@ at32_add_device_lcdc(unsigned int id, st
monspecs->modedb = modedb;
switch (id) {
- case 0:
+ case 0: // STK1000 peripheral connections
pdev = &atmel_lcdfb0_device;
select_peripheral(PC(19), PERIPH_A, 0); /* CC */
select_peripheral(PC(20), PERIPH_A, 0); /* HSYNC */
@@ -1170,6 +1179,43 @@ at32_add_device_lcdc(unsigned int id, st
clk_set_parent(&atmel_lcdfb0_pixclk, &pll0);
clk_set_rate(&atmel_lcdfb0_pixclk, clk_get_rate(&pll0));
break;
+ case 1: // NGW100 peripheral connections
+ pdev = &atmel_lcdfb0_device;
+ //select_peripheral(PC(19), PERIPH_B, 0); /* CC */
+ select_peripheral(PC(20), PERIPH_A, 0); /* HSYNC */
+ select_peripheral(PC(21), PERIPH_A, 0); /* PCLK */
+ select_peripheral(PC(22), PERIPH_A, 0); /* VSYNC */
+ select_peripheral(PE(1), PERIPH_B, 0); /* DVAL */
+ select_peripheral(PE(2), PERIPH_B, 0); /* MODE */
+ //select_peripheral(PC(25), PERIPH_A, 0); /* PWR */
+ select_peripheral(PE(3), PERIPH_B, 0); /* DATA0 */
+ select_peripheral(PE(4), PERIPH_B, 0); /* DATA1 */
+ select_peripheral(PE(5), PERIPH_B, 0); /* DATA2 */
+ select_peripheral(PE(6), PERIPH_B, 0); /* DATA3 */
+ select_peripheral(PE(7), PERIPH_B, 0); /* DATA4 */
+ select_peripheral(PC(31), PERIPH_A, 0); /* DATA5 */
+ select_peripheral(PD(0), PERIPH_A, 0); /* DATA6 */
+ select_peripheral(PD(1), PERIPH_A, 0); /* DATA7 */
+ select_peripheral(PE(8), PERIPH_B, 0); /* DATA8 */
+ select_peripheral(PE(9), PERIPH_B, 0); /* DATA9 */
+ select_peripheral(PE(10), PERIPH_B, 0); /* DATA10 */
+ select_peripheral(PE(11), PERIPH_B, 0); /* DATA11 */
+ select_peripheral(PE(12), PERIPH_B, 0); /* DATA12 */
+ select_peripheral(PD(7), PERIPH_A, 0); /* DATA13 */
+ select_peripheral(PD(8), PERIPH_A, 0); /* DATA14 */
+ select_peripheral(PD(9), PERIPH_A, 0); /* DATA15 */
+ select_peripheral(PE(13), PERIPH_B, 0); /* DATA16 */
+ select_peripheral(PE(14), PERIPH_B, 0); /* DATA17 */
+ select_peripheral(PE(15), PERIPH_B, 0); /* DATA18 */
+ select_peripheral(PE(16), PERIPH_B, 0); /* DATA19 */
+ select_peripheral(PE(17), PERIPH_B, 0); /* DATA20 */
+ select_peripheral(PE(18), PERIPH_B, 0); /* DATA21 */
+ select_peripheral(PD(16), PERIPH_A, 0); /* DATA22 */
+ select_peripheral(PD(17), PERIPH_A, 0); /* DATA23 */
+
+ clk_set_parent(&atmel_lcdfb0_pixclk, &pll0);
+ clk_set_rate(&atmel_lcdfb0_pixclk, clk_get_rate(&pll0));
+ break;
default:
goto err_invalid_id;