|
|
|
|
@@ -369,7 +369,9 @@ static void pidff_set_effect_report(struct pidff_device *pidff,
|
|
|
|
|
pidff->effect_direction->value[0] =
|
|
|
|
|
pidff_rescale(direction, 0xffff, pidff->effect_direction);
|
|
|
|
|
|
|
|
|
|
pidff->set_effect[PID_START_DELAY].value[0] = effect->replay.delay;
|
|
|
|
|
if (!(pidff->quirks & PIDFF_QUIRK_NO_DELAY_EFFECT)) {
|
|
|
|
|
pidff->set_effect[PID_START_DELAY].value[0] = effect->replay.delay;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
hid_hw_request(pidff->hid, pidff->reports[PID_SET_EFFECT],
|
|
|
|
|
HID_REQ_SET_REPORT);
|
|
|
|
|
@@ -814,7 +816,9 @@ static void pidff_autocenter(struct pidff_device *pidff, u16 magnitude)
|
|
|
|
|
pidff->set_effect[PID_TRIGGER_REPEAT_INT].value[0] = 0;
|
|
|
|
|
pidff_set(&pidff->set_effect[PID_GAIN], magnitude);
|
|
|
|
|
pidff->set_effect[PID_DIRECTION_ENABLE].value[0] = 1;
|
|
|
|
|
pidff->set_effect[PID_START_DELAY].value[0] = 0;
|
|
|
|
|
if (!(pidff->quirks & PIDFF_QUIRK_NO_DELAY_EFFECT)) {
|
|
|
|
|
pidff->set_effect[PID_START_DELAY].value[0] = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
hid_hw_request(pidff->hid, pidff->reports[PID_SET_EFFECT],
|
|
|
|
|
HID_REQ_SET_REPORT);
|
|
|
|
|
@@ -1316,9 +1320,9 @@ static int pidff_check_autocenter(struct pidff_device *pidff,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Check if the device is PID and initialize it
|
|
|
|
|
* Check if the device is PID and initialize it, with quirks
|
|
|
|
|
*/
|
|
|
|
|
int hid_pidff_init(struct hid_device *hid)
|
|
|
|
|
int hid_pidff_init_quirks(struct hid_device *hid, const struct hid_device_id *id)
|
|
|
|
|
{
|
|
|
|
|
struct pidff_device *pidff;
|
|
|
|
|
struct hid_input *hidinput = list_entry(hid->inputs.next,
|
|
|
|
|
@@ -1340,6 +1344,8 @@ int hid_pidff_init(struct hid_device *hid)
|
|
|
|
|
return -ENOMEM;
|
|
|
|
|
|
|
|
|
|
pidff->hid = hid;
|
|
|
|
|
pidff->quirks |= id->driver_data;
|
|
|
|
|
hid_dbg(dev, "Device quirks: %d\n", pidff->quirks);
|
|
|
|
|
|
|
|
|
|
hid_device_io_start(hid);
|
|
|
|
|
|
|
|
|
|
@@ -1417,29 +1423,3 @@ int hid_pidff_init(struct hid_device *hid)
|
|
|
|
|
kfree(pidff);
|
|
|
|
|
return error;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Check if the device is PID and initialize it
|
|
|
|
|
* Add quirks after initialisation
|
|
|
|
|
*/
|
|
|
|
|
int hid_pidff_init_with_quirks(struct hid_device *hid, const struct hid_device_id *id)
|
|
|
|
|
{
|
|
|
|
|
int error = hid_pidff_init(hid);
|
|
|
|
|
|
|
|
|
|
if (error)
|
|
|
|
|
return error;
|
|
|
|
|
|
|
|
|
|
struct hid_input *hidinput = list_entry(hid->inputs.next,
|
|
|
|
|
struct hid_input, list);
|
|
|
|
|
struct input_dev *dev = hidinput->input;
|
|
|
|
|
struct pidff_device *pidff = dev->ff->private;
|
|
|
|
|
|
|
|
|
|
/* set quirks on the pidff device */
|
|
|
|
|
hid_device_io_start(hid);
|
|
|
|
|
pidff->quirks |= id->driver_data;
|
|
|
|
|
hid_device_io_stop(hid);
|
|
|
|
|
|
|
|
|
|
hid_dbg(dev, "Device quirks: %d\n", pidff->quirks);
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|