FreeCalypso > hg > fc-magnetite
comparison src/cs/drivers/drv_app/kpd/board/kpd_scan_functions.c @ 446:bed6d393f3e0
C1xx targets: sensible handling of Compal's power key wiring
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 28 Jan 2018 19:26:10 +0000 |
parents | 385841ccb7f8 |
children | 92dbfa906f66 |
comparison
equal
deleted
inserted
replaced
445:399f3a5a5450 | 446:bed6d393f3e0 |
---|---|
84 {KPD_PKEY_1, KPD_PKEY_2, KPD_PKEY_3, KPD_PKEY_SOFT_LEFT}, | 84 {KPD_PKEY_1, KPD_PKEY_2, KPD_PKEY_3, KPD_PKEY_SOFT_LEFT}, |
85 {KPD_PKEY_4, KPD_PKEY_5, KPD_PKEY_6, KPD_PKEY_NULL}, | 85 {KPD_PKEY_4, KPD_PKEY_5, KPD_PKEY_6, KPD_PKEY_NULL}, |
86 {KPD_PKEY_7, KPD_PKEY_8, KPD_PKEY_9, KPD_PKEY_NULL}, | 86 {KPD_PKEY_7, KPD_PKEY_8, KPD_PKEY_9, KPD_PKEY_NULL}, |
87 {KPD_PKEY_STAR, KPD_PKEY_0, KPD_PKEY_DIESE, KPD_PKEY_NULL}, | 87 {KPD_PKEY_STAR, KPD_PKEY_0, KPD_PKEY_DIESE, KPD_PKEY_NULL}, |
88 }; | 88 }; |
89 #elif ((BOARD == 40) || (BOARD == 41) || (BOARD == 42) || (BOARD == 43)) | 89 #elif defined(CONFIG_TARGET_COMPAL) |
90 #define KP_ROWS 5 | |
91 #define KP_COLS 4 | |
92 const T_KPD_PHYSICAL_KEY_ID keypad_layout[KP_ROWS][KP_COLS]= | |
93 { | |
94 /* Mot C1xx keypad */ | |
95 {KPD_PKEY_GREEN, KPD_PKEY_3, KPD_PKEY_2, KPD_PKEY_1}, | |
96 {KPD_PKEY_UP, KPD_PKEY_6, KPD_PKEY_5, KPD_PKEY_4}, | |
97 {KPD_PKEY_DOWN, KPD_PKEY_9, KPD_PKEY_8, KPD_PKEY_7}, | |
98 {KPD_PKEY_LEFT, KPD_PKEY_DIESE, KPD_PKEY_0, KPD_PKEY_STAR}, | |
99 {KPD_PKEY_RIGHT, KPD_PKEY_SOFT_RIGHT, KPD_PKEY_NAV_CENTER,KPD_PKEY_SOFT_LEFT}, | |
100 }; | |
101 #elif defined(CONFIG_TARGET_PIRELLI) | |
90 #define KP_ROWS 5 | 102 #define KP_ROWS 5 |
91 #define KP_COLS 5 | 103 #define KP_COLS 5 |
92 const T_KPD_PHYSICAL_KEY_ID keypad_layout[KP_ROWS][KP_COLS]= | 104 const T_KPD_PHYSICAL_KEY_ID keypad_layout[KP_ROWS][KP_COLS]= |
93 { | 105 { |
94 #ifdef CONFIG_TARGET_COMPAL | |
95 /* Mot C1xx keypad */ | |
96 {KPD_PKEY_GREEN, KPD_PKEY_3, KPD_PKEY_2, KPD_PKEY_1, | |
97 KPD_PKEY_NULL}, | |
98 {KPD_PKEY_UP, KPD_PKEY_6, KPD_PKEY_5, KPD_PKEY_4, | |
99 KPD_PKEY_NULL}, | |
100 {KPD_PKEY_DOWN, KPD_PKEY_9, KPD_PKEY_8, KPD_PKEY_7, | |
101 KPD_PKEY_NULL}, | |
102 {KPD_PKEY_LEFT, KPD_PKEY_DIESE, KPD_PKEY_0, KPD_PKEY_STAR, | |
103 KPD_PKEY_NULL}, | |
104 {KPD_PKEY_RIGHT, KPD_PKEY_SOFT_RIGHT, KPD_PKEY_NAV_CENTER,KPD_PKEY_SOFT_LEFT, | |
105 KPD_PKEY_NULL}, | |
106 #elif defined(CONFIG_TARGET_PIRELLI) | |
107 /* Pirelli's keypad */ | 106 /* Pirelli's keypad */ |
108 {KPD_PKEY_NAV_CENTER, KPD_PKEY_LEFT, KPD_PKEY_RIGHT, KPD_PKEY_UP, KPD_PKEY_NULL}, | 107 {KPD_PKEY_NAV_CENTER, KPD_PKEY_LEFT, KPD_PKEY_RIGHT, KPD_PKEY_UP, KPD_PKEY_NULL}, |
109 {KPD_PKEY_SOFT_LEFT, KPD_PKEY_SOFT_RIGHT, KPD_PKEY_GREEN, KPD_PKEY_DOWN, KPD_PKEY_VOL_UP}, | 108 {KPD_PKEY_SOFT_LEFT, KPD_PKEY_SOFT_RIGHT, KPD_PKEY_GREEN, KPD_PKEY_DOWN, KPD_PKEY_VOL_UP}, |
110 {KPD_PKEY_3, KPD_PKEY_6, KPD_PKEY_9, KPD_PKEY_DIESE, KPD_PKEY_VOL_DOWN}, | 109 {KPD_PKEY_3, KPD_PKEY_6, KPD_PKEY_9, KPD_PKEY_DIESE, KPD_PKEY_VOL_DOWN}, |
111 {KPD_PKEY_2, KPD_PKEY_5, KPD_PKEY_8, KPD_PKEY_0, KPD_PKEY_REC}, | 110 {KPD_PKEY_2, KPD_PKEY_5, KPD_PKEY_8, KPD_PKEY_0, KPD_PKEY_REC}, |
112 {KPD_PKEY_1, KPD_PKEY_4, KPD_PKEY_7, KPD_PKEY_STAR, KPD_PKEY_NULL}, | 111 {KPD_PKEY_1, KPD_PKEY_4, KPD_PKEY_7, KPD_PKEY_STAR, KPD_PKEY_NULL}, |
113 #else | 112 }; |
113 #elif ((BOARD == 40) || (BOARD == 41) || (BOARD == 42) || (BOARD == 43)) | |
114 #define KP_ROWS 5 | |
115 #define KP_COLS 5 | |
116 const T_KPD_PHYSICAL_KEY_ID keypad_layout[KP_ROWS][KP_COLS]= | |
117 { | |
114 /* Layout of D-Sample and E-Sample */ | 118 /* Layout of D-Sample and E-Sample */ |
115 {KPD_PKEY_GREEN, KPD_PKEY_VOL_DOWN, KPD_PKEY_VOL_UP,KPD_PKEY_SOFT_LEFT, KPD_PKEY_LEFT}, | 119 {KPD_PKEY_GREEN, KPD_PKEY_VOL_DOWN, KPD_PKEY_VOL_UP,KPD_PKEY_SOFT_LEFT, KPD_PKEY_LEFT}, |
116 {KPD_PKEY_1, KPD_PKEY_2, KPD_PKEY_3, KPD_PKEY_REC, KPD_PKEY_RIGHT}, | 120 {KPD_PKEY_1, KPD_PKEY_2, KPD_PKEY_3, KPD_PKEY_REC, KPD_PKEY_RIGHT}, |
117 {KPD_PKEY_4, KPD_PKEY_5, KPD_PKEY_6, KPD_PKEY_SOFT_RIGHT, KPD_PKEY_UP}, | 121 {KPD_PKEY_4, KPD_PKEY_5, KPD_PKEY_6, KPD_PKEY_SOFT_RIGHT, KPD_PKEY_UP}, |
118 {KPD_PKEY_7, KPD_PKEY_8, KPD_PKEY_9, KPD_PKEY_NULL, KPD_PKEY_DOWN}, | 122 {KPD_PKEY_7, KPD_PKEY_8, KPD_PKEY_9, KPD_PKEY_NULL, KPD_PKEY_DOWN}, |
119 {KPD_PKEY_STAR, KPD_PKEY_0, KPD_PKEY_DIESE, KPD_PKEY_NULL, KPD_PKEY_NAV_CENTER}, | 123 {KPD_PKEY_STAR, KPD_PKEY_0, KPD_PKEY_DIESE, KPD_PKEY_NULL, KPD_PKEY_NAV_CENTER}, |
120 #endif | |
121 }; | 124 }; |
122 #endif | 125 #endif |
123 | 126 |
124 #define KP_ACTIVATE(i) (~(1<<i)) | 127 #define KP_ACTIVATE(i) (~(1<<i)) |
125 #define KP_IS_ACTIVE(rows,i) ((rows & (1<<i)) == 0) | 128 #define KP_IS_ACTIVE(rows,i) ((rows & (1<<i)) == 0) |
359 return KPD_PKEY_NULL; | 362 return KPD_PKEY_NULL; |
360 | 363 |
361 /* Deactivate all columns */ | 364 /* Deactivate all columns */ |
362 *(volatile UINT16*) KP_COL_OUT = KP_ALL_OFF; | 365 *(volatile UINT16*) KP_COL_OUT = KP_ALL_OFF; |
363 | 366 |
367 #ifdef CONFIG_TARGET_COMPAL | |
368 /* Compal's power key handling */ | |
369 delay(); | |
370 rows = (*(volatile UINT16*) KP_ROW_IN) & 0x1F; | |
371 if (KP_IS_ACTIVE(rows,4)) | |
372 { | |
373 /* Reactivate all columns */ | |
374 *(volatile UINT16*) KP_COL_OUT = KP_ALL_ON; | |
375 return KPD_PKEY_RED; | |
376 } | |
377 #endif | |
378 | |
364 /* Activate 1 column at a time */ | 379 /* Activate 1 column at a time */ |
365 for (col = 0; col < KP_COLS; col++) | 380 for (col = 0; col < KP_COLS; col++) |
366 { | 381 { |
367 *(volatile UINT16*) KP_COL_OUT = (KP_ACTIVATE(col)); | 382 *(volatile UINT16*) KP_COL_OUT = (KP_ACTIVATE(col)); |
368 delay(); | 383 delay(); |