source: rtems/c/src/lib/libcpu/arm/s3c2400/lcd/lcd.c @ b2a4e861

4.104.114.84.9
Last change on this file since b2a4e861 was b2a4e861, checked in by Joel Sherrill <joel.sherrill@…>, on Jun 2, 2005 at 1:45:53 PM

2005-06-01 Philippe Simons <loki_666@…>

  • Makefile.am: Add s3c2400/lcd/lcd.c, s3c2400/clock/support.c
  • s3c2400/clock/clockdrv.c: Update to use get_PCLK()
  • s3c2400/timer/timer.c: Update to use get_PCLK()
  • Property mode set to 100644
File size: 4.7 KB
Line 
1#include <rtems.h>
2#include <bsp.h>
3#include <s3c2400.h>
4
5void gp32_setFramebuffer(void *add) {
6   uint32_t addr = (uint32_t) add;
7   uint32_t LCDBANK  =  addr >> 22;
8   uint32_t LCDBASEU = (addr & 0x3FFFFF) >> 1;
9   uint32_t LCDBASEL;
10   uint16_t OFFSIZE = 0;
11   uint16_t PAGEWIDTH;
12   uint16_t vidmode = ((rLCDCON1>>1) & 15)-8;
13   const uint8_t faktor[]= {15,30,60,120,240};
14
15   LCDBASEL  = LCDBASEU + 320*faktor[vidmode];
16   PAGEWIDTH = faktor[vidmode];
17
18   rLCDSADDR1 = (LCDBANK<<21) | (LCDBASEU<<0) ;
19   rLCDSADDR2 = (LCDBASEL<<0) ;
20   rLCDSADDR3 = (OFFSIZE<<11) | (PAGEWIDTH<<0) ;
21}
22
23short gp32_initFramebufferN(void *add,uint32_t bitmode,uint32_t refreshrate) {
24   uint32_t addr = (uint32_t) add;
25   uint32_t GPHCLK = get_HCLK();
26   {  uint16_t BPPMODE = 12;     
27      uint16_t CLKVAL = 3;       
28      uint16_t ENVID = 1;
29      uint16_t MMODE = 0;
30      uint16_t PNRMODE = 3;
31      switch (bitmode) {
32         case 16 : BPPMODE=12; break;
33         case  8 : BPPMODE=11; break;
34         case  4 : BPPMODE=10; break;
35         case  2 : BPPMODE= 9; break;
36         case  1 : BPPMODE= 8; break;
37         default : BPPMODE= 12; break;
38      }
39      /* Get the correct CLKVAL for refreshrate
40         works in all bitmodes now :)
41      */
42      if (refreshrate <  50) refreshrate = 50;
43      if (refreshrate > 120) refreshrate =120;
44      CLKVAL = (GPHCLK/(83385*2*refreshrate))-1;
45      if (CLKVAL == 0) CLKVAL=1;
46      refreshrate = GPHCLK / (83385*2*(CLKVAL+1));
47      rLCDCON1 = (CLKVAL<<8) | (MMODE<<7) | (PNRMODE<<5) | (BPPMODE<<1) | (ENVID<<0) ;
48   }
49   {  uint16_t LINEVAL = 320-1;
50      uint16_t VBPD = 1;
51      uint16_t VFPD = 2;
52      uint16_t VSPW = 1;
53      rLCDCON2 = 0;
54      rLCDCON2 = (VBPD<<24) | (LINEVAL<<14) | (VFPD<<6) | (VSPW<<0) ;
55   }
56   {  uint16_t HBPD = 6;
57      uint16_t HFPD = 2;
58      uint16_t HOZVAL = 240-1;
59      rLCDCON3 = 0;
60      rLCDCON3 = (HBPD<<19) | (HOZVAL<<8) | (HFPD<<0) ;
61   }
62   {  uint16_t ADDVAL = 0;
63      uint16_t HSPW = 4;
64      uint16_t MVAL = 0;
65      uint16_t PALADDEN = 0;
66      rLCDCON4 = 0;
67      rLCDCON4 = (PALADDEN<<24) | (ADDVAL<<16) | (MVAL<<8) | (HSPW<<0) ;
68   }
69   {  uint16_t BSWP = 0;
70      uint16_t ENLEND = 0;
71      uint16_t HWSWP = 1;
72      uint16_t INVENDLINE = 0;
73      uint16_t INVVCLK = 1;
74      uint16_t INVVD = 0;
75      uint16_t INVVDEN = 0;
76      uint16_t INVVFRAME = 1;
77      uint16_t INVVLINE = 1;
78      if (bitmode<16) { BSWP=1;HWSWP=0; }
79      rLCDCON5 = 0;
80      rLCDCON5 = (INVVCLK<<10) | (INVVLINE<<9) | (INVVFRAME<<8) | (INVVD<<7) | (INVVDEN<<6)
81               | (INVENDLINE<<4) | (ENLEND<<2) | (BSWP<<1) | (HWSWP<<0) ;
82   }
83   gp32_setFramebuffer((uint32_t*)addr);
84
85return refreshrate;
86}
87
88short gp32_initFramebufferBP(void *add,uint32_t bitmode,uint32_t refreshrate) {
89  uint32_t addr = (uint32_t) add;
90  uint32_t GPHCLK = get_HCLK();
91  {  uint16_t BPPMODE = 12;     
92     uint16_t CLKVAL = 3;       
93     uint16_t ENVID = 1;
94     uint16_t MMODE = 0;
95     uint16_t PNRMODE = 3;
96     switch (bitmode) {
97        case 16 : BPPMODE=12; break;
98        case  8 : BPPMODE=11; break;
99        case  4 : BPPMODE=10; break;
100        case  2 : BPPMODE= 9; break;
101        case  1 : BPPMODE= 8; break;
102     }
103     /* Get the correct CLKVAL for refreshrate
104        works in all bitmodes now :)
105     */
106     if (refreshrate <  50) refreshrate = 50;
107     if (refreshrate > 120) refreshrate =120;
108     CLKVAL = (GPHCLK/(109850*2*refreshrate))-1;
109     if (CLKVAL == 0) CLKVAL=1;
110     refreshrate = GPHCLK / (109850*2*(CLKVAL+1));
111     rLCDCON1 = (CLKVAL<<8) | (MMODE<<7) | (PNRMODE<<5) | (BPPMODE<<1) | (ENVID<<0);
112  }
113  {  uint16_t LINEVAL = 320-1;
114     uint16_t VBPD = 8;
115     uint16_t VFPD = 2;
116     uint16_t VSPW = 5;
117     rLCDCON2 = 0;
118     rLCDCON2 = (VBPD<<24) | (LINEVAL<<14) | (VFPD<<6) | (VSPW<<0);
119  }
120  {  uint16_t HBPD = 50;
121     uint16_t HFPD = 2;
122     uint16_t HOZVAL = 240-1;
123     rLCDCON3 = 0;
124     rLCDCON3 = (HBPD<<19) | (HOZVAL<<8) | (HFPD<<0);
125  }
126  {  uint16_t ADDVAL = 0;
127     uint16_t HSPW = 30;
128     uint16_t MVAL = 0;
129     uint16_t PALADDEN = 0;
130     rLCDCON4 = 0;
131     rLCDCON4 = (PALADDEN<<24) | (ADDVAL<<16) | (MVAL<<8) | (HSPW<<0);
132  }
133  {  uint16_t BSWP = 0;
134     uint16_t ENLEND = 0;
135     uint16_t HWSWP = 1;
136     uint16_t INVENDLINE = 0;
137     uint16_t INVVCLK = 1;
138     uint16_t INVVD = 0;
139     uint16_t INVVDEN = 0;
140     uint16_t INVVFRAME = 1;
141     uint16_t INVVLINE = 1;
142     if (bitmode<16) { BSWP=1;HWSWP=0; }
143     rLCDCON5 = 0;
144     rLCDCON5 = (INVVCLK<<10) | (INVVLINE<<9) | (INVVFRAME<<8) | (INVVD<<7) | (INVVDEN<<6)
145              | (INVENDLINE<<4) | (ENLEND<<2) | (BSWP<<1) | (HWSWP<<0);
146  }
147  gp32_setFramebuffer((uint32_t*)addr);
148
149return refreshrate;
150}
151
152void gp32_setPalette( unsigned char pos, uint16_t color) {
153        unsigned long *palette=(unsigned long *)0x14A00400;
154        while ((rLCDCON5>>19) == 2);
155        palette[pos]=color;
156}
Note: See TracBrowser for help on using the repository browser.