xref: /reactos/boot/armllb/hw/omap3-zoom2/hwtwl40x.c (revision 9393fc32)
1 /*
2  * PROJECT:         ReactOS Boot Loader
3  * LICENSE:         BSD - See COPYING.ARM in the top level directory
4  * FILE:            boot/armllb/hw/omap3-zoom2/hwtwl40x.c
5  * PURPOSE:         LLB Synpatics Keypad Support for OMAP3 ZOOM 2
6  * PROGRAMMERS:     ReactOS Portable Systems Group
7  */
8 
9 #include "precomp.h"
10 
11 /* FUNCTIONS ******************************************************************/
12 
13 UCHAR
14 NTAPI
LlbHwOmap3TwlRead1(IN UCHAR ChipAddress,IN UCHAR RegisterAddress)15 LlbHwOmap3TwlRead1(IN UCHAR ChipAddress,
16                    IN UCHAR RegisterAddress)
17 {
18     volatile int i = 1000;
19 
20     /* Select the register */
21     LlbHwOmap3TwlWrite(ChipAddress, RegisterAddress, 0, NULL);
22 
23     /* Now read it */
24     WRITE_REGISTER_USHORT(0x48070024, 0x8401);
25     for (i = 1000; i > 0; i--);
26     return READ_REGISTER_USHORT(0x4807001c);
27 }
28 
29 VOID
30 NTAPI
LlbHwOmap3TwlWrite(IN UCHAR ChipAddress,IN UCHAR RegisterAddress,IN UCHAR Length,IN PUCHAR Values)31 LlbHwOmap3TwlWrite(IN UCHAR ChipAddress,
32                    IN UCHAR RegisterAddress,
33                    IN UCHAR Length,
34                    IN PUCHAR Values)
35 {
36     volatile int i = 1000;
37     ULONG j;
38 
39     /* Select chip address */
40     WRITE_REGISTER_USHORT(0x4807002c, ChipAddress);
41     WRITE_REGISTER_USHORT(0x48070018, Length + 1);
42 
43     /* Enable master transmit mode */
44     WRITE_REGISTER_USHORT(0x48070024, 0x8601);
45     WRITE_REGISTER_USHORT(0x4807001c, RegisterAddress);
46 
47     /* Loop each byte */
48     for (j = 0; j < Length; j++)
49     {
50         /* Write the data */
51         WRITE_REGISTER_USHORT(0x4807001c, Values[j]);
52     }
53 
54     /* Issue stop command */
55     WRITE_REGISTER_USHORT(0x48070024, 0x8602);
56     for (i = 1000; i > 0; i--);
57 }
58 
59 VOID
60 NTAPI
LlbHwOmap3TwlWrite1(IN UCHAR ChipAddress,IN UCHAR RegisterAddress,IN UCHAR Value)61 LlbHwOmap3TwlWrite1(IN UCHAR ChipAddress,
62                     IN UCHAR RegisterAddress,
63                     IN UCHAR Value)
64 {
65     /* Do the actual write */
66     LlbHwOmap3TwlWrite(ChipAddress, RegisterAddress, 1, &Value);
67 }
68 
69 /* EOF */
70