diff options
author | H. Nikolaus Schaller <hns@goldelico.com> | 2010-12-21 11:47:25 +0100 |
---|---|---|
committer | H. Nikolaus Schaller <hns@goldelico.com> | 2010-12-21 11:47:25 +0100 |
commit | 30edeb21ebfc731ec1656c7a8727617f5a08438c (patch) | |
tree | 5e764d30b5ae5876f8410924ec730bbcaced3b9d | |
parent | fe9af81721d7ffcbe0bbd4665fda5d245835df84 (diff) | |
download | bootable_bootloader_goldelico_gta04-30edeb21ebfc731ec1656c7a8727617f5a08438c.zip bootable_bootloader_goldelico_gta04-30edeb21ebfc731ec1656c7a8727617f5a08438c.tar.gz bootable_bootloader_goldelico_gta04-30edeb21ebfc731ec1656c7a8727617f5a08438c.tar.bz2 |
made display initialization work
-rw-r--r-- | board/goldelico/gta04/TD028TTEC1.c | 61 | ||||
-rw-r--r-- | board/goldelico/gta04/dssfb.c | 20 | ||||
-rw-r--r-- | board/goldelico/gta04/gta04.h | 10 | ||||
-rw-r--r-- | board/goldelico/gta04/jbt6k74.c | 2 |
4 files changed, 66 insertions, 27 deletions
diff --git a/board/goldelico/gta04/TD028TTEC1.c b/board/goldelico/gta04/TD028TTEC1.c index 09bb1b8..167bebc 100644 --- a/board/goldelico/gta04/TD028TTEC1.c +++ b/board/goldelico/gta04/TD028TTEC1.c @@ -53,8 +53,8 @@ #define GPIO_CS 19 #define GPIO_SCL 12 -#define GPIO_DIN 20 -#define GPIO_DOUT 18 +#define GPIO_DIN 18 +#define GPIO_DOUT 20 #else /* Beagle Hybrid */ @@ -189,41 +189,42 @@ int jbt_reg_write16(struct jbt_info *jbt, u_int8_t reg, u_int16_t data) return rc; } -int jbt_reg_init(void) -{ +int jbt_check(void) +{ // check if we have connectivity #if defined(_BEAGLE_) + int err; int i; int failed=0; + int cnt0 = 0; + int cnt1 = 0; printf("jbt_reg_init()\n"); - omap_request_gpio(GPIO_CS); + err = omap_request_gpio(GPIO_CS); SPI_CS(1); // unselect - omap_request_gpio(GPIO_SCL); + err |= omap_request_gpio(GPIO_SCL); SPI_SCL(1); // default - omap_request_gpio(GPIO_DOUT); + err |= omap_request_gpio(GPIO_DOUT); SPI_SDA(0); - omap_request_gpio(GPIO_DIN); -#if 1 // should have been done by MUX settings! + err |= omap_request_gpio(GPIO_DIN); + if(err) + { + printf("jbt_reg_init() - could not get GPIOs\n"); + return 1; + } +#if 1 // should have already been done by MUX settings! omap_set_gpio_direction(GPIO_CS, 0); // output omap_set_gpio_direction(GPIO_SCL, 0); // output omap_set_gpio_direction(GPIO_DOUT, 0); // output - omap_set_gpio_direction(GPIO_DIN, 1); // input (for read back) + omap_set_gpio_direction(GPIO_DIN, 1); // input (for reading back) #endif - + // omap_free_gpio(GPIO_DIN); // omap_free_gpio(GPIO_DOUT); // omap_free_gpio(GPIO_CS); // omap_free_gpio(GPIO_SCL); - -#endif - /* according to data sheet: wait 50ms (Tpos of LCM). However, 50ms - * seems unreliable with later LCM batches, increasing to 90ms */ - udelay(90000); - -#if defined(_BEAGLE_) for(i=0; i<16; i++) - { // check for connection between GPIO158 -> GPIO159; since we have 10 kOhm pse. make sure that the PUP/PDN is disabled in the MUX config! + { // check for connection between GPIO158 -> GPIO159; since we have 10 kOhm pse. make sure that the PUP/PDN is disabled on DIN in the MUX config! int bit=i&1; SPI_SDA(bit); // write bit SPI_DELAY(); @@ -232,14 +233,32 @@ int jbt_reg_init(void) #endif if(SPI_READ() != bit) // did not read back failed++; + if(SPI_READ()) + cnt1++; + else + cnt0++; } if(failed > 0) { - printf("jbt_reg_init() - no correct response, assuming no connection between GPIO158 and GPIO159\n"); - return 1; + printf("jbt_reg_init() - no correct response, assuming no connection between GPIO_%d and GPIO_%d\n", GPIO_DOUT, GPIO_DIN); + if(cnt0 == 0) + printf(" DIN stuck at 0\n"); + if(cnt1 == 0) + printf(" DIN stuck at 1\n"); + return 1; } #endif + return 0; +} + +int jbt_reg_init(void) +{ + if(jbt_check()) + return 1; // some error + /* according to data sheet: wait 50ms (Tpos of LCM). However, 50ms + * seems unreliable with later LCM batches, increasing to 90ms */ + udelay(90000); printf("did jbt_reg_init()\n"); return 0; } diff --git a/board/goldelico/gta04/dssfb.c b/board/goldelico/gta04/dssfb.c index 582afc7..b25c759 100644 --- a/board/goldelico/gta04/dssfb.c +++ b/board/goldelico/gta04/dssfb.c @@ -29,6 +29,8 @@ #include <asm/arch/gpio.h> #include <asm/mach-types.h> #include <asm/arch/dss.h> +#include <asm/arch/clocks.h> +#include <asm/arch/clocks_omap3.h> #define DVI_BACKGROUND_COLOR 0x00fadc29 // rgb(250, 220, 41) @@ -79,6 +81,7 @@ static const struct panel_config lcm_cfg = void omap3_dss_go(void) { // push changes from shadow register to display controller struct dispc_regs *dispc = (struct dispc_regs *) OMAP3_DISPC_BASE; + u32 l = 0; l = readl(&dispc->control); l |= GO_LCD | GO_DIG; @@ -255,7 +258,24 @@ static const struct panel_config dvid_cfg = { void dssfb_init(void) { +#ifdef CONFIG_OMAP3_GTA04A2 /* delayed on GTA04A2 */ + struct prcm *prcm_base = (struct prcm *)PRCM_BASE; + printf("prcm base = %08x\n", prcm_base); + printf("ick_dss_on\n"); + sr32(&prcm_base->iclken_dss, 0, 32, ICK_DSS_ON); + sdelay(1000); + printf("fck_dss_on\n"); + sr32(&prcm_base->fclken_dss, 0, 32, FCK_DSS_ON); + sdelay(1000); + printf("fck_cam_on\n"); +// sr32(&prcm_base->fclken_cam, 0, 32, FCK_CAM_ON); + printf("ick_cam_on\n"); +// sr32(&prcm_base->iclken_cam, 0, 32, ICK_CAM_ON); + sdelay(1000); +#endif + printf("dss panel config\n"); omap3_dss_panel_config(&lcm_cfg); // set new config + printf("dss enable\n"); omap3_dss_enable(); // and (re)enable } diff --git a/board/goldelico/gta04/gta04.h b/board/goldelico/gta04/gta04.h index 61f1398..91e738c 100644 --- a/board/goldelico/gta04/gta04.h +++ b/board/goldelico/gta04/gta04.h @@ -466,18 +466,18 @@ MUX_VAL(CP(MCBSP1_FSX), (IDIS | PTU | DIS | M1)) /*MCSPI4_CS0*/ * PTU - Pull type Up * DIS - Pull type selection is inactive * EN - Pull type selection is active - * M0 - Mode 0 + * M0 - Mode 0 (as defined by pin name) * M4 - Mode 4 (GPIO) */ -// FIXME: GTA04A2 has different assignment from GTA04A3ff +// FIXME: GTA04A3ff has some improved mux assignments #define MUX_BEAGLE_GTA04() \ MUX_VAL(CP(ETK_CLK_ES2), (IDIS | PTU | EN | M4)) /*GPIO_12 - Display serial clock*/\ MUX_VAL(CP(ETK_CTL_ES2), (IDIS | PTU | EN | M4)) /*GPIO_13 - IrDA FIR-SEL*/\ -MUX_VAL(CP(ETK_D4_ES2), (IDIS | PTU | DIS | M4)) /*GPIO_18 - Display DIN*/\ -MUX_VAL(CP(ETK_D5_ES2), (IDIS | PTU | DIS | M4)) /*GPIO_19 - Display select*/\ -MUX_VAL(CP(ETK_D6_ES2), (IDIS | PTU | DIS | M4)) /*GPIO_20 - Display DOUT*/\ +MUX_VAL(CP(ETK_D4_ES2), (IEN | PTU | DIS | M4)) /*GPIO_18 - Display DIN*/\ +MUX_VAL(CP(ETK_D5_ES2), (IDIS | PTU | EN | M4)) /*GPIO_19 - Display chip select*/\ +MUX_VAL(CP(ETK_D6_ES2), (IDIS | PTU | EN | M4)) /*GPIO_20 - Display DOUT*/\ MUX_VAL(CP(ETK_D7_ES2), (IEN | PTU | EN | M4)) /*GPIO_21 - RS232 enable*/\ MUX_VAL(CP(GPMC_NCS6), (IDIS | PTD | DIS | M4)) /*GPIO_57/GPT_11 - Backlight enable*/\ MUX_VAL(CP(GPMC_WAIT3), (IDIS | PTU | DIS | M4)) /*GPIO_65 - AUX IN/OUT*/\ diff --git a/board/goldelico/gta04/jbt6k74.c b/board/goldelico/gta04/jbt6k74.c index 4e6a2e0..8c5aaea 100644 --- a/board/goldelico/gta04/jbt6k74.c +++ b/board/goldelico/gta04/jbt6k74.c @@ -314,6 +314,7 @@ int jbt6k74_display_onoff(int on) int board_video_init(GraphicDevice *pGD) { extern int get_board_revision(void); + backlight_init(); // initialize backlight #define REVISION_XM 0 if(get_board_revision() == REVISION_XM) { /* Set VAUX1 to 3.3V for GTA04E display board */ @@ -329,7 +330,6 @@ int board_video_init(GraphicDevice *pGD) return 1; } dssfb_init(); - backlight_init(); // initialize backlight printf("did board_video_init()\n"); return 0; |