diff 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
line wrap: on
line diff
--- a/src/cs/drivers/drv_app/kpd/board/kpd_scan_functions.c	Mon Jan 22 05:45:26 2018 +0000
+++ b/src/cs/drivers/drv_app/kpd/board/kpd_scan_functions.c	Sun Jan 28 19:26:10 2018 +0000
@@ -86,38 +86,41 @@
    {KPD_PKEY_7,     KPD_PKEY_8,    KPD_PKEY_9,         KPD_PKEY_NULL},
    {KPD_PKEY_STAR,  KPD_PKEY_0,    KPD_PKEY_DIESE,     KPD_PKEY_NULL},
    };
-#elif ((BOARD == 40) || (BOARD == 41) || (BOARD == 42) || (BOARD == 43))
+#elif defined(CONFIG_TARGET_COMPAL)
+   #define KP_ROWS      5
+   #define KP_COLS      4
+   const T_KPD_PHYSICAL_KEY_ID keypad_layout[KP_ROWS][KP_COLS]=
+   {                           
+   /* Mot C1xx keypad */
+   {KPD_PKEY_GREEN, KPD_PKEY_3,          KPD_PKEY_2,         KPD_PKEY_1},
+   {KPD_PKEY_UP,    KPD_PKEY_6,          KPD_PKEY_5,         KPD_PKEY_4},
+   {KPD_PKEY_DOWN,  KPD_PKEY_9,          KPD_PKEY_8,         KPD_PKEY_7},
+   {KPD_PKEY_LEFT,  KPD_PKEY_DIESE,      KPD_PKEY_0,         KPD_PKEY_STAR},
+   {KPD_PKEY_RIGHT, KPD_PKEY_SOFT_RIGHT, KPD_PKEY_NAV_CENTER,KPD_PKEY_SOFT_LEFT},
+   };
+#elif defined(CONFIG_TARGET_PIRELLI)
    #define KP_ROWS      5
    #define KP_COLS      5
    const T_KPD_PHYSICAL_KEY_ID keypad_layout[KP_ROWS][KP_COLS]=
    {                           
-#ifdef CONFIG_TARGET_COMPAL
-   /* Mot C1xx keypad */
-   {KPD_PKEY_GREEN, KPD_PKEY_3,          KPD_PKEY_2,         KPD_PKEY_1,
-	KPD_PKEY_NULL},
-   {KPD_PKEY_UP,    KPD_PKEY_6,          KPD_PKEY_5,         KPD_PKEY_4,
-	KPD_PKEY_NULL},
-   {KPD_PKEY_DOWN,  KPD_PKEY_9,          KPD_PKEY_8,         KPD_PKEY_7,
-	KPD_PKEY_NULL},
-   {KPD_PKEY_LEFT,  KPD_PKEY_DIESE,      KPD_PKEY_0,         KPD_PKEY_STAR,
-	KPD_PKEY_NULL},
-   {KPD_PKEY_RIGHT, KPD_PKEY_SOFT_RIGHT, KPD_PKEY_NAV_CENTER,KPD_PKEY_SOFT_LEFT,
-	KPD_PKEY_NULL},
-#elif defined(CONFIG_TARGET_PIRELLI)
    /* Pirelli's keypad */
    {KPD_PKEY_NAV_CENTER, KPD_PKEY_LEFT,       KPD_PKEY_RIGHT, KPD_PKEY_UP,    KPD_PKEY_NULL},
    {KPD_PKEY_SOFT_LEFT,  KPD_PKEY_SOFT_RIGHT, KPD_PKEY_GREEN, KPD_PKEY_DOWN,  KPD_PKEY_VOL_UP},
    {KPD_PKEY_3,          KPD_PKEY_6,          KPD_PKEY_9,     KPD_PKEY_DIESE, KPD_PKEY_VOL_DOWN},
    {KPD_PKEY_2,          KPD_PKEY_5,          KPD_PKEY_8,     KPD_PKEY_0,     KPD_PKEY_REC},
    {KPD_PKEY_1,          KPD_PKEY_4,          KPD_PKEY_7,     KPD_PKEY_STAR,  KPD_PKEY_NULL},
-#else
+   };
+#elif ((BOARD == 40) || (BOARD == 41) || (BOARD == 42) || (BOARD == 43))
+   #define KP_ROWS      5
+   #define KP_COLS      5
+   const T_KPD_PHYSICAL_KEY_ID keypad_layout[KP_ROWS][KP_COLS]=
+   {                           
    /* Layout of D-Sample and E-Sample */
    {KPD_PKEY_GREEN, KPD_PKEY_VOL_DOWN, KPD_PKEY_VOL_UP,KPD_PKEY_SOFT_LEFT,  KPD_PKEY_LEFT},
    {KPD_PKEY_1,     KPD_PKEY_2,        KPD_PKEY_3,     KPD_PKEY_REC,        KPD_PKEY_RIGHT},
    {KPD_PKEY_4,     KPD_PKEY_5,        KPD_PKEY_6,     KPD_PKEY_SOFT_RIGHT, KPD_PKEY_UP},
    {KPD_PKEY_7,     KPD_PKEY_8,        KPD_PKEY_9,     KPD_PKEY_NULL,       KPD_PKEY_DOWN},
    {KPD_PKEY_STAR,  KPD_PKEY_0,        KPD_PKEY_DIESE, KPD_PKEY_NULL,       KPD_PKEY_NAV_CENTER},
-#endif
    };
 #endif
 
@@ -361,6 +364,18 @@
    /* Deactivate all columns */
    *(volatile UINT16*) KP_COL_OUT = KP_ALL_OFF;
 
+#ifdef CONFIG_TARGET_COMPAL
+   /* Compal's power key handling */
+   delay();
+   rows = (*(volatile UINT16*) KP_ROW_IN) & 0x1F;
+   if (KP_IS_ACTIVE(rows,4))
+   {
+      /* Reactivate all columns */
+      *(volatile UINT16*) KP_COL_OUT = KP_ALL_ON;
+      return KPD_PKEY_RED;
+   }
+#endif
+
    /* Activate 1 column at a time */
    for (col = 0; col < KP_COLS; col++)
    {