ReactOS  0.4.15-dev-1070-ge1a01de
hwlcd.c File Reference
#include "precomp.h"
Include dependency graph for hwlcd.c:

Go to the source code of this file.

Functions

VOID NTAPI LlbHwOmap3LcdInitialize (VOID)
 
ULONG NTAPI LlbHwGetScreenWidth (VOID)
 
ULONG NTAPI LlbHwGetScreenHeight (VOID)
 
PVOID NTAPI LlbHwGetFrameBuffer (VOID)
 
ULONG NTAPI LlbHwVideoCreateColor (IN ULONG Red, IN ULONG Green, IN ULONG Blue)
 

Variables

PUSHORT LlbHwVideoBuffer
 

Function Documentation

◆ LlbHwGetFrameBuffer()

PVOID NTAPI LlbHwGetFrameBuffer ( VOID  )

Definition at line 115 of file hwlcd.c.

116 {
117  return (PVOID)0x800A0000;
118 }

◆ LlbHwGetScreenHeight()

ULONG NTAPI LlbHwGetScreenHeight ( VOID  )

Definition at line 108 of file hwlcd.c.

109 {
110  return 480;
111 }

◆ LlbHwGetScreenWidth()

ULONG NTAPI LlbHwGetScreenWidth ( VOID  )

Definition at line 101 of file hwlcd.c.

102 {
103  return 800;
104 }

◆ LlbHwOmap3LcdInitialize()

VOID NTAPI LlbHwOmap3LcdInitialize ( VOID  )

Definition at line 15 of file hwlcd.c.

16 {
17  /*
18  * N.B. The following initialization sequence took about 12 months to figure
19  * out.
20  * This means if you are glancing at it and have no idea what on Earth
21  * could possibly be going on, this is *normal*.
22  * Just trust that this turns on the LCD.
23  * And be thankful all you ever have to worry about is Java and HTML.
24  */
25 
26  /* Turn on the functional and interface clocks in the entire PER domain */
27  WRITE_REGISTER_ULONG(0x48005000, 0x3ffff); /* Functional clocks */
28  WRITE_REGISTER_ULONG(0x48005010, 0x3ffff); /* Interface clocks */
29 
30  /* Now that GPIO Module 3 is on, send a reset to the LCD panel on GPIO 96 */
31  WRITE_REGISTER_ULONG(0x49054034, 0); /* FIXME: Enable all as output */
32  WRITE_REGISTER_ULONG(0x49054094, 0xffffffff); /* FIXME: Output on all gpios */
33 
34  /* Now turn on the functional and interface clocks in the CORE domain */
35  WRITE_REGISTER_ULONG(0x48004a00, 0x03fffe29); /* Functional clocks */
36  WRITE_REGISTER_ULONG(0x48004a10, 0x3ffffffb); /* Interface clocks */
37 
38  /* The HS I2C interface is now on, configure it */
39  WRITE_REGISTER_USHORT(0x48070024, 0x0); /* Disable I2c */
40  WRITE_REGISTER_USHORT(0x48070030, 0x17); /* Configure clock divider */
41  WRITE_REGISTER_USHORT(0x48070034, 0xd); /* Configure clock scaler */
42  WRITE_REGISTER_USHORT(0x48070038, 0xf); /* Configure clock scaler */
43  WRITE_REGISTER_USHORT(0x48070020, 0x215); /* Configure clocks and idle */
44  WRITE_REGISTER_USHORT(0x4807000c, 0x636f); /* Select wakeup bits */
45  WRITE_REGISTER_USHORT(0x48070014, 0x4343); /* Disable DMA */
46  WRITE_REGISTER_USHORT(0x48070024, 0x8000); /* Enable I2C */
47 
48  /*
49  * Set the VPLL2 to cover all device groups instead of just P3.
50  * This essentially enables the VRRTC to power up the LCD panel.
51  */
52  LlbHwOmap3TwlWrite1(0x4B, 0x8E, 0xE0);
53 
54  /* VPLL2 runs at 1.2V by default, so we need to reprogram to 1.8V for DVI */
55  LlbHwOmap3TwlWrite1(0x4B, 0x91, 0x05);
56 
57  /* Set GPIO pin 7 on the TWL4030 as an output pin */
58  LlbHwOmap3TwlWrite1(0x49, 0x9B, 0x80);
59 
60  /* Set GPIO pin 7 signal on the TWL4030 ON. This powers the LCD backlight */
61  LlbHwOmap3TwlWrite1(0x49, 0xA4, 0x80);
62 
63  /* Now go on the McSPI interface and program it on for the channel */
64  WRITE_REGISTER_ULONG(0x48098010, 0x15);
65  WRITE_REGISTER_ULONG(0x48098020, 0x1);
66  WRITE_REGISTER_ULONG(0x48098028, 0x1);
67  WRITE_REGISTER_ULONG(0x4809802c, 0x112fdc);
68 
69  /* Send the reset signal (R2 = 00h) to the NEC WVGA LCD Panel */
70  WRITE_REGISTER_ULONG(0x48098034, 0x1);
71  WRITE_REGISTER_ULONG(0x48098038, 0x20100);
72  WRITE_REGISTER_ULONG(0x48098034, 0x0);
73 
74  /* Turn on the functional and interface clocks in the DSS domain */
75  WRITE_REGISTER_ULONG(0x48004e00, 0x5);
76  WRITE_REGISTER_ULONG(0x48004e10, 0x1);
77 
78  /* Reset the Display Controller (DISPC) */
79  WRITE_REGISTER_ULONG(0x48050410, 0x00000005); // DISPC_SYSCONFIG
80 
81  /* Set the frame buffer address */
82  WRITE_REGISTER_ULONG(0x48050480, 0x800A0000); // DISPC_GFX_BA0
83 
84  /* Set resolution and RGB16 color mode */
85  WRITE_REGISTER_ULONG(0x4805048c, 0x01df031f); // DISPC_GFX_SIZE
86  WRITE_REGISTER_ULONG(0x480504a0, 0x0000000d); // DISPC_GFX_ATTRIBUTES
87 
88  /* Set LCD timings (VSync and HSync), pixel clock, and LCD size */
89  WRITE_REGISTER_ULONG(0x4805046c, 0x00003000); // DISPC_POL_FREQ
90  WRITE_REGISTER_ULONG(0x48050470, 0x00010004); // DISPC_DIVISOR
91  WRITE_REGISTER_ULONG(0x48050464, 0x00300500); // DISPC_TIMING_H
92  WRITE_REGISTER_ULONG(0x48050468, 0x00400300); // DISPC_TIMING_V
93  WRITE_REGISTER_ULONG(0x4805047c, 0x01df031f); // DISPC_SIZE_LCD
94 
95  /* Turn the LCD on */
96  WRITE_REGISTER_ULONG(0x48050440, 0x00018309); // DISPC_CONTROL
97 }
NTKERNELAPI VOID NTAPI WRITE_REGISTER_ULONG(IN PULONG Register, IN ULONG Value)
GLint x0
Definition: linetemp.h:95
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG x1
Definition: winddi.h:3706
NTKERNELAPI VOID NTAPI WRITE_REGISTER_USHORT(IN PUSHORT Register, IN USHORT Value)
VOID NTAPI LlbHwOmap3TwlWrite1(IN UCHAR ChipAddress, IN UCHAR RegisterAddress, IN UCHAR Value)
Definition: hwtwl40x.c:61

Referenced by LlbHwInitialize().

◆ LlbHwVideoCreateColor()

ULONG NTAPI LlbHwVideoCreateColor ( IN ULONG  Red,
IN ULONG  Green,
IN ULONG  Blue 
)

Definition at line 122 of file hwlcd.c.

125 {
126  return (((Red >> 3) << 11)| ((Green >> 2) << 5)| ((Blue >> 3) << 0));
127 }
Definition: bl.h:202
Definition: bl.h:199
Definition: bl.h:200

Variable Documentation

◆ LlbHwVideoBuffer

PUSHORT LlbHwVideoBuffer

Definition at line 11 of file hwlcd.c.