On 10/07/2016 08:46 AM, Benjamin Tissoires wrote: > On Oct 06 2016 or thereabouts, Jason Gerecke wrote: >> In the following "Add support for sensor offsets" patch we'll need access >> to the 'features' struct within 'wacom_map_usage', so update the function >> signature and calls to include a reference to the HID device so this can >> be done. >> >> Signed-off-by: Jason Gerecke <jason.gerecke@xxxxxxxxx> >> --- >> drivers/hid/wacom_wac.c | 53 ++++++++++++++++++++++++++----------------------- >> 1 file changed, 28 insertions(+), 25 deletions(-) >> >> diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c >> index f2aadc4..8f493cc 100644 >> --- a/drivers/hid/wacom_wac.c >> +++ b/drivers/hid/wacom_wac.c >> @@ -1465,9 +1465,12 @@ static int wacom_equivalent_usage(int usage) >> return usage; >> } >> >> -static void wacom_map_usage(struct input_dev *input, struct hid_usage *usage, >> - struct hid_field *field, __u8 type, __u16 code, int fuzz) >> +static void wacom_map_usage(struct input_dev *input, struct hid_device *hdev, >> + struct hid_usage *usage, struct hid_field *field, __u8 type, >> + __u16 code, int fuzz) >> { >> + struct wacom *wacom = hid_get_drvdata(hdev); > > This might not be entirely relevant, but given the inputs are created > through wacom_allocate_input() and struct wacom * being stored in the > driver data, a simple call to input_get_drvdata(input) would provide the > struct wacom. Then from here, the hid_device can be retrieved from > struct wacom directly. > > So I don't know if it's worth resending the series just for this and if > this has caveats... (my rev-by still applies). > > Cheers, > Benjamin > I'd be happy with dropping this patch and using input_get_drvdata instead. I hadn't remotely considered that we could access the wacom structure from there as well. As noisy as it might be, I'll send a V2 with your rev-by and the change. Jason --- Now instead of four in the eights place / you’ve got three, ‘Cause you added one / (That is to say, eight) to the two, / But you can’t take seven from three, / So you look at the sixty-fours.... >> + struct wacom_wac *wacom_wac = &wacom->wacom_wac; >> int fmin = field->logical_minimum; >> int fmax = field->logical_maximum; >> unsigned int equivalent_usage = wacom_equivalent_usage(usage->hid); >> @@ -1508,53 +1511,53 @@ static void wacom_wac_pen_usage_mapping(struct hid_device *hdev, >> >> switch (equivalent_usage) { >> case HID_GD_X: >> - wacom_map_usage(input, usage, field, EV_ABS, ABS_X, 4); >> + wacom_map_usage(input, hdev, usage, field, EV_ABS, ABS_X, 4); >> break; >> case HID_GD_Y: >> - wacom_map_usage(input, usage, field, EV_ABS, ABS_Y, 4); >> + wacom_map_usage(input, hdev, usage, field, EV_ABS, ABS_Y, 4); >> break; >> case WACOM_HID_WD_DISTANCE: >> case HID_GD_Z: >> - wacom_map_usage(input, usage, field, EV_ABS, ABS_DISTANCE, 0); >> + wacom_map_usage(input, hdev, usage, field, EV_ABS, ABS_DISTANCE, 0); >> break; >> case HID_DG_TIPPRESSURE: >> - wacom_map_usage(input, usage, field, EV_ABS, ABS_PRESSURE, 0); >> + wacom_map_usage(input, hdev, usage, field, EV_ABS, ABS_PRESSURE, 0); >> break; >> case HID_DG_INRANGE: >> - wacom_map_usage(input, usage, field, EV_KEY, BTN_TOOL_PEN, 0); >> + wacom_map_usage(input, hdev, usage, field, EV_KEY, BTN_TOOL_PEN, 0); >> break; >> case HID_DG_INVERT: >> - wacom_map_usage(input, usage, field, EV_KEY, >> + wacom_map_usage(input, hdev, usage, field, EV_KEY, >> BTN_TOOL_RUBBER, 0); >> break; >> case HID_DG_TILT_X: >> - wacom_map_usage(input, usage, field, EV_ABS, ABS_TILT_X, 0); >> + wacom_map_usage(input, hdev, usage, field, EV_ABS, ABS_TILT_X, 0); >> break; >> case HID_DG_TILT_Y: >> - wacom_map_usage(input, usage, field, EV_ABS, ABS_TILT_Y, 0); >> + wacom_map_usage(input, hdev, usage, field, EV_ABS, ABS_TILT_Y, 0); >> break; >> case HID_DG_TWIST: >> - wacom_map_usage(input, usage, field, EV_ABS, ABS_Z, 0); >> + wacom_map_usage(input, hdev, usage, field, EV_ABS, ABS_Z, 0); >> break; >> case HID_DG_ERASER: >> case HID_DG_TIPSWITCH: >> - wacom_map_usage(input, usage, field, EV_KEY, BTN_TOUCH, 0); >> + wacom_map_usage(input, hdev, usage, field, EV_KEY, BTN_TOUCH, 0); >> break; >> case HID_DG_BARRELSWITCH: >> - wacom_map_usage(input, usage, field, EV_KEY, BTN_STYLUS, 0); >> + wacom_map_usage(input, hdev, usage, field, EV_KEY, BTN_STYLUS, 0); >> break; >> case HID_DG_BARRELSWITCH2: >> - wacom_map_usage(input, usage, field, EV_KEY, BTN_STYLUS2, 0); >> + wacom_map_usage(input, hdev, usage, field, EV_KEY, BTN_STYLUS2, 0); >> break; >> case HID_DG_TOOLSERIALNUMBER: >> - wacom_map_usage(input, usage, field, EV_MSC, MSC_SERIAL, 0); >> + wacom_map_usage(input, hdev, usage, field, EV_MSC, MSC_SERIAL, 0); >> break; >> case WACOM_HID_WD_SENSE: >> features->quirks |= WACOM_QUIRK_SENSE; >> - wacom_map_usage(input, usage, field, EV_KEY, BTN_TOOL_PEN, 0); >> + wacom_map_usage(input, hdev, usage, field, EV_KEY, BTN_TOOL_PEN, 0); >> break; >> case WACOM_HID_WD_SERIALHI: >> - wacom_map_usage(input, usage, field, EV_ABS, ABS_MISC, 0); >> + wacom_map_usage(input, hdev, usage, field, EV_ABS, ABS_MISC, 0); >> set_bit(EV_KEY, input->evbit); >> input_set_capability(input, EV_KEY, BTN_TOOL_PEN); >> input_set_capability(input, EV_KEY, BTN_TOOL_RUBBER); >> @@ -1565,7 +1568,7 @@ static void wacom_wac_pen_usage_mapping(struct hid_device *hdev, >> input_set_capability(input, EV_KEY, BTN_TOOL_LENS); >> break; >> case WACOM_HID_WD_FINGERWHEEL: >> - wacom_map_usage(input, usage, field, EV_ABS, ABS_WHEEL, 0); >> + wacom_map_usage(input, hdev, usage, field, EV_ABS, ABS_WHEEL, 0); >> break; >> } >> } >> @@ -1722,24 +1725,24 @@ static void wacom_wac_finger_usage_mapping(struct hid_device *hdev, >> case HID_GD_X: >> features->last_slot_field = usage->hid; >> if (touch_max == 1) >> - wacom_map_usage(input, usage, field, EV_ABS, ABS_X, 4); >> + wacom_map_usage(input, hdev, usage, field, EV_ABS, ABS_X, 4); >> else >> - wacom_map_usage(input, usage, field, EV_ABS, >> + wacom_map_usage(input, hdev, usage, field, EV_ABS, >> ABS_MT_POSITION_X, 4); >> break; >> case HID_GD_Y: >> features->last_slot_field = usage->hid; >> if (touch_max == 1) >> - wacom_map_usage(input, usage, field, EV_ABS, ABS_Y, 4); >> + wacom_map_usage(input, hdev, usage, field, EV_ABS, ABS_Y, 4); >> else >> - wacom_map_usage(input, usage, field, EV_ABS, >> + wacom_map_usage(input, hdev, usage, field, EV_ABS, >> ABS_MT_POSITION_Y, 4); >> break; >> case HID_DG_WIDTH: >> case HID_DG_HEIGHT: >> features->last_slot_field = usage->hid; >> - wacom_map_usage(input, usage, field, EV_ABS, ABS_MT_TOUCH_MAJOR, 0); >> - wacom_map_usage(input, usage, field, EV_ABS, ABS_MT_TOUCH_MINOR, 0); >> + wacom_map_usage(input, hdev, usage, field, EV_ABS, ABS_MT_TOUCH_MAJOR, 0); >> + wacom_map_usage(input, hdev, usage, field, EV_ABS, ABS_MT_TOUCH_MINOR, 0); >> input_set_abs_params(input, ABS_MT_ORIENTATION, 0, 1, 0, 0); >> break; >> case HID_DG_CONTACTID: >> @@ -1753,7 +1756,7 @@ static void wacom_wac_finger_usage_mapping(struct hid_device *hdev, >> break; >> case HID_DG_TIPSWITCH: >> features->last_slot_field = usage->hid; >> - wacom_map_usage(input, usage, field, EV_KEY, BTN_TOUCH, 0); >> + wacom_map_usage(input, hdev, usage, field, EV_KEY, BTN_TOUCH, 0); >> break; >> case HID_DG_CONTACTCOUNT: >> wacom_wac->hid_data.cc_report = field->report->id; >> -- >> 2.10.0 >> -- 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