Daniel Gorsulowski wrote: > This patch adds support for esd gmbh OTC570 board. > The OTC570 is based on an Atmel AT91SAM9263 SoC. > > Signed-off-by: Daniel Gorsulowski <daniel.gorsulow...@esd.eu>
For u-boot-video. Maybe some u-boot commands that could be common. > --- > MAINTAINERS | 1 + > MAKEALL | 1 + > Makefile | 3 + <snip> > diff --git a/board/esd/otc570/otc570.c b/board/esd/otc570/otc570.c > new file mode 100644 > index 0000000..fee27ca > --- /dev/null > +++ b/board/esd/otc570/otc570.c > @@ -0,0 +1,429 @@ > +/* > + * (C) Copyright 2007-2008 > + * Stelian Pop <stelian....@leadtechdesign.com> > + * Lead Tech Design <www.leadtechdesign.com> > + * > + * (C) Copyright 2010 > + * Daniel Gorsulowski <daniel.gorsulow...@esd.eu> > + * esd electronic system design gmbh <www.esd.eu> > + * New copyrights before old Swap places > + * See file CREDITS for list of people who contributed to this > + * project. > + * <snip> > + > +#ifdef CONFIG_CMD_NAND > +static void otc570_nand_hw_init(void) > +{ > + unsigned long csa; > + > + /* Enable CS3 */ > + csa = at91_sys_read(AT91_MATRIX_EBI0CSA); > + at91_sys_write(AT91_MATRIX_EBI0CSA, > + csa | AT91_MATRIX_EBI0_CS3A_SMC_SMARTMEDIA); > + > + /* Configure SMC CS3 for NAND/SmartMedia */ > + at91_sys_write(AT91_SMC_SETUP(3), > + AT91_SMC_NWESETUP_(1) | AT91_SMC_NCS_WRSETUP_(0) | > + AT91_SMC_NRDSETUP_(1) | AT91_SMC_NCS_RDSETUP_(0)); > + at91_sys_write(AT91_SMC_PULSE(3), > + AT91_SMC_NWEPULSE_(3) | AT91_SMC_NCS_WRPULSE_(3) | > + AT91_SMC_NRDPULSE_(3) | AT91_SMC_NCS_RDPULSE_(3)); > + at91_sys_write(AT91_SMC_CYCLE(3), > + AT91_SMC_NWECYCLE_(5) | AT91_SMC_NRDCYCLE_(5)); > + at91_sys_write(AT91_SMC_MODE(3), > + AT91_SMC_READMODE | AT91_SMC_WRITEMODE | > + AT91_SMC_EXNWMODE_DISABLE | > +#ifdef CONFIG_SYS_NAND_DBW_16 > + AT91_SMC_DBW_16 | > +#else /* CONFIG_SYS_NAND_DBW_8 */ > + AT91_SMC_DBW_8 | > +#endif I do not see where CONFIG_SYS_NAND_DBW_16 is ever set to 1 I see meesc has similar logic. It looks like this #if-def can be removed. Do this or add comment explaining. > + AT91_SMC_TDF_(2)); > + > + /* Configure RDY/BSY */ > + at91_set_gpio_input(CONFIG_SYS_NAND_READY_PIN, 1); > + > + /* Enable NandFlash */ > + at91_set_gpio_output(CONFIG_SYS_NAND_ENABLE_PIN, 1); > +} > +#endif /* CONFIG_CMD_NAND */ > + <snip> Convert the element initialization to be .vl_col = 640 .vl_row = 480 etc.. > +#ifdef CONFIG_LCD > +/* Number of columns and rows, pixel clock in Hz and hsync/vsync polarity */ > +vidinfo_t panel_info = { > + vl_col: 640, > + vl_row: 480, > + vl_clk: 25175000, > + vl_sync: ATMEL_LCDC_INVLINE_INVERTED | > + ATMEL_LCDC_INVFRAME_INVERTED, > + > + vl_bpix: 3, /* Bits per pixel, 0 = 1bit, 3 = 8bit */ > + vl_tft: 1, /* 0 = passive, 1 = TFT */ > + vl_vsync_len: 1, /* Length of vertical sync in number of lines */ > + vl_upper_margin:35, /* Idle lines at the beginning of the frame */ > + vl_lower_margin:5, /* Idle lines at the end of the frame */ > + vl_hsync_len: 5, /* Width of the LCDHSYNC pulse */ > + vl_left_margin: 112, /* Idle cycles at the beginning of the line */ > + vl_right_margin:1, /* Idle cycles at the end of the line */ > + > + mmio: AT91SAM9263_LCDC_BASE, /* Memory mapped registers */ > +}; <snip> > +static void otc570_lcd_hw_init(void) > +{ > + at91_set_A_periph(AT91_PIN_PC0, 0); /* LCDVSYNC */ > + at91_set_A_periph(AT91_PIN_PC1, 0); /* LCDHSYNC */ > + at91_set_A_periph(AT91_PIN_PC2, 0); /* LCDDOTCK */ > + at91_set_A_periph(AT91_PIN_PC3, 0); /* LCDDEN */ > + at91_set_B_periph(AT91_PIN_PB9, 0); /* LCDCC */ > + at91_set_A_periph(AT91_PIN_PC6, 0); /* LCDD2 */ > + at91_set_A_periph(AT91_PIN_PC7, 0); /* LCDD3 */ > + at91_set_A_periph(AT91_PIN_PC8, 0); /* LCDD4 */ > + at91_set_A_periph(AT91_PIN_PC9, 0); /* LCDD5 */ > + at91_set_A_periph(AT91_PIN_PC10, 0); /* LCDD6 */ > + at91_set_A_periph(AT91_PIN_PC11, 0); /* LCDD7 */ > + at91_set_A_periph(AT91_PIN_PC14, 0); /* LCDD10 */ > + at91_set_A_periph(AT91_PIN_PC15, 0); /* LCDD11 */ > + at91_set_A_periph(AT91_PIN_PC16, 0); /* LCDD12 */ > + at91_set_B_periph(AT91_PIN_PC12, 0); /* LCDD13 */ > + at91_set_A_periph(AT91_PIN_PC18, 0); /* LCDD14 */ > + at91_set_A_periph(AT91_PIN_PC19, 0); /* LCDD15 */ > + at91_set_A_periph(AT91_PIN_PC22, 0); /* LCDD18 */ > + at91_set_A_periph(AT91_PIN_PC23, 0); /* LCDD19 */ > + at91_set_A_periph(AT91_PIN_PC24, 0); /* LCDD20 */ > + at91_set_B_periph(AT91_PIN_PC17, 0); /* LCDD21 */ > + at91_set_A_periph(AT91_PIN_PC26, 0); /* LCDD22 */ > + at91_set_A_periph(AT91_PIN_PC27, 0); /* LCDD23 */ > + at91_set_gpio_output(AT91_PIN_PA30, 1); /* PCI */ > + > + at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9263_ID_LCDC); > + > +#ifndef CONFIG_FB_TO_SDRAM > + gd->fb_base = AT91SAM9263_SRAM0_BASE; Should there be an #else ? > +#endif > +} > + <snip> > +#ifdef CONFIG_MISC_INIT_R > +int misc_init_r(void) > +{ > + char str[64]; > + > + at91_set_gpio_output(AT91_PIN_PA29, 1); > + at91_set_A_periph(AT91_PIN_PA26, 1); /* TXD0 */ > + at91_set_A_periph(AT91_PIN_PA27, 0); /* RXD0 */ > + at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9263_ID_US0); > + /* Set USART_MODE = 1 (RS485) */ > + at91_sys_write((0xFFF8C004 - AT91_BASE_SYS), 1); > + > + puts("USART0: "); > + > + if (getenv_r("usart0", str, sizeof(str)) == -1) { > + puts("No entry - assuming 1-wire\n"); Why are you mixing puts and printf ? > + /* CTS pin, works as mode select pin (0 = 1-wire; 1 = RS485) */ > + at91_set_gpio_output(AT91_PIN_PA29, 0); > + } else { > + if (strcmp(str, "1-wire") == 0) { > + printf("%s\n", str); > + at91_set_gpio_output(AT91_PIN_PA29, 0); > + } else if (strcmp(str, "rs485") == 0) { > + printf("%s\n", str); > + at91_set_gpio_output(AT91_PIN_PA29, 1); > + } else { > + puts("Wrong entry - assuming 1-wire "); > + puts("(valid values are '1-wire' or 'rs485')\n"); > + at91_set_gpio_output(AT91_PIN_PA29, 0); > + } > + } > + printf("Display memory address: 0x%08lX\n", gd->fb_base); Above #ifndef may not set fb_base > + > + return 0; > +} > +#endif /* CONFIG_MISC_INIT_R */ > + <snip> > + > +/* > + * U-Boot commands > + */ > + > +/* Set brightness */ > +int do_blbright(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) > +{ > + unsigned long value = 0xff; > + > + if (argc > 1) { > + value = simple_strtoul(argv[1], NULL, 0); > + if ((value >= 0) && (value <= 255)) { > + printf("Writing value %02lX ...", value); > + __raw_writel(value, (panel_info.mmio + > + ATMEL_LCDC_CONTRAST_VAL)); > + puts("done\n"); > + } else { > + puts("Invalid value! "); > + puts("Valid values are 0 ... 255 or 0x0 ... 0xFF\n"); > + return -1; > + } > + } else { > + puts("No value given! "); > + puts("Valid values are 0 ... 255 or 0x0 ... 0xFF\n"); > + return -1; > + } > + return 0; > +} > +U_BOOT_CMD( > + blbright, 2, 1, do_blbright, > + "sets display brightness", > + "\n" > +); > + > +/* Switch backlight power */ > +int do_blpower(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) > +{ > + int i = 0; > + if (argc > 1) { > + i = argv[1][0] == '0'; > + if (i) { > + puts("Switching backlight off... "); > + lcd_disable(); > + } else { > + puts("Switching backlight on... "); > + lcd_enable(); > + } > + puts("done\n"); > + } else > + puts("No value given!\n"); > + return 0; > +} > +U_BOOT_CMD( > + blpower, 2, 1, do_blpower, > + "switches display-backlight on or off", > + "\n" > +); These video commands look common enough that maybe they should go into common/* Is there anything that already does this? <snip> > diff --git a/include/configs/otc570.h b/include/configs/otc570.h > new file mode 100644 > index 0000000..bb04abd > --- /dev/null > +++ b/include/configs/otc570.h > @@ -0,0 +1,247 @@ > +/* > + * (C) Copyright 2007-2008 > + * Stelian Pop <stelian....@leadtechdesign.com> > + * Lead Tech Design <www.leadtechdesign.com> > + * > + * (C) Copyright 2009 > + * Daniel Gorsulowski <daniel.gorsulow...@esd.eu> > + * esd electronic system design gmbh <www.esd.eu> > + * New copyrights before old swap. > + * Configuation settings for the esd OTC570 board. > + * > + * See file CREDITS for list of people who contributed to this > + * project. > + * > + * This program is free software; you can redistribute it and/or > + * modify it under the terms of the GNU General Public License as > + * published by the Free Software Foundation; either version 2 of > + * the License, or (at your option) any later version. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, write to the Free Software > + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, > + * MA 02111-1307 USA > + */ > + > +#ifndef __CONFIG_H > +#define __CONFIG_H > + > +/* Common stuff */ > +#define CONFIG_SYS_HZ 1000 /* decrementer freq */ board and cpu defines first Move CONFIG_SYS_HZ lower > +#define CONFIG_OTC570 1 /* Board is esd OTC570 > */ > +#define CONFIG_ARM926EJS 1 /* This is an ARM926EJS Core */ > +#define CONFIG_AT91SAM9263 1 /* It's an AT91SAM9263 SoC */ > +#define CONFIG_DISPLAY_BOARDINFO 1 > +#define CONFIG_DISPLAY_CPUINFO 1 /* display cpu info and > speed */ <snip> > index 5b8c3c3..c91e19d 100644 > --- a/tools/Makefile > +++ b/tools/Makefile > @@ -102,6 +102,9 @@ endif > ifeq ($(VENDOR),atmel) > LOGO_BMP= logos/atmel.bmp > endif > +ifeq ($(VENDOR),esd) > +LOGO_BMP= logos/esd.bmp > +endif There are a number of esd board. Is this bmp ok for all of them ? > ifeq ($(VENDOR),ronetix) > LOGO_BMP= logos/ronetix.bmp > endif > diff --git a/tools/logos/esd.bmp b/tools/logos/esd.bmp This looks ok > new file mode 100644 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot