* [PATCH] input: bcm5974: retract efi-broken suspend_resume
@ 2009-10-12 22:23 Henrik Rydberg
2009-10-12 22:23 ` [PATCH] input: bcm5974: report ABS_MT events Henrik Rydberg
0 siblings, 1 reply; 5+ messages in thread
From: Henrik Rydberg @ 2009-10-12 22:23 UTC (permalink / raw)
To: Dmitry Torokhov; +Cc: Andrew Morton, linux-input, linux-kernel, Henrik Rydberg
With the recent system-wide improvements on suspend/resume and EFI
booting the suspend_resume method of the bcm5974 has broken. When
waking up from the S3 state on the MacBookAir, the trackpad is found
in a yet unknown state, unable to switch to the proper multitouch
mode. The result is a frozen touchpad, and a flood of errors of the
kind
bcm5974: bad trackpad package, length: 8.
This patch retracts the reset_resume method altogether, falling back
on the generic unbind/rebind functionality of the usb layer until
further investigations can be made as how to reset the device when
booting from efi.
Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
---
drivers/input/mouse/bcm5974.c | 1 -
1 files changed, 0 insertions(+), 1 deletions(-)
diff --git a/drivers/input/mouse/bcm5974.c b/drivers/input/mouse/bcm5974.c
index 2d8fc0b..79e182a 100644
--- a/drivers/input/mouse/bcm5974.c
+++ b/drivers/input/mouse/bcm5974.c
@@ -760,7 +760,6 @@ static struct usb_driver bcm5974_driver = {
.disconnect = bcm5974_disconnect,
.suspend = bcm5974_suspend,
.resume = bcm5974_resume,
- .reset_resume = bcm5974_resume,
.id_table = bcm5974_table,
.supports_autosuspend = 1,
};
--
1.6.3.3
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH] input: bcm5974: report ABS_MT events
2009-10-12 22:23 [PATCH] input: bcm5974: retract efi-broken suspend_resume Henrik Rydberg
@ 2009-10-12 22:23 ` Henrik Rydberg
2009-10-12 22:45 ` Andrew Morton
0 siblings, 1 reply; 5+ messages in thread
From: Henrik Rydberg @ 2009-10-12 22:23 UTC (permalink / raw)
To: Dmitry Torokhov; +Cc: Andrew Morton, linux-input, linux-kernel, Henrik Rydberg
This patch makes bcm5974 report raw multi-touch (MT) data in the form
of ABS_MT events. The module parameter (nomt) may be used to turn off
the effect of this patch.
Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
---
drivers/input/mouse/bcm5974.c | 53 ++++++++++++++++++++++++++++++++++++++++-
1 files changed, 52 insertions(+), 1 deletions(-)
diff --git a/drivers/input/mouse/bcm5974.c b/drivers/input/mouse/bcm5974.c
index a700422..9c360ac 100644
--- a/drivers/input/mouse/bcm5974.c
+++ b/drivers/input/mouse/bcm5974.c
@@ -96,6 +96,10 @@ static int debug = 1;
module_param(debug, int, 0644);
MODULE_PARM_DESC(debug, "Activate debugging output");
+static int nomt;
+module_param(nomt, int, 0644);
+MODULE_PARM_DESC(nomt, "Disable multitouch (MT) events");
+
/* button data structure */
struct bt_data {
u8 unknown1; /* constant */
@@ -139,6 +143,7 @@ struct tp_finger {
/* trackpad finger data size, empirically at least ten fingers */
#define SIZEOF_FINGER sizeof(struct tp_finger)
#define SIZEOF_ALL_FINGERS (16 * SIZEOF_FINGER)
+#define MAX_FINGER_ORIENTATION 16384
/* device-specific parameters */
struct bcm5974_param {
@@ -284,6 +289,28 @@ static void setup_events_to_report(struct input_dev *input_dev,
input_set_abs_params(input_dev, ABS_Y,
0, cfg->y.dim, cfg->y.fuzz, 0);
+ if (!nomt) {
+ /* finger touch area */
+ input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR,
+ cfg->w.devmin, cfg->w.devmax, 0, 0);
+ input_set_abs_params(input_dev, ABS_MT_TOUCH_MINOR,
+ cfg->w.devmin, cfg->w.devmax, 0, 0);
+ /* finger approach area */
+ input_set_abs_params(input_dev, ABS_MT_WIDTH_MAJOR,
+ cfg->w.devmin, cfg->w.devmax, 0, 0);
+ input_set_abs_params(input_dev, ABS_MT_WIDTH_MINOR,
+ cfg->w.devmin, cfg->w.devmax, 0, 0);
+ /* finger orientation */
+ input_set_abs_params(input_dev, ABS_MT_ORIENTATION,
+ -MAX_FINGER_ORIENTATION,
+ MAX_FINGER_ORIENTATION, 0, 0);
+ /* finger position */
+ input_set_abs_params(input_dev, ABS_MT_POSITION_X,
+ cfg->x.devmin, cfg->x.devmax, 0, 0);
+ input_set_abs_params(input_dev, ABS_MT_POSITION_Y,
+ cfg->y.devmin, cfg->y.devmax, 0, 0);
+ }
+
__set_bit(EV_KEY, input_dev->evbit);
__set_bit(BTN_TOUCH, input_dev->keybit);
__set_bit(BTN_TOOL_FINGER, input_dev->keybit);
@@ -316,7 +343,7 @@ static int report_tp_state(struct bcm5974 *dev, int size)
const struct bcm5974_config *c = &dev->cfg;
const struct tp_finger *f;
struct input_dev *input = dev->input;
- int raw_p, raw_w, raw_x, raw_y, raw_n;
+ int raw_p, raw_w, raw_x, raw_y, raw_n, i;
int ptest, origin, ibt = 0, nmin = 0, nmax = 0;
int abs_p = 0, abs_w = 0, abs_x = 0, abs_y = 0;
@@ -329,6 +356,30 @@ static int report_tp_state(struct bcm5974 *dev, int size)
/* always track the first finger; when detached, start over */
if (raw_n) {
+
+ /* report raw trackpad data */
+ if (!nomt) {
+ for (i = 0; i < raw_n; i++) {
+ int y = c->y.devmin + c->y.devmax;
+ input_report_abs(input, ABS_MT_TOUCH_MAJOR,
+ raw2int(f[i].force_major));
+ input_report_abs(input, ABS_MT_TOUCH_MINOR,
+ raw2int(f[i].force_minor));
+ input_report_abs(input, ABS_MT_WIDTH_MAJOR,
+ raw2int(f[i].size_major));
+ input_report_abs(input, ABS_MT_WIDTH_MINOR,
+ raw2int(f[i].size_minor));
+ input_report_abs(input, ABS_MT_ORIENTATION,
+ MAX_FINGER_ORIENTATION -
+ raw2int(f[i].orientation));
+ input_report_abs(input, ABS_MT_POSITION_X,
+ raw2int(f[i].abs_x));
+ input_report_abs(input, ABS_MT_POSITION_Y,
+ y - raw2int(f[i].abs_y));
+ input_mt_sync(input);
+ }
+ }
+
raw_p = raw2int(f->force_major);
raw_w = raw2int(f->size_major);
raw_x = raw2int(f->abs_x);
--
1.6.3.3
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] input: bcm5974: report ABS_MT events
2009-10-12 22:23 ` [PATCH] input: bcm5974: report ABS_MT events Henrik Rydberg
@ 2009-10-12 22:45 ` Andrew Morton
2009-10-12 23:08 ` Henrik Rydberg
0 siblings, 1 reply; 5+ messages in thread
From: Andrew Morton @ 2009-10-12 22:45 UTC (permalink / raw)
To: Henrik Rydberg; +Cc: Dmitry Torokhov, linux-input, linux-kernel
On Tue, 13 Oct 2009 00:23:43 +0200
"Henrik Rydberg" <rydberg@euromail.se> wrote:
> This patch makes bcm5974 report raw multi-touch (MT) data in the form
> of ABS_MT events. The module parameter (nomt) may be used to turn off
> the effect of this patch.
>
Why do we need a module parameter to disable the newly-added feature?
IMO, your first patch ("input: bcm5974: retract efi-broken
suspend_resume") is 2.6.32 material whereas this one is 2.6.33
material?
This assumes that the two patches can be safely separated in this
manner, which does appear to be the case.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] input: bcm5974: report ABS_MT events
2009-10-12 22:45 ` Andrew Morton
@ 2009-10-12 23:08 ` Henrik Rydberg
2009-10-13 6:12 ` Dmitry Torokhov
0 siblings, 1 reply; 5+ messages in thread
From: Henrik Rydberg @ 2009-10-12 23:08 UTC (permalink / raw)
To: Andrew Morton; +Cc: Dmitry Torokhov, linux-input, linux-kernel
Andrew Morton wrote:
> On Tue, 13 Oct 2009 00:23:43 +0200
> "Henrik Rydberg" <rydberg@euromail.se> wrote:
>
>> This patch makes bcm5974 report raw multi-touch (MT) data in the form
>> of ABS_MT events. The module parameter (nomt) may be used to turn off
>> the effect of this patch.
>>
>
> Why do we need a module parameter to disable the newly-added feature?
All MT events bypass the input filtering and gets sent directly to the X driver.
Although it works as intended, without visible side effects, the stream of
events is rather large, and since the bypassing is completely new behavior, I
felt compelled to provide an option to turn it all off. Perhaps it is just me
being paranoid.
>
> IMO, your first patch ("input: bcm5974: retract efi-broken
> suspend_resume") is 2.6.32 material whereas this one is 2.6.33
> material?
>
> This assumes that the two patches can be safely separated in this
> manner, which does appear to be the case.
>
I was imagining both for 2.6.33; the efi booting is just beginning to work, and
since no distro is using it fully so far the problem currently only hits the
adventure-seekers anyways.
Cheers,
Henrik
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] input: bcm5974: report ABS_MT events
2009-10-12 23:08 ` Henrik Rydberg
@ 2009-10-13 6:12 ` Dmitry Torokhov
0 siblings, 0 replies; 5+ messages in thread
From: Dmitry Torokhov @ 2009-10-13 6:12 UTC (permalink / raw)
To: Henrik Rydberg; +Cc: Andrew Morton, linux-input, linux-kernel
On Tue, Oct 13, 2009 at 01:08:18AM +0200, Henrik Rydberg wrote:
> Andrew Morton wrote:
> > On Tue, 13 Oct 2009 00:23:43 +0200
> > "Henrik Rydberg" <rydberg@euromail.se> wrote:
> >
> >> This patch makes bcm5974 report raw multi-touch (MT) data in the form
> >> of ABS_MT events. The module parameter (nomt) may be used to turn off
> >> the effect of this patch.
> >>
> >
> > Why do we need a module parameter to disable the newly-added feature?
>
> All MT events bypass the input filtering and gets sent directly to the X driver.
> Although it works as intended, without visible side effects, the stream of
> events is rather large, and since the bypassing is completely new behavior, I
> felt compelled to provide an option to turn it all off. Perhaps it is just me
> being paranoid.
>
What is the expected rate of the events when user touches the pad with
2-3 fingers? Could you giove me estimate?
> >
> > IMO, your first patch ("input: bcm5974: retract efi-broken
> > suspend_resume") is 2.6.32 material whereas this one is 2.6.33
> > material?
> >
> > This assumes that the two patches can be safely separated in this
> > manner, which does appear to be the case.
> >
>
> I was imagining both for 2.6.33; the efi booting is just beginning to work, and
> since no distro is using it fully so far the problem currently only hits the
> adventure-seekers anyways.
I'd wait then - it works fine in non-efi mode and maybe by the time EFI
is ready reset_resume will start working as well.
--
Dmitry
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2009-10-13 6:13 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-10-12 22:23 [PATCH] input: bcm5974: retract efi-broken suspend_resume Henrik Rydberg
2009-10-12 22:23 ` [PATCH] input: bcm5974: report ABS_MT events Henrik Rydberg
2009-10-12 22:45 ` Andrew Morton
2009-10-12 23:08 ` Henrik Rydberg
2009-10-13 6:12 ` Dmitry Torokhov
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.