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();