Hi,
Michael Trimarchi wrote:
Hi,
Andy Green wrote:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Somebody in the thread at some point said:
| Version based on the last andy-andytracking
That's current HEAD, great.
| Status:
| wifi: ok
| bluetooth ok
| SIM problem, remain locked. I don't have the source code so I can't do
| nothing.
| Maybe I can restart from the gsmmux daemon avalaible in source.
It sounds really encouraging for the kernel anyway, what's the situation
with suspend reliability?
Sometimes seems that the system doesn't takes event from the power
button. I must try
one or more or try with the usb cable. And It power on and if I don't
press power again,
the system suspend again. I think that depends on android. All the
operation is done using
the graphics interface. I don't have time now. Because I take an
airplane in 3 hours to return in italy.
- -Andy
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org
iEYEARECAAYFAklndR8ACgkQOjLpvpq7dMpANgCdGsz6zH6L8VUYg5K2Qvk4TYu8
nogAniIHnzwM74sUaX5TvySzxHmZ43sk
=07VI
-----END PGP SIGNATURE-----
Regards Michael
git diff with openmoko kernel :)
Michael
diff --git a/drivers/input/misc/pcf50633-input.c b/drivers/input/misc/pcf50633-input.c
index a3cc4d6..3ac50a4 100644
--- a/drivers/input/misc/pcf50633-input.c
+++ b/drivers/input/misc/pcf50633-input.c
@@ -28,10 +28,15 @@
#include <linux/mfd/pcf50633/core.h>
#include <linux/mfd/pcf50633/input.h>
+struct pcf50633_key_data {
+ int key;
+};
+
static void
pcf50633_input_irq(struct pcf50633 *pcf, int irq, void *data)
{
struct input_dev *input_dev = pcf->input.input_dev;
+ struct pcf50633_key_data *kd = data;
int onkey_released;
/* We report only one event depending on if the key status */
@@ -39,20 +44,32 @@ pcf50633_input_irq(struct pcf50633 *pcf, int irq, void *data)
PCF50633_OOCSTAT_ONKEY;
if (irq == PCF50633_IRQ_ONKEYF && !onkey_released)
- input_report_key(input_dev, KEY_POWER, 1);
- else if (irq == PCF50633_IRQ_ONKEYR && onkey_released)
- input_report_key(input_dev, KEY_POWER, 0);
-
- input_sync(input_dev);
+ kd->key = KEY_MENU;
+ else if (irq == PCF50633_IRQ_ONKEYR && onkey_released) {
+ if (kd->key == KEY_MENU) {
+ input_report_key(input_dev, kd->key, 1);
+ input_sync(input_dev);
+ }
+ input_report_key(input_dev, kd->key, 0);
+ input_sync(input_dev);
+ } else if (irq == PCF50633_IRQ_ONKEY1S && !onkey_released) {
+ kd->key = KEY_POWER;
+ input_report_key(input_dev, kd->key, 1);
+ input_sync(input_dev);
+ }
}
int __init pcf50633_input_probe(struct platform_device *pdev)
{
struct pcf50633 *pcf;
struct input_dev *input_dev;
+ struct pcf50633_key_data *kd;
int ret;
pcf = platform_get_drvdata(pdev);
+ kd = kzalloc(sizeof(*kd), GFP_KERNEL);
+ if (!kd)
+ return -ENOMEM;
input_dev = input_allocate_device();
if (!input_dev)
@@ -62,6 +79,7 @@ int __init pcf50633_input_probe(struct platform_device *pdev)
input_dev->id.bustype = BUS_I2C;
input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_PWR);
+ set_bit(KEY_MENU, input_dev->keybit);
set_bit(KEY_POWER, input_dev->keybit);
set_bit(KEY_POWER2, input_dev->keybit);
@@ -77,8 +95,13 @@ int __init pcf50633_input_probe(struct platform_device *pdev)
* two handlers for an IRQ
*/
pcf->irq_handler[PCF50633_IRQ_ONKEYR].handler = pcf50633_input_irq;
+ pcf->irq_handler[PCF50633_IRQ_ONKEYR].data = kd;
pcf->irq_handler[PCF50633_IRQ_ONKEYF].handler = pcf50633_input_irq;
+ pcf->irq_handler[PCF50633_IRQ_ONKEYF].data = kd;
+
+ pcf->irq_handler[PCF50633_IRQ_ONKEY1S].handler = pcf50633_input_irq;
+ pcf->irq_handler[PCF50633_IRQ_ONKEY1S].data = kd;
return 0;
@@ -90,8 +113,22 @@ out:
static int __devexit pcf50633_input_remove(struct platform_device *pdev)
{
struct pcf50633 *pcf;
+ struct pcf50633_key_data *kd;
pcf = platform_get_drvdata(pdev);
+
+ kd = pcf->irq_handler[PCF50633_IRQ_ONKEYR].data;
+
+ pcf->irq_handler[PCF50633_IRQ_ONKEYR].handler = NULL;
+ pcf->irq_handler[PCF50633_IRQ_ONKEYR].data = NULL;
+
+ pcf->irq_handler[PCF50633_IRQ_ONKEYF].handler = NULL;
+ pcf->irq_handler[PCF50633_IRQ_ONKEYF].data = NULL;
+
+ pcf->irq_handler[PCF50633_IRQ_ONKEY1S].handler = NULL;
+ pcf->irq_handler[PCF50633_IRQ_ONKEY1S].data = NULL;
+
+ kfree(kd);
input_unregister_device(pcf->input.input_dev);
return 0;