Compare commits
5 Commits
aur-link-f
...
fix-alignm
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bc87313267 | ||
|
|
8f42ca6774 | ||
|
|
2ee89cb9a4 | ||
|
|
241a25cee9 | ||
|
|
8220bbbfb0 |
@@ -2,7 +2,7 @@
|
|||||||
#ifndef __HID_IDS_H
|
#ifndef __HID_IDS_H
|
||||||
#define __HID_IDS_H
|
#define __HID_IDS_H
|
||||||
|
|
||||||
#define USB_VENDOR_ID_MOZA 0x346e
|
#define USB_VENDOR_ID_MOZA 0x346e
|
||||||
#define USB_DEVICE_ID_MOZA_R3 0x0005
|
#define USB_DEVICE_ID_MOZA_R3 0x0005
|
||||||
#define USB_DEVICE_ID_MOZA_R5 0x0004
|
#define USB_DEVICE_ID_MOZA_R5 0x0004
|
||||||
#define USB_DEVICE_ID_MOZA_R9 0x0002
|
#define USB_DEVICE_ID_MOZA_R9 0x0002
|
||||||
|
|||||||
@@ -14,15 +14,15 @@
|
|||||||
|
|
||||||
static const struct hid_device_id pidff_wheel_devices[] = {
|
static const struct hid_device_id pidff_wheel_devices[] = {
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_MOZA, USB_DEVICE_ID_MOZA_R3),
|
{ HID_USB_DEVICE(USB_VENDOR_ID_MOZA, USB_DEVICE_ID_MOZA_R3),
|
||||||
.driver_data = PIDFF_QUIRK_FIX_WHEEL_DIRECTION | PIDFF_QUIRK_FIX_PERIODIC_ENVELOPE },
|
.driver_data = PIDFF_QUIRK_FIX_WHEEL_DIRECTION },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_MOZA, USB_DEVICE_ID_MOZA_R5),
|
{ HID_USB_DEVICE(USB_VENDOR_ID_MOZA, USB_DEVICE_ID_MOZA_R5),
|
||||||
.driver_data = PIDFF_QUIRK_FIX_WHEEL_DIRECTION | PIDFF_QUIRK_FIX_PERIODIC_ENVELOPE },
|
.driver_data = PIDFF_QUIRK_FIX_WHEEL_DIRECTION },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_MOZA, USB_DEVICE_ID_MOZA_R9),
|
{ HID_USB_DEVICE(USB_VENDOR_ID_MOZA, USB_DEVICE_ID_MOZA_R9),
|
||||||
.driver_data = PIDFF_QUIRK_FIX_WHEEL_DIRECTION | PIDFF_QUIRK_FIX_PERIODIC_ENVELOPE },
|
.driver_data = PIDFF_QUIRK_FIX_WHEEL_DIRECTION },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_MOZA, USB_DEVICE_ID_MOZA_R12),
|
{ HID_USB_DEVICE(USB_VENDOR_ID_MOZA, USB_DEVICE_ID_MOZA_R12),
|
||||||
.driver_data = PIDFF_QUIRK_FIX_WHEEL_DIRECTION | PIDFF_QUIRK_FIX_PERIODIC_ENVELOPE },
|
.driver_data = PIDFF_QUIRK_FIX_WHEEL_DIRECTION },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_MOZA, USB_DEVICE_ID_MOZA_R16_R21),
|
{ HID_USB_DEVICE(USB_VENDOR_ID_MOZA, USB_DEVICE_ID_MOZA_R16_R21),
|
||||||
.driver_data = PIDFF_QUIRK_FIX_WHEEL_DIRECTION | PIDFF_QUIRK_FIX_PERIODIC_ENVELOPE },
|
.driver_data = PIDFF_QUIRK_FIX_WHEEL_DIRECTION },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_CAMMUS, USB_DEVICE_ID_CAMMUS_C5),
|
{ HID_USB_DEVICE(USB_VENDOR_ID_CAMMUS, USB_DEVICE_ID_CAMMUS_C5),
|
||||||
.driver_data = PIDFF_QUIRK_NO_DELAY_EFFECT },
|
.driver_data = PIDFF_QUIRK_NO_DELAY_EFFECT },
|
||||||
{ }
|
{ }
|
||||||
|
|||||||
38
hid-pidff.c
38
hid-pidff.c
@@ -311,6 +311,14 @@ static void pidff_set_envelope_report(struct pidff_device *pidff,
|
|||||||
static int pidff_needs_set_envelope(struct ff_envelope *envelope,
|
static int pidff_needs_set_envelope(struct ff_envelope *envelope,
|
||||||
struct ff_envelope *old)
|
struct ff_envelope *old)
|
||||||
{
|
{
|
||||||
|
if (!old) {
|
||||||
|
return envelope->attack_level != 0 ||
|
||||||
|
envelope->fade_level != 0 ||
|
||||||
|
envelope->attack_length != 0 ||
|
||||||
|
envelope->fade_length != 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
return envelope->attack_level != old->attack_level ||
|
return envelope->attack_level != old->attack_level ||
|
||||||
envelope->fade_level != old->fade_level ||
|
envelope->fade_level != old->fade_level ||
|
||||||
envelope->attack_length != old->attack_length ||
|
envelope->attack_length != old->attack_length ||
|
||||||
@@ -406,8 +414,8 @@ static void pidff_set_periodic_report(struct pidff_device *pidff,
|
|||||||
// Actually we just can use clamp macro
|
// Actually we just can use clamp macro
|
||||||
// from include/linux/kernel.h#L59
|
// from include/linux/kernel.h#L59
|
||||||
// But for the debug purposes we're leaving it as is
|
// But for the debug purposes we're leaving it as is
|
||||||
pidff->set_periodic[PID_PERIOD].value[0] =
|
pidff->set_periodic[PID_PERIOD].value[0] =
|
||||||
pidff_clamp(effect->u.periodic.period,
|
pidff_clamp(effect->u.periodic.period,
|
||||||
pidff->set_periodic[PID_PERIOD].field);
|
pidff->set_periodic[PID_PERIOD].field);
|
||||||
|
|
||||||
hid_hw_request(pidff->hid, pidff->reports[PID_SET_PERIODIC],
|
hid_hw_request(pidff->hid, pidff->reports[PID_SET_PERIODIC],
|
||||||
@@ -643,9 +651,8 @@ static int pidff_upload_effect(struct input_dev *dev, struct ff_effect *effect,
|
|||||||
pidff_set_effect_report(pidff, effect);
|
pidff_set_effect_report(pidff, effect);
|
||||||
if (!old || pidff_needs_set_constant(effect, old))
|
if (!old || pidff_needs_set_constant(effect, old))
|
||||||
pidff_set_constant_force_report(pidff, effect);
|
pidff_set_constant_force_report(pidff, effect);
|
||||||
if (!old ||
|
if (pidff_needs_set_envelope(&effect->u.constant.envelope,
|
||||||
pidff_needs_set_envelope(&effect->u.constant.envelope,
|
old ? &old->u.periodic.envelope : NULL))
|
||||||
&old->u.constant.envelope))
|
|
||||||
pidff_set_envelope_report(pidff,
|
pidff_set_envelope_report(pidff,
|
||||||
&effect->u.constant.envelope);
|
&effect->u.constant.envelope);
|
||||||
break;
|
break;
|
||||||
@@ -683,19 +690,8 @@ static int pidff_upload_effect(struct input_dev *dev, struct ff_effect *effect,
|
|||||||
if (!old || pidff_needs_set_periodic(effect, old))
|
if (!old || pidff_needs_set_periodic(effect, old))
|
||||||
pidff_set_periodic_report(pidff, effect);
|
pidff_set_periodic_report(pidff, effect);
|
||||||
|
|
||||||
if (pidff->quirks & PIDFF_QUIRK_FIX_PERIODIC_ENVELOPE)
|
if (pidff_needs_set_envelope(&effect->u.periodic.envelope,
|
||||||
{
|
old ? &old->u.periodic.envelope : NULL))
|
||||||
effect->u.periodic.envelope.attack_level =
|
|
||||||
effect->u.periodic.envelope.attack_level == 0
|
|
||||||
? 0x7fff : effect->u.periodic.envelope.attack_level;
|
|
||||||
|
|
||||||
effect->u.periodic.envelope.fade_level =
|
|
||||||
effect->u.periodic.envelope.fade_level == 0
|
|
||||||
? 0x7fff : effect->u.periodic.envelope.fade_level;
|
|
||||||
}
|
|
||||||
if (!old ||
|
|
||||||
pidff_needs_set_envelope(&effect->u.periodic.envelope,
|
|
||||||
&old->u.periodic.envelope))
|
|
||||||
pidff_set_envelope_report(pidff,
|
pidff_set_envelope_report(pidff,
|
||||||
&effect->u.periodic.envelope);
|
&effect->u.periodic.envelope);
|
||||||
break;
|
break;
|
||||||
@@ -711,9 +707,9 @@ static int pidff_upload_effect(struct input_dev *dev, struct ff_effect *effect,
|
|||||||
pidff_set_effect_report(pidff, effect);
|
pidff_set_effect_report(pidff, effect);
|
||||||
if (!old || pidff_needs_set_ramp(effect, old))
|
if (!old || pidff_needs_set_ramp(effect, old))
|
||||||
pidff_set_ramp_force_report(pidff, effect);
|
pidff_set_ramp_force_report(pidff, effect);
|
||||||
if (!old ||
|
|
||||||
pidff_needs_set_envelope(&effect->u.ramp.envelope,
|
if (pidff_needs_set_envelope(&effect->u.ramp.envelope,
|
||||||
&old->u.ramp.envelope))
|
old ? &old->u.periodic.envelope : NULL))
|
||||||
pidff_set_envelope_report(pidff,
|
pidff_set_envelope_report(pidff,
|
||||||
&effect->u.ramp.envelope);
|
&effect->u.ramp.envelope);
|
||||||
break;
|
break;
|
||||||
|
|||||||
14
hid-pidff.h
14
hid-pidff.h
@@ -4,21 +4,15 @@
|
|||||||
|
|
||||||
/* PIDFF Quirks to solve issues with certain devices */
|
/* PIDFF Quirks to solve issues with certain devices */
|
||||||
|
|
||||||
/*
|
|
||||||
* Always set a value > 0 for PERIODIC envelope attack and fade level
|
|
||||||
*/
|
|
||||||
#define PIDFF_QUIRK_FIX_PERIODIC_ENVELOPE BIT(0)
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Ignore direction and always set 16384 (0x4000)
|
* Ignore direction and always set 16384 (0x4000)
|
||||||
*/
|
*/
|
||||||
#define PIDFF_QUIRK_FIX_WHEEL_DIRECTION BIT(1)
|
#define PIDFF_QUIRK_FIX_WHEEL_DIRECTION BIT(0)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Skip initialization of 0xA7 descriptor (Delay effect)
|
* Skip initialization of 0xA7 descriptor (Delay effect)
|
||||||
*/
|
*/
|
||||||
#define PIDFF_QUIRK_NO_DELAY_EFFECT BIT(2)
|
#define PIDFF_QUIRK_NO_DELAY_EFFECT BIT(1)
|
||||||
|
|
||||||
|
|
||||||
int hid_pidff_init_quirks(struct hid_device *hid, const struct hid_device_id *id);
|
int hid_pidff_init_quirks(struct hid_device *hid, const struct hid_device_id *id);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user