source: svn/trunk/newcon3bcm2_21bu/dta/src/bootloader7574/cir.c @ 27

Last change on this file since 27 was 27, checked in by megakiss, 11 years ago

티브로드 리모콘 적용

  • Property svn:executable set to *
File size: 11.9 KB
Line 
1/***************************************************************
2**
3**  Broadcom Corp. Confidential
4**  Copyright 2012 Broadcom Corp.  All Rights Reserved.
5**
6**  THIS SOFTWARE MAY ONLY BE USED SUBJECT TO AN EXECUTED
7**  SOFTWARE LICENSE AGREEMENT  BETWEEN THE USER AND BROADCOM. 
8**  YOU HAVE NO RIGHT TO USE OR EXPLOIT THIS MATERIAL EXCEPT
9**  SUBJECT TO THE TERMS OF SUCH AN AGREEMENT.
10**
11**  File:         cir.c
12**  Description:  IR remote CIR related defines and routines
13**  Created:      10/18/2012 Liqun Ruan
14**
15****************************************************************/
16/* include files        */
17#include "bstd.h"
18#include "bmips.h"
19#include "bchp_common.h"
20//#include "bchp_memc_arb_0.h"
21#include "bchp_kbd1.h"
22
23#include "bchp_aon_ctrl.h"
24#include "bchp_gio_aon.h"
25
26#ifdef CONFIG_STANDBY
27const uint32_t cir_nec_param_regs[] =
28{
29        BCHP_KBD1_CMD,    0,
30        BCHP_KBD1_CIR_ADDR, 0,  BCHP_KBD1_CIR_DATA, 0xc8,
31        BCHP_KBD1_CIR_ADDR, 1,  BCHP_KBD1_CIR_DATA, 0,
32        BCHP_KBD1_CIR_ADDR, 2,  BCHP_KBD1_CIR_DATA, 0x12,     
33        BCHP_KBD1_CIR_ADDR, 3,  BCHP_KBD1_CIR_DATA, 0x384,
34        BCHP_KBD1_CIR_ADDR, 4,  BCHP_KBD1_CIR_DATA, 0x381,
35        BCHP_KBD1_CIR_ADDR, 5,  BCHP_KBD1_CIR_DATA, 0x1c2,
36        BCHP_KBD1_CIR_ADDR, 6,  BCHP_KBD1_CIR_DATA, 0xe1,
37        BCHP_KBD1_CIR_ADDR, 7,  BCHP_KBD1_CIR_DATA, 0,
38        BCHP_KBD1_CIR_ADDR, 8,  BCHP_KBD1_CIR_DATA, 0,
39        BCHP_KBD1_CIR_ADDR, 9,  BCHP_KBD1_CIR_DATA, 0,
40        BCHP_KBD1_CIR_ADDR, 10, BCHP_KBD1_CIR_DATA, 0,
41        BCHP_KBD1_CIR_ADDR, 11, BCHP_KBD1_CIR_DATA, 0x1f,
42        BCHP_KBD1_CIR_ADDR, 12, BCHP_KBD1_CIR_DATA, 0xc32,
43        BCHP_KBD1_CIR_ADDR, 13, BCHP_KBD1_CIR_DATA, 0x400,
44        BCHP_KBD1_CIR_ADDR, 14, BCHP_KBD1_CIR_DATA, 0x71,
45        BCHP_KBD1_CIR_ADDR, 15, BCHP_KBD1_CIR_DATA, 0x71,
46        BCHP_KBD1_CIR_ADDR, 16, BCHP_KBD1_CIR_DATA, 0x10d,
47        BCHP_KBD1_CIR_ADDR, 17, BCHP_KBD1_CIR_DATA, 0x32,
48        BCHP_KBD1_CIR_ADDR, 18, BCHP_KBD1_CIR_DATA, 0xb0,
49        BCHP_KBD1_CIR_ADDR, 19, BCHP_KBD1_CIR_DATA, 0x31,
50        BCHP_KBD1_CIR_ADDR, 20, BCHP_KBD1_CIR_DATA, 0x16,
51        BCHP_KBD1_CIR_ADDR, 21, BCHP_KBD1_CIR_DATA, 0x6, 
52        BCHP_KBD1_CIR_ADDR, 22, BCHP_KBD1_CIR_DATA, 0,
53        BCHP_KBD1_CIR_ADDR, 23, BCHP_KBD1_CIR_DATA, 0,
54        BCHP_KBD1_CIR_ADDR, 24, BCHP_KBD1_CIR_DATA, 0,
55        BCHP_KBD1_CMD,      0x10,
56        0
57};
58
59const uint32_t cir_rca_param_regs[] =
60{
61        BCHP_KBD1_CMD,    0,
62        BCHP_KBD1_CIR_ADDR, 0,  BCHP_KBD1_CIR_DATA, 0x87,
63        BCHP_KBD1_CIR_ADDR, 1,  BCHP_KBD1_CIR_DATA, 0,
64        BCHP_KBD1_CIR_ADDR, 2,  BCHP_KBD1_CIR_DATA, 0x02,     
65        BCHP_KBD1_CIR_ADDR, 3,  BCHP_KBD1_CIR_DATA, 0x190,
66        BCHP_KBD1_CIR_ADDR, 4,  BCHP_KBD1_CIR_DATA, 0,
67        BCHP_KBD1_CIR_ADDR, 5,  BCHP_KBD1_CIR_DATA, 0x190,
68        BCHP_KBD1_CIR_ADDR, 6,  BCHP_KBD1_CIR_DATA, 0,
69        BCHP_KBD1_CIR_ADDR, 7,  BCHP_KBD1_CIR_DATA, 0,
70        BCHP_KBD1_CIR_ADDR, 8,  BCHP_KBD1_CIR_DATA, 0,
71        BCHP_KBD1_CIR_ADDR, 9,  BCHP_KBD1_CIR_DATA, 0,
72        BCHP_KBD1_CIR_ADDR, 10, BCHP_KBD1_CIR_DATA, 0,
73        BCHP_KBD1_CIR_ADDR, 11, BCHP_KBD1_CIR_DATA, 0x17,
74        BCHP_KBD1_CIR_ADDR, 12, BCHP_KBD1_CIR_DATA, 0xc32,
75        BCHP_KBD1_CIR_ADDR, 13, BCHP_KBD1_CIR_DATA, 0x400,
76        BCHP_KBD1_CIR_ADDR, 14, BCHP_KBD1_CIR_DATA, 0x96,
77        BCHP_KBD1_CIR_ADDR, 15, BCHP_KBD1_CIR_DATA, 0x64,
78        BCHP_KBD1_CIR_ADDR, 16, BCHP_KBD1_CIR_DATA, 0x10d,
79        BCHP_KBD1_CIR_ADDR, 17, BCHP_KBD1_CIR_DATA, 0x32,
80        BCHP_KBD1_CIR_ADDR, 18, BCHP_KBD1_CIR_DATA, 0xb0,
81        BCHP_KBD1_CIR_ADDR, 19, BCHP_KBD1_CIR_DATA, 0x31,
82        BCHP_KBD1_CIR_ADDR, 20, BCHP_KBD1_CIR_DATA, 0xb,
83        BCHP_KBD1_CIR_ADDR, 21, BCHP_KBD1_CIR_DATA, 0xc, 
84        BCHP_KBD1_CIR_ADDR, 22, BCHP_KBD1_CIR_DATA, 0,
85        BCHP_KBD1_CIR_ADDR, 23, BCHP_KBD1_CIR_DATA, 0,
86        BCHP_KBD1_CIR_ADDR, 24, BCHP_KBD1_CIR_DATA, 0,
87        BCHP_KBD1_CMD,      0x10,
88        0
89};
90
91void cir_configure(uint32_t id)
92{
93        int i, count;
94
95        /* setup data filter for PWR IR code */
96        if (id == 1) {
97        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_CMD) = 0x121;
98        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_MASK0) = 0xFFFF00FF;
99        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_PAT0 ) = 0x00000F00;
100        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_MASK1) = 0x00FFFFFF;
101        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_PAT1 ) = 0x0F000000;
102        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_MASK2) = 0xFFFFFFFF;
103        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_PAT2 ) = 0x00000000;
104        }
105        else if (id == 8) {
106        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_CMD) = 0x134;
107        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_MASK0) = 0xFFFFFF00;
108        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_PAT0 ) = 0x0000000A;
109        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_MASK1) = 0xFF00FFFF;
110        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_PAT1 ) = 0x000A0000;
111        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_MASK2) = 0xFFFFFFFF;
112        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_PAT2 ) = 0x00000000;
113        }
114        else if (id == 9) {
115                *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_CMD) = 0x130;
116                *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_MASK0) = 0xFF00FFFF;
117                *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_PAT0 ) = 0x000a0000;
118                *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_MASK1) = 0xFFFFFFFF;
119                *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_PAT1 ) = 0x00000000;
120                *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_MASK2) = 0xFFFFFF00;
121                *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_PAT2 ) = 0x0000000a;
122        }
123        else if (5 == id) {
124                count = sizeof(cir_rca_param_regs)/sizeof(cir_rca_param_regs[0]);
125                i = 0;
126                do {
127                        if (0 == cir_rca_param_regs[i]) {
128                                break;
129                        }
130                        if (BCHP_KBD1_CMD == cir_rca_param_regs[i]) { 
131                                *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+cir_rca_param_regs[i]) = cir_rca_param_regs[i+1];
132                                i += 2;
133                        }
134                        else {
135                                /* progress CIR */
136                                /* CIR address */
137                                *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+cir_rca_param_regs[i]) = cir_rca_param_regs[i+1];
138                                i += 2;
139                                /* CIR data */
140                                *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+cir_rca_param_regs[i]) = cir_rca_param_regs[i+1];
141                                i += 2;
142                        }
143                } while (i < count);
144
145                /* RCA */
146                *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_CMD) = 0x130;      /* must match, enable interrupt, CIR */
147                *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_MASK0) = 0xFF8FFF00;
148                *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_PAT0 ) = 0x007000d5;
149                *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_MASK1) = 0xFF00FFFF;
150                *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_PAT1 ) = 0x00d50000;
151                *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_MASK2) = 0xFFFFFF8F;
152                *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_PAT2 ) = 0x00000070;
153        }
154        else if (10 == id || 4 == id || 11 == id || 12 == id || 15 == id) {
155                count = sizeof(cir_nec_param_regs)/sizeof(cir_nec_param_regs[0]);
156                i = 0;
157                do {
158                        if (0 == cir_nec_param_regs[i]) {
159                                break;
160                        }
161                        if (BCHP_KBD1_CMD == cir_nec_param_regs[i]) { 
162                                *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+cir_nec_param_regs[i]) = cir_nec_param_regs[i+1];
163                                i += 2;
164                        }
165                        else {
166                                /* progress CIR */
167                                /* CIR address */
168                                *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+cir_nec_param_regs[i]) = cir_nec_param_regs[i+1];
169                                i += 2;
170                                /* CIR data */
171                                *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+cir_nec_param_regs[i]) = cir_nec_param_regs[i+1];
172                                i += 2;
173                        }
174                } while (i < count);
175                if (10 == id) {
176                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_CMD)               = 0x130;        /* must match, enable interrupt, CIR */
177                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_MASK0)         = 0xFFFFFF00;
178                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_PAT0 )         = 0x0000003F;
179                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_MASK1)         = 0xFF00FFFF;
180                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_PAT1 )         = 0x003F0000;
181                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_MASK2)         = 0xFFFFFFFF;
182                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_PAT2 )         = 0x00000000;
183                }
184                else if (4 == id) {
185                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_CMD)               = 0x130;        /* must match, enable interrupt, CIR */
186                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_MASK0)         = 0xFF8FFF00;
187                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_PAT0 )         = 0x00600047;
188                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_MASK1)         = 0xFF00FFFF;
189                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_PAT1 )         = 0x00660000;
190                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_MASK2)         = 0xFFFF0000;
191                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_PAT2 )         = 0x0000B847;
192                }
193                else if (11 == id) {
194                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_CMD)               = 0x130;        /* must match, enable interrupt, CIR */
195                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_MASK0)         = 0xFFFFFF00;
196                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_PAT0 )         = 0x000000E7;
197                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_MASK1)         = 0xFF00FFFF;
198                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_PAT1 )         = 0x00810000;
199                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_MASK2)         = 0xFFFFFFFF;
200                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_PAT2 )         = 0x00000000;   
201                }
202                else if (12 == id) {
203                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_CMD)               = 0x130;        /* must match, enable interrupt, CIR */
204                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_MASK0)         = 0xFFFFFF00;
205                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_PAT0 )         = 0x000000C4;
206                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_MASK1)         = 0xFF00FFFF;
207                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_PAT1 )         = 0x00BF0000;
208                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_MASK2)         = 0xFFFFFFFF;
209                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_PAT2 )         = 0x00000000;   
210                }
211                else if (15 == id) {
212                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_CMD)               = 0x130;        /* must match, enable interrupt, CIR */
213#if 0
214                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_MASK0)         = ~0x041000FF;
215                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_PAT0 )         = 0x041000FF;
216                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_MASK1)         = ~0x00FF0000;
217                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_PAT1 )         = 0x00FF0000;
218                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_MASK2)         = ~0x00000410;
219                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_PAT2 )         = 0x00000410;   
220#else
221                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_MASK0)         = ~0x51AF30CF;
222                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_PAT0 )         = 0x51AF30CF;
223                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_MASK1)         = ~0x30CF0000;
224                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_PAT1 )         = 0x30CF0000;
225                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_MASK2)         = ~0x000051AF;
226                        *(volatile unsigned long *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_KBD1_KBD_PAT2 )         = 0x000051AF;
227#endif
228                }
229        }
230}
231#endif  /*CONFIG_STANDBY*/
Note: See TracBrowser for help on using the repository browser.