HID: pidff: Factor out code for setting gain
[ Upstream commit f7ebf0b11b9e04bf59c438ad14f0115b12aa2f44 ] Makes it possible to easily set gain from inside hid-pidff.c Changes in v7: - Check if device gain field exists before setting device gain Signed-off-by: Tomasz Pakuła <tomasz.pakula.oficjalny@gmail.com> Reviewed-by: Michał Kopeć <michal@nozomi.space> Reviewed-by: Paul Dino Jones <paul@spacefreak18.xyz> Tested-by: Paul Dino Jones <paul@spacefreak18.xyz> Tested-by: Cristóferson Bueno <cbueno81@gmail.com> Tested-by: Pablo Cisneros <patchkez@protonmail.com> Signed-off-by: Jiri Kosina <jkosina@suse.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
5243ca2a5c
commit
8f0b2d791e
@@ -539,6 +539,19 @@ static int pidff_needs_set_ramp(struct ff_effect *effect, struct ff_effect *old)
|
|||||||
effect->u.ramp.end_level != old->u.ramp.end_level;
|
effect->u.ramp.end_level != old->u.ramp.end_level;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set device gain
|
||||||
|
*/
|
||||||
|
static void pidff_set_gain_report(struct pidff_device *pidff, u16 gain)
|
||||||
|
{
|
||||||
|
if (!pidff->device_gain[PID_DEVICE_GAIN_FIELD].field)
|
||||||
|
return;
|
||||||
|
|
||||||
|
pidff_set(&pidff->device_gain[PID_DEVICE_GAIN_FIELD], gain);
|
||||||
|
hid_hw_request(pidff->hid, pidff->reports[PID_DEVICE_GAIN],
|
||||||
|
HID_REQ_SET_REPORT);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Clear device control report
|
* Clear device control report
|
||||||
*/
|
*/
|
||||||
@@ -865,11 +878,7 @@ static int pidff_upload_effect(struct input_dev *dev, struct ff_effect *effect,
|
|||||||
*/
|
*/
|
||||||
static void pidff_set_gain(struct input_dev *dev, u16 gain)
|
static void pidff_set_gain(struct input_dev *dev, u16 gain)
|
||||||
{
|
{
|
||||||
struct pidff_device *pidff = dev->ff->private;
|
pidff_set_gain_report(dev->ff->private, gain);
|
||||||
|
|
||||||
pidff_set(&pidff->device_gain[PID_DEVICE_GAIN_FIELD], gain);
|
|
||||||
hid_hw_request(pidff->hid, pidff->reports[PID_DEVICE_GAIN],
|
|
||||||
HID_REQ_SET_REPORT);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pidff_autocenter(struct pidff_device *pidff, u16 magnitude)
|
static void pidff_autocenter(struct pidff_device *pidff, u16 magnitude)
|
||||||
@@ -1414,12 +1423,7 @@ int hid_pidff_init_with_quirks(struct hid_device *hid, __u32 initial_quirks)
|
|||||||
if (error)
|
if (error)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
if (test_bit(FF_GAIN, dev->ffbit)) {
|
pidff_set_gain_report(pidff, 0xffff);
|
||||||
pidff_set(&pidff->device_gain[PID_DEVICE_GAIN_FIELD], 0xffff);
|
|
||||||
hid_hw_request(hid, pidff->reports[PID_DEVICE_GAIN],
|
|
||||||
HID_REQ_SET_REPORT);
|
|
||||||
}
|
|
||||||
|
|
||||||
error = pidff_check_autocenter(pidff, dev);
|
error = pidff_check_autocenter(pidff, dev);
|
||||||
if (error)
|
if (error)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|||||||
Reference in New Issue
Block a user