1 /* 2 * PROJECT: ReactOS Boot Loader 3 * LICENSE: BSD - See COPYING.ARM in the top level directory 4 * FILE: boot/armllb/hw/versatile/hwclcd.c 5 * PURPOSE: LLB CLCD Routines for Versatile 6 * PROGRAMMERS: ReactOS Portable Systems Group 7 */ 8 9 #include "precomp.h" 10 11 #define LCDTIMING0_PPL(x) ((((x) / 16 - 1) & 0x3f) << 2) 12 #define LCDTIMING1_LPP(x) (((x) & 0x3ff) - 1) 13 #define LCDCONTROL_LCDPWR (1 << 11) 14 #define LCDCONTROL_LCDEN (1) 15 #define LCDCONTROL_LCDBPP(x) (((x) & 7) << 1) 16 #define LCDCONTROL_LCDTFT (1 << 5) 17 18 #define PL110_LCDTIMING0 (PVOID)0x10120000 19 #define PL110_LCDTIMING1 (PVOID)0x10120004 20 #define PL110_LCDTIMING2 (PVOID)0x10120008 21 #define PL110_LCDUPBASE (PVOID)0x10120010 22 #define PL110_LCDLPBASE (PVOID)0x10120014 23 #define PL110_LCDCONTROL (PVOID)0x10120018 24 25 PUSHORT LlbHwVideoBuffer; 26 27 VOID 28 NTAPI 29 LlbHwVersaClcdInitialize(VOID) 30 { 31 /* Set framebuffer address */ 32 WRITE_REGISTER_ULONG(PL110_LCDUPBASE, (ULONG)LlbHwGetFrameBuffer()); 33 WRITE_REGISTER_ULONG(PL110_LCDLPBASE, (ULONG)LlbHwGetFrameBuffer()); 34 35 /* Initialize timings to 720x400 */ 36 WRITE_REGISTER_ULONG(PL110_LCDTIMING0, LCDTIMING0_PPL(LlbHwGetScreenWidth())); 37 WRITE_REGISTER_ULONG(PL110_LCDTIMING1, LCDTIMING1_LPP(LlbHwGetScreenHeight())); 38 39 /* Enable the TFT/LCD Display */ 40 WRITE_REGISTER_ULONG(PL110_LCDCONTROL, 41 LCDCONTROL_LCDEN | 42 LCDCONTROL_LCDTFT | 43 LCDCONTROL_LCDPWR | 44 LCDCONTROL_LCDBPP(4)); 45 } 46 47 ULONG 48 NTAPI 49 LlbHwGetScreenWidth(VOID) 50 { 51 return 720; 52 } 53 54 ULONG 55 NTAPI 56 LlbHwGetScreenHeight(VOID) 57 { 58 return 400; 59 } 60 61 PVOID 62 NTAPI 63 LlbHwGetFrameBuffer(VOID) 64 { 65 return (PVOID)0x000A0000; 66 } 67 68 ULONG 69 NTAPI 70 LlbHwVideoCreateColor(IN ULONG Red, 71 IN ULONG Green, 72 IN ULONG Blue) 73 { 74 return (((Blue >> 3) << 11)| ((Green >> 2) << 5)| ((Red >> 3) << 0)); 75 } 76 77 /* EOF */ 78