Change in ...osmocom-bb[master]: fw/keypad: Poll Iota powerbutton if required

steve-m gerrit-no-reply at lists.osmocom.org
Sun Aug 11 11:38:43 UTC 2019


steve-m has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmocom-bb/+/15150


Change subject: fw/keypad: Poll Iota powerbutton if required
......................................................................

fw/keypad: Poll Iota powerbutton if required

This commit adds polling of the TWL3025 PWON
signal. If the powerbutton is pressed on targets
that use it (Pirelli DP-L10, Huawei GTM900-B),
a normal keypad scanning cycle is started in order
to preserve the timing, required for the 500ms
power off press duration for example.

Change-Id: I904baf40d621bd680b602b88d12ff462b3c17596
---
M src/target/firmware/board/compal/keymap.h
M src/target/firmware/board/pirelli_dpl10/keymap.h
M src/target/firmware/calypso/keypad.c
M src/target/firmware/include/keypad.h
4 files changed, 27 insertions(+), 8 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/50/15150/1

diff --git a/src/target/firmware/board/compal/keymap.h b/src/target/firmware/board/compal/keymap.h
index ce8f9c2..fe0e303 100644
--- a/src/target/firmware/board/compal/keymap.h
+++ b/src/target/firmware/board/compal/keymap.h
@@ -23,5 +23,6 @@
 	[KEY_OK]	= 0,
 	[KEY_POWER]	= 24,
 	[KEY_MINUS]	= 30,	/* not existent */
-	[KEY_PLUS]	= 31,	/* not existent */
+	[KEY_PLUS]	= 30,	/* not existent */
+	[KEY_CAMERA]	= 30,	/* not existent */
 };
diff --git a/src/target/firmware/board/pirelli_dpl10/keymap.h b/src/target/firmware/board/pirelli_dpl10/keymap.h
index b85621b..b06f17d 100644
--- a/src/target/firmware/board/pirelli_dpl10/keymap.h
+++ b/src/target/firmware/board/pirelli_dpl10/keymap.h
@@ -21,8 +21,9 @@
 	[KEY_LEFT]	= 5,
 	[KEY_RIGHT]	= 10,
 	[KEY_OK]	= 11,
-/* power button is not connected, we use the camera button instead */
-	[KEY_POWER]	= 23,
+/* power button is not connected to keypad scan matrix but to TWL3025 */
+	[KEY_POWER]	= 31,
 	[KEY_MINUS]	= 22,
 	[KEY_PLUS]	= 21,
+	[KEY_CAMERA]	= 23,
 };
diff --git a/src/target/firmware/calypso/keypad.c b/src/target/firmware/calypso/keypad.c
index 937f8bd..c3c1810 100644
--- a/src/target/firmware/calypso/keypad.c
+++ b/src/target/firmware/calypso/keypad.c
@@ -1,7 +1,7 @@
 /* Driver for the keypad attached to the TI Calypso */
 
 /* (C) 2010 by roh <roh at hyte.de>
- * (C) 2013 by Steve Markgraf <steve at steve-m.de>
+ * (C) 2013-19 by Steve Markgraf <steve at steve-m.de>
  *
  * All Rights Reserved
  *
@@ -119,6 +119,15 @@
 	static uint16_t reg;
 	static uint16_t col;
 	static uint32_t buttons = 0, debounce1 = 0, debounce2 = 0;
+	uint8_t use_iota_pwrbtn = (btn_map[KEY_POWER] == 31);
+	uint32_t pwr_mask = (1 << btn_map[KEY_POWER]);
+
+	/* only read Iota powerbutton if it was not yet pressed */
+	if (use_iota_pwrbtn && !(buttons & pwr_mask) && twl3025_get_pwon()) {
+		buttons |= pwr_mask;
+		if (!polling)
+			polling = 1;
+	}
 
 	if (with_interrupts && !polling)
 		return;
@@ -154,7 +163,6 @@
 
 	col++;
 	if (col > 5) {
-		uint32_t pwr_mask = (1 << btn_map[KEY_POWER]);
 		col = 0;
 		/* if power button, ignore other states */
 		if (buttons & pwr_mask)
@@ -162,6 +170,16 @@
 		else if (lastbuttons & pwr_mask)
 			buttons = lastbuttons & ~pwr_mask;
 		dispatch_buttons(buttons);
+
+		/* check if powerbutton connected to Iota was released */
+		if (use_iota_pwrbtn && (buttons & pwr_mask) && !twl3025_get_pwon()) {
+			buttons &= ~pwr_mask;
+
+			/* dispatch buttons again so we do not loose
+			 * very short powerbutton presses */
+			dispatch_buttons(buttons);
+		}
+
 		if (buttons == 0) {
 			writew(0x0, KBC_REG);
 			polling = 3;
@@ -172,5 +190,4 @@
 		writew(0xff, KBC_REG);
 	else
 		writew(0x1f & ~(0x1 << col ), KBC_REG);
-
 }
diff --git a/src/target/firmware/include/keypad.h b/src/target/firmware/include/keypad.h
index 9e9acfe..2ad9889 100644
--- a/src/target/firmware/include/keypad.h
+++ b/src/target/firmware/include/keypad.h
@@ -25,11 +25,11 @@
 	KEY_POWER,	//red on-hook
 	KEY_MINUS,
 	KEY_PLUS,
+	KEY_CAMERA,
+	BUTTON_CNT,
 	KEY_INV = 0xFF
 };
 
-#define BUTTON_CNT	23
-
 enum key_states {
 	PRESSED,
 	RELEASED,

-- 
To view, visit https://gerrit.osmocom.org/c/osmocom-bb/+/15150
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmocom-bb
Gerrit-Branch: master
Gerrit-Change-Id: I904baf40d621bd680b602b88d12ff462b3c17596
Gerrit-Change-Number: 15150
Gerrit-PatchSet: 1
Gerrit-Owner: steve-m <steve at steve-m.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20190811/9cc873b0/attachment.html>


More information about the gerrit-log mailing list