source: svn/trunk/newcon3bcm2_21bu/dta/src/app/ntia/birw.c @ 28

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

티브로드 리모콘 적용

  • Property svn:executable set to *
File size: 11.0 KB
Line 
1#include "bapp.h"
2#include "bstd.h"
3#include "gist.h"
4#include "bchp_aon_ctrl.h"
5#include "bchp_aon_pm_l2.h"
6#include "bchp_kbd1.h"
7#include "bchp_gio_aon.h"
8
9BDBG_MODULE("birw");
10
11extern void bdisplay_standby(bdisplay_t display, bool standby);
12#if HAS_HDMI
13extern void bsettop_hdmi_standby(bsettop_hdmi_t h_hdmi, bool standby);
14#endif
15extern void brfm_standby(brfm_t rfm, bool standby);
16extern void baudio_decode_standby(baudio_decode_t audio, bool standby);
17
18#ifdef ACB612
19#if(USERIO_ID == 5)
20const uint32_t cir_rca_param_regs[] =
21{
22        //BCHP_KBD1_CMD,          0,
23        BCHP_KBD1_CIR_ADDR, 0,  BCHP_KBD1_CIR_DATA, 0x87,
24        BCHP_KBD1_CIR_ADDR, 1,  BCHP_KBD1_CIR_DATA, 0,
25        BCHP_KBD1_CIR_ADDR, 2,  BCHP_KBD1_CIR_DATA, 0x02,     
26        BCHP_KBD1_CIR_ADDR, 3,  BCHP_KBD1_CIR_DATA, 0x190,
27        BCHP_KBD1_CIR_ADDR, 4,  BCHP_KBD1_CIR_DATA, 0,
28        BCHP_KBD1_CIR_ADDR, 5,  BCHP_KBD1_CIR_DATA, 0x190,
29        BCHP_KBD1_CIR_ADDR, 6,  BCHP_KBD1_CIR_DATA, 0,
30        BCHP_KBD1_CIR_ADDR, 7,  BCHP_KBD1_CIR_DATA, 0,
31        BCHP_KBD1_CIR_ADDR, 8,  BCHP_KBD1_CIR_DATA, 0,
32        BCHP_KBD1_CIR_ADDR, 9,  BCHP_KBD1_CIR_DATA, 0,
33        BCHP_KBD1_CIR_ADDR, 10, BCHP_KBD1_CIR_DATA, 0,
34        BCHP_KBD1_CIR_ADDR, 11, BCHP_KBD1_CIR_DATA, 0x17,
35        BCHP_KBD1_CIR_ADDR, 12, BCHP_KBD1_CIR_DATA, 0xc32,
36        BCHP_KBD1_CIR_ADDR, 13, BCHP_KBD1_CIR_DATA, 0x400,
37        BCHP_KBD1_CIR_ADDR, 14, BCHP_KBD1_CIR_DATA, 0x96,
38        BCHP_KBD1_CIR_ADDR, 15, BCHP_KBD1_CIR_DATA, 0x64,
39        BCHP_KBD1_CIR_ADDR, 16, BCHP_KBD1_CIR_DATA, 0x10d,
40        BCHP_KBD1_CIR_ADDR, 17, BCHP_KBD1_CIR_DATA, 0x32,
41        BCHP_KBD1_CIR_ADDR, 18, BCHP_KBD1_CIR_DATA, 0xb0,
42        BCHP_KBD1_CIR_ADDR, 19, BCHP_KBD1_CIR_DATA, 0x31,
43        BCHP_KBD1_CIR_ADDR, 20, BCHP_KBD1_CIR_DATA, 0xb,
44        BCHP_KBD1_CIR_ADDR, 21, BCHP_KBD1_CIR_DATA, 0xc, 
45        BCHP_KBD1_CIR_ADDR, 22, BCHP_KBD1_CIR_DATA, 0,
46        BCHP_KBD1_CIR_ADDR, 23, BCHP_KBD1_CIR_DATA, 0,
47        BCHP_KBD1_CIR_ADDR, 24, BCHP_KBD1_CIR_DATA, 0,
48        //BCHP_KBD1_CMD,      0x130,                                            /* must match, enable interrupt, CIR */
49        0
50};
51#endif
52
53#if(USERIO_ID == 4 || USERIO_ID == 10 || USERIO_ID == 11 || USERIO_ID == 12 || USERIO_ID == 15)
54
55const uint32_t cir_nec_param_regs[] =
56{
57        //BCHP_KBD1_CMD,          0,
58    BCHP_KBD1_CIR_ADDR, 0,  BCHP_KBD1_CIR_DATA, 0xc8,
59    BCHP_KBD1_CIR_ADDR, 1,  BCHP_KBD1_CIR_DATA, 0,
60    BCHP_KBD1_CIR_ADDR, 2,  BCHP_KBD1_CIR_DATA, 0x12,
61    BCHP_KBD1_CIR_ADDR, 3,  BCHP_KBD1_CIR_DATA, 0x384,
62    BCHP_KBD1_CIR_ADDR, 4,  BCHP_KBD1_CIR_DATA, 0x381,
63    BCHP_KBD1_CIR_ADDR, 5,  BCHP_KBD1_CIR_DATA, 0x1c2,
64    BCHP_KBD1_CIR_ADDR, 6,  BCHP_KBD1_CIR_DATA, 0xe1,
65    BCHP_KBD1_CIR_ADDR, 7,  BCHP_KBD1_CIR_DATA, 0,
66    BCHP_KBD1_CIR_ADDR, 8,  BCHP_KBD1_CIR_DATA, 0,
67    BCHP_KBD1_CIR_ADDR, 9,  BCHP_KBD1_CIR_DATA, 0,
68    BCHP_KBD1_CIR_ADDR, 10, BCHP_KBD1_CIR_DATA, 0,
69    BCHP_KBD1_CIR_ADDR, 11, BCHP_KBD1_CIR_DATA, 0x1f,
70    BCHP_KBD1_CIR_ADDR, 12, BCHP_KBD1_CIR_DATA, 0xc32,
71    BCHP_KBD1_CIR_ADDR, 13, BCHP_KBD1_CIR_DATA, 0x400,
72    BCHP_KBD1_CIR_ADDR, 14, BCHP_KBD1_CIR_DATA, 0x71,
73    BCHP_KBD1_CIR_ADDR, 15, BCHP_KBD1_CIR_DATA, 0x71,
74    BCHP_KBD1_CIR_ADDR, 16, BCHP_KBD1_CIR_DATA, 0x10d,
75    BCHP_KBD1_CIR_ADDR, 17, BCHP_KBD1_CIR_DATA, 0x32,
76    BCHP_KBD1_CIR_ADDR, 18, BCHP_KBD1_CIR_DATA, 0xb0,
77    BCHP_KBD1_CIR_ADDR, 19, BCHP_KBD1_CIR_DATA, 0x31,
78    BCHP_KBD1_CIR_ADDR, 20, BCHP_KBD1_CIR_DATA, 0x16,
79    BCHP_KBD1_CIR_ADDR, 21, BCHP_KBD1_CIR_DATA, 0x6,
80    BCHP_KBD1_CIR_ADDR, 22, BCHP_KBD1_CIR_DATA, 0,
81    BCHP_KBD1_CIR_ADDR, 23, BCHP_KBD1_CIR_DATA, 0,
82    BCHP_KBD1_CIR_ADDR, 24, BCHP_KBD1_CIR_DATA, 0,
83        0
84};
85#endif
86#endif
87
88void b_s3_standby(uint32_t id)
89{
90        uint32_t val;
91
92        /* setup data filter for PWR IR code */
93        if (id == 1) {
94                BREG_Write32(GetREG(), BCHP_KBD1_CMD, 0x121);
95                BREG_Write32(GetREG(), BCHP_KBD1_KBD_MASK0,0xFFFF00FF);
96                BREG_Write32(GetREG(), BCHP_KBD1_KBD_MASK1,0x00FFFFFF);
97                BREG_Write32(GetREG(), BCHP_KBD1_KBD_MASK2,0xFFFFFFFF);
98                BREG_Write32(GetREG(), BCHP_KBD1_KBD_PAT0, 0x00000F00);
99                BREG_Write32(GetREG(), BCHP_KBD1_KBD_PAT1, 0x0F000000);
100                BREG_Write32(GetREG(), BCHP_KBD1_KBD_PAT2, 0x00000000);
101        }
102        else if (id == 8) {
103                BREG_Write32(GetREG(), BCHP_KBD1_CMD, 0x134);
104                BREG_Write32(GetREG(), BCHP_KBD1_KBD_MASK0,0xFFFFFF00);
105                BREG_Write32(GetREG(), BCHP_KBD1_KBD_MASK1,0xFF00FFFF);
106                BREG_Write32(GetREG(), BCHP_KBD1_KBD_MASK2,0xFFFFFFFF);
107                BREG_Write32(GetREG(), BCHP_KBD1_KBD_PAT0, 0x0000000A);
108                BREG_Write32(GetREG(), BCHP_KBD1_KBD_PAT1, 0x000A0000);
109                BREG_Write32(GetREG(), BCHP_KBD1_KBD_PAT2, 0x00000000);
110        }
111        else if (id == 9) {
112                BREG_Write32(GetREG(), BCHP_KBD1_CMD, 0x130);
113                BREG_Write32(GetREG(), BCHP_KBD1_KBD_MASK0,0xFF00FFFF);
114                BREG_Write32(GetREG(), BCHP_KBD1_KBD_MASK1,0xFFFFFFFF);
115                BREG_Write32(GetREG(), BCHP_KBD1_KBD_MASK2,0xFFFFFF00);
116                BREG_Write32(GetREG(), BCHP_KBD1_KBD_PAT0, 0x000a0000);
117                BREG_Write32(GetREG(), BCHP_KBD1_KBD_PAT1, 0x00000000);
118                BREG_Write32(GetREG(), BCHP_KBD1_KBD_PAT2, 0x0000000a);
119        }
120#ifdef ACB612
121#if(USERIO_ID == 5)
122        else if (5 == id) {
123                int i, count;
124
125                count = sizeof(cir_rca_param_regs)/sizeof(cir_rca_param_regs[0]);
126                i = 0;
127                do {
128                        if (0 == cir_rca_param_regs[i]) {
129                                break;
130                        }
131                        if (BCHP_KBD1_CMD == cir_rca_param_regs[i]) { 
132                                BREG_Write32(GetREG(), cir_rca_param_regs[i], cir_rca_param_regs[i+1]);
133                                i += 2;
134                        }
135                        else {
136                                /* progress CIR */
137                                /* CIR address */
138                                BREG_Write32(GetREG(), cir_rca_param_regs[i], cir_rca_param_regs[i+1]); i += 2;
139                                /* CIR data */
140                                BREG_Write32(GetREG(), cir_rca_param_regs[i], cir_rca_param_regs[i+1]); i += 2;
141                        }
142                } while (i < count);
143
144                /* RCA */
145                BREG_Write32(GetREG(), BCHP_KBD1_CMD, 0x130);                   /* must match, enable interrupt, CIR */
146               
147                BREG_Write32(GetREG(), BCHP_KBD1_KBD_MASK0,0xFF8FFF00);
148                BREG_Write32(GetREG(), BCHP_KBD1_KBD_PAT0, 0x007000d5);
149                BREG_Write32(GetREG(), BCHP_KBD1_KBD_MASK1,0xFF00FFFF);
150                BREG_Write32(GetREG(), BCHP_KBD1_KBD_PAT1, 0x00d50000);
151                BREG_Write32(GetREG(), BCHP_KBD1_KBD_MASK2,0xFFFFFF8F);
152                BREG_Write32(GetREG(), BCHP_KBD1_KBD_PAT2, 0x00000070);
153        }
154#endif
155#if(USERIO_ID == 12 || USERIO_ID == 11 || USERIO_ID == 10 || USERIO_ID == 4 || USERIO_ID == 15)
156        else if (12 == id ||11 == id || 10 == id || 4 == id || 15 == id) {
157                int i, count;
158
159                count = sizeof(cir_nec_param_regs)/sizeof(cir_nec_param_regs[0]);
160                i = 0;
161                do {
162                        if (0 == cir_nec_param_regs[i]) {
163                                break;
164                        }
165                        if (BCHP_KBD1_CMD == cir_nec_param_regs[i]) { 
166                                BREG_Write32(GetREG(), cir_nec_param_regs[i], cir_nec_param_regs[i+1]);
167                                i += 2;
168                        }
169                        else {
170                                /* progress CIR */
171                                /* CIR address */
172                                BREG_Write32(GetREG(), cir_nec_param_regs[i], cir_nec_param_regs[i+1]); i += 2;
173                                /* CIR data */
174                                BREG_Write32(GetREG(), cir_nec_param_regs[i], cir_nec_param_regs[i+1]); i += 2;
175                        }
176                } while (i < count);
177                /* NEC */
178#if( USERIO_ID == 12)/*janzy@20121030,add remote Skyworth_01*//*0x80BF3BC4*/
179                BREG_Write32(GetREG(), BCHP_KBD1_CMD, 0x130);                   /* must match, enable interrupt, CIR */
180                BREG_Write32(GetREG(), BCHP_KBD1_KBD_MASK0,     0xFFFFFF00);
181                BREG_Write32(GetREG(), BCHP_KBD1_KBD_PAT0,      0x000000C4);
182                BREG_Write32(GetREG(), BCHP_KBD1_KBD_MASK1,     0xFF00FFFF);
183                BREG_Write32(GetREG(), BCHP_KBD1_KBD_PAT1,      0x00BF0000);
184                BREG_Write32(GetREG(), BCHP_KBD1_KBD_MASK2,     0xFFFFFFFF);
185                BREG_Write32(GetREG(), BCHP_KBD1_KBD_PAT2,      0x00000000);
186#endif         
187               
188#if( USERIO_ID == 11)/*0x008118e7*/
189                BREG_Write32(GetREG(), BCHP_KBD1_CMD, 0x130);                   /* must match, enable interrupt, CIR */
190                BREG_Write32(GetREG(), BCHP_KBD1_KBD_MASK0,     0xFFFFFF00);
191                BREG_Write32(GetREG(), BCHP_KBD1_KBD_PAT0,      0x000000E7);
192                BREG_Write32(GetREG(), BCHP_KBD1_KBD_MASK1,     0xFF00FFFF);
193                BREG_Write32(GetREG(), BCHP_KBD1_KBD_PAT1,      0x00810000);
194                BREG_Write32(GetREG(), BCHP_KBD1_KBD_MASK2,     0xFFFFFFFF);
195                BREG_Write32(GetREG(), BCHP_KBD1_KBD_PAT2,      0x00000000);
196#endif         
197#if( USERIO_ID == 10)/*0x01FEC03F*/
198                BREG_Write32(GetREG(), BCHP_KBD1_CMD, 0x130);                   /* must match, enable interrupt, CIR */
199                BREG_Write32(GetREG(), BCHP_KBD1_KBD_MASK0,     0xFFFFFF00);
200                BREG_Write32(GetREG(), BCHP_KBD1_KBD_PAT0,      0x0000003F);
201                BREG_Write32(GetREG(), BCHP_KBD1_KBD_MASK1,     0xFF00FFFF);
202                BREG_Write32(GetREG(), BCHP_KBD1_KBD_PAT1,      0x003F0000);
203                BREG_Write32(GetREG(), BCHP_KBD1_KBD_MASK2,     0xFFFFFFFF);
204                BREG_Write32(GetREG(), BCHP_KBD1_KBD_PAT2,      0x00000000);
205#endif         
206#if(USERIO_ID == 4)/*0x0066B847*/
207                BREG_Write32(GetREG(), BCHP_KBD1_CMD, 0x130);                   /* must match, enable interrupt, CIR */
208
209                BREG_Write32(GetREG(), BCHP_KBD1_KBD_MASK0,     0xFF8FFF00);
210                BREG_Write32(GetREG(), BCHP_KBD1_KBD_PAT0,      0x00600047);
211                                                                                                       
212                BREG_Write32(GetREG(), BCHP_KBD1_KBD_MASK1,     0xFF00FFFF);
213                BREG_Write32(GetREG(), BCHP_KBD1_KBD_PAT1,      0x00660000);
214
215                BREG_Write32(GetREG(), BCHP_KBD1_KBD_MASK2,     0xFFFF0000);
216                BREG_Write32(GetREG(), BCHP_KBD1_KBD_PAT2,      0x0000B847);
217#endif
218#if (15 == USERIO_ID) // CMB 0xFF000820 --> 0x041000FF (ºñÆ® ¹æÇ⠰ŲٷÎ) °Å²Ù·ÎµÈ ºñÆ®¸¦ 24ºñÆ® ´ÜÀ§·Î °ªÀ» ¼³Á¤ÇØ¾ß ÇÔ
219        BREG_Write32(GetREG(), BCHP_KBD1_CMD, 0x130);           /* must match, enable interrupt, CIR */
220        BREG_Write32(GetREG(), BCHP_KBD1_KBD_MASK0, ~0x51AF30CF); // 0xF6090820
221        BREG_Write32(GetREG(), BCHP_KBD1_KBD_PAT0,   0x51AF30CF);
222        BREG_Write32(GetREG(), BCHP_KBD1_KBD_MASK1, ~0x30CF0000);
223        BREG_Write32(GetREG(), BCHP_KBD1_KBD_PAT1,   0x30CF0000);
224        BREG_Write32(GetREG(), BCHP_KBD1_KBD_MASK2, ~0x000051AF);
225        BREG_Write32(GetREG(), BCHP_KBD1_KBD_PAT2,   0x000051AF); 
226#endif
227        }
228#endif
229#endif
230        else {
231                BDBG_ERR(("USERIO_ID %d is not supported for S3 standby now", id));
232                return;
233        }
234        /* clear KBD1 interrupt */
235        val = BREG_Read32(GetREG(), BCHP_KBD1_STATUS);
236        val &= ~BCHP_KBD1_STATUS_irq_MASK;             
237        BREG_Write32(GetREG(), BCHP_KBD1_STATUS, val);
238       
239        /* clear reset history */
240        BREG_Write32(GetREG(), BCHP_AON_CTRL_RESET_CTRL, BCHP_AON_CTRL_RESET_CTRL_clear_reset_history_MASK);
241
242        /* reset wake up device */
243        BREG_Write32(GetREG(), BCHP_AON_PM_L2_CPU_MASK_SET, 0xFFFFFFFF);
244        BREG_Write32(GetREG(), BCHP_AON_PM_L2_CPU_CLEAR, 0xFFFFFFF);
245
246#ifdef ACB612
247        /* just allow the power button to generate wake up interrupt, Agpio07 */
248        BREG_Write32(GetREG(), BCHP_GIO_AON_MASK_LO, 0x00000080);
249        BREG_Write32(GetREG(), BCHP_GIO_AON_MASK_EXT, 0x00000000);
250#endif
251
252        /* enable IR interrupt and GPIO for wakeup */
253        BREG_Write32(GetREG(), BCHP_AON_CTRL_PM_LED_AUTO_ON_ENABLES, 0x2);
254#ifdef ACB612
255        BREG_Write32(GetREG(), BCHP_AON_PM_L2_CPU_MASK_CLEAR, BCHP_AON_PM_L2_CPU_MASK_CLEAR_IRR_INTR_MASK | BCHP_AON_PM_L2_CPU_MASK_STATUS_GPIO_MASK);
256#else
257        BREG_Write32(GetREG(), BCHP_AON_PM_L2_CPU_MASK_CLEAR, BCHP_AON_PM_L2_CPU_MASK_CLEAR_IRR_INTR_MASK);
258#endif
259        BREG_Write32(GetREG(), BCHP_AON_CTRL_PM_LED_CTRL, BCHP_AON_CTRL_PM_LED_CTRL_led_turn_on_MASK);
260        /* power down request */
261        BREG_Write32(GetREG(), BCHP_AON_CTRL_PM_CTRL, 0);
262
263        /* enable S3 standby */
264        val = BCHP_AON_CTRL_PM_CTRL_pm_deep_standby_MASK;
265        BREG_Write32(GetREG(), BCHP_AON_CTRL_PM_CTRL, val);
266       
267        /* load precharge value for fast pwrdn */
268        BREG_Write32(GetREG(), BCHP_AON_CTRL_PM_FAST_PWRDN_PRECHARGE, 0xB9E1DC );
269        /* enable fast power down, and issue pwrn down 0->1 transition */
270        val |= BCHP_AON_CTRL_PM_CTRL_pm_fast_power_down_MASK|BCHP_AON_CTRL_PM_CTRL_pm_start_pwrdn_MASK;
271        BREG_Write32(GetREG(), BCHP_AON_CTRL_PM_CTRL, val);
272}
273
274void bpwr_control(bapp_t *p_app, bool standby)
275{
276#if HAS_HDMI
277        bsettop_hdmi_standby(p_app->hdmi, standby);
278#endif
279        brfm_standby(p_app->p_rfm, standby);
280        bdisplay_standby(p_app->display, standby);
281        baudio_decode_standby(p_app->audio,standby);
282}
Note: See TracBrowser for help on using the repository browser.