On Tue, Nov 3, 2015 at 4:57 PM, Jason Gerecke <killertofu@xxxxxxxxx> wrote: > When connecting the Cintiq Companion 2 as an external tablet (i.e., using > it in "hybrid" mode) it has been seen to cause the kernel of the machine > it is connected to to Oops. The cause has been traced to us attempting to > switch the tablet's mode prior to actually starting HID device (resulting > in the eventual dereference of the uninitialized control URB). > > Commit 3b164a0 moved the mode switch from occuring post-start to occurring > pre-start. The change was not seen to cause issues largely due to the fact > that most devices mode switch with 'hid_hw_raw_request' (which is safe to > call prior to start) rather than 'hid_hw_request'. > > Moving the call back to its original location resolves the issue, but > causes some touch-only Bamboo tablets (e.g. 056a:00d0) to stop working. > The affected tablets require us to perform a mode switch on their > vestigial pen interface prior ignoring with -ENODEV, meaning that the > code which is responsible for doing the ignoring has to move as well. We'll need to clean up the code a bit more. But, that's for future. This patch is good to go. > Signed-off-by: Jason Gerecke <jason.gerecke@xxxxxxxxx> Reviewed-by: Ping Cheng <pingc@xxxxxxxxx> Ping > --- > Jiri, > > Ping clued me in to the fact that 'wacom_query_tablet_data' hasn't always > been in this problematic location. The offending commit mentioned in the > revised commit summary is queued for 4.4, so this only needs to get into > the next RC rather than be targeted for stable. > > Jason > > drivers/hid/wacom_sys.c | 36 ++++++++++++++++++------------------ > 1 file changed, 18 insertions(+), 18 deletions(-) > > diff --git a/drivers/hid/wacom_sys.c b/drivers/hid/wacom_sys.c > index abb7fdf..e06af5b 100644 > --- a/drivers/hid/wacom_sys.c > +++ b/drivers/hid/wacom_sys.c > @@ -1778,24 +1778,6 @@ static int wacom_probe(struct hid_device *hdev, > features->device_type |= WACOM_DEVICETYPE_PEN; > } > > - /* Note that if query fails it is not a hard failure */ > - wacom_query_tablet_data(hdev, features); > - > - /* touch only Bamboo doesn't support pen */ > - if ((features->type == BAMBOO_TOUCH) && > - (features->device_type & WACOM_DEVICETYPE_PEN)) { > - error = -ENODEV; > - goto fail_shared_data; > - } > - > - /* pen only Bamboo neither support touch nor pad */ > - if ((features->type == BAMBOO_PEN) && > - ((features->device_type & WACOM_DEVICETYPE_TOUCH) || > - (features->device_type & WACOM_DEVICETYPE_PAD))) { > - error = -ENODEV; > - goto fail_shared_data; > - } > - > wacom_calculate_res(features); > > wacom_update_name(wacom); > @@ -1833,6 +1815,24 @@ static int wacom_probe(struct hid_device *hdev, > goto fail_hw_start; > } > > + /* Note that if query fails it is not a hard failure */ > + wacom_query_tablet_data(hdev, features); > + > + /* touch only Bamboo doesn't support pen */ > + if ((features->type == BAMBOO_TOUCH) && > + (features->device_type & WACOM_DEVICETYPE_PEN)) { > + error = -ENODEV; > + goto fail_hw_start; > + } > + > + /* pen only Bamboo neither support touch nor pad */ > + if ((features->type == BAMBOO_PEN) && > + ((features->device_type & WACOM_DEVICETYPE_TOUCH) || > + (features->device_type & WACOM_DEVICETYPE_PAD))) { > + error = -ENODEV; > + goto fail_hw_start; > + } > + > if (features->device_type & WACOM_DEVICETYPE_WL_MONITOR) > error = hid_hw_open(hdev); > > -- > 2.6.2 > -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html