From: Jan Kiszka <jan.kiszka@web.de>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH] musicpal: Improve button handling
Date: Sat, 17 May 2008 14:14:46 +0200 [thread overview]
Message-ID: <482ECC36.9080501@web.de> (raw)
Looking at the hold-button-on-powerup thing, I came across some
improvable parts in the MusicPal's button handling. This patch allows
for repeated wheel events by keying the arrow keys pressed, corrects
some constant name, and introduces an explicitly maintained GPIO_ISR
state.
Signed-off-by: Jan Kiszka <jan.kiszka@web.de>
---
hw/musicpal.c | 27 +++++++++++++++++----------
1 file changed, 17 insertions(+), 10 deletions(-)
Index: b/hw/musicpal.c
===================================================================
--- a/hw/musicpal.c
+++ b/hw/musicpal.c
@@ -59,6 +59,7 @@
#define MP_AUDIO_IRQ 30
static uint32_t gpio_in_state = 0xffffffff;
+static uint32_t gpio_isr;
static uint32_t gpio_out_state;
static ram_addr_t sram_off;
@@ -1280,11 +1281,10 @@ static uint32_t musicpal_read(void *opaq
(i2c_get_data(mixer_i2c) << MP_GPIO_I2C_DATA_BIT);
return gpio_in_state >> 16;
- /* This is a simplification of reality */
case MP_GPIO_ISR_LO:
- return ~gpio_in_state & 0xFFFF;
+ return gpio_isr & 0xFFFF;
case MP_GPIO_ISR_HI:
- return ~gpio_in_state >> 16;
+ return gpio_isr >> 16;
/* Workaround to allow loading the binary-only wlandrv.ko crap
* from the original Freecom firmware. */
@@ -1324,7 +1324,7 @@ static void musicpal_write(void *opaque,
}
/* Keyboard codes & masks */
-#define KEY_PRESSED 0x80
+#define KEY_RELEASED 0x80
#define KEY_CODE 0x7f
#define KEYCODE_TAB 0x0f
@@ -1367,7 +1367,7 @@ static void musicpal_key_event(void *opa
event = MP_GPIO_WHEEL_VOL;
break;
}
- else
+ else {
switch (keycode & KEY_CODE) {
case KEYCODE_F:
event = MP_GPIO_BTN_FAVORITS;
@@ -1385,12 +1385,19 @@ static void musicpal_key_event(void *opa
event = MP_GPIO_BTN_MENU;
break;
}
+ /* Do not repeat already pressed buttons */
+ if (!(keycode & KEY_RELEASED) && !(gpio_in_state & event))
+ event = 0;
+ }
- if (keycode & KEY_PRESSED)
- gpio_in_state |= event;
- else if (gpio_in_state & event) {
- gpio_in_state &= ~event;
- qemu_irq_raise(irq);
+ if (event) {
+ if (keycode & KEY_RELEASED) {
+ gpio_in_state |= event;
+ } else {
+ gpio_in_state &= ~event;
+ gpio_isr = event;
+ qemu_irq_raise(irq);
+ }
}
kbd_extended = 0;
reply other threads:[~2008-05-17 12:14 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=482ECC36.9080501@web.de \
--to=jan.kiszka@web.de \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).