input: Introduce ff-memless-next as an improved replacement for ff-memless
Subsystems (3)
v2 cover input: Introduce ff-memless-next as an improved replacement for ff-memless
ff-memless-next (MLNX) is a largely improved version of the current ff-memless (FFML) driver. MLNX supports all force feedback effects currently available in the Linux force feedback userspace API. All effects are handled in accordance with Microsoft's DirectInput/XInput. Most notable changes include support for conditional effects, proper handling of all periodic waveforms and improved emulation of rumble effects through periodic effects. MLNX also uses its own kernel API to pass processed effects to hardware-specific drivers instead of abusing "ff_effect" struct. The API is documented in the respective header file.
MLNX has been expanded to be a direct replacement for FFML.
Support for FF_PERIODIC and FF_RAMP has been added to all devices that support FF_CONSTANT as a part of the port to the new API.
This patch series:
1) Adds "ff-memless-next" module [1]
2) Ports all hardware-specific drivers to MLNX's API [2-23]
3) Removes FFML and replaces it with MLNX [24]
v2:
- Add missing msecs to jiffies conversion in ff-memless-next
- lgff: Properly convert force on Y axis from MLNX to device range Support periodic effects for "joystick_ac" device class
- lg3ff: Properly convert forces from MLNX to device range
- Very minor coding style issues fixed
Michal Malý (24):
Add ff-memless-next module
Port arizona-haptics to ff-memless-next
Port twl4030-vibra to ff-memless-next
Port twl6040-vibra to ff-memless-next
Port max8997_haptic to ff-memless-next
Port pm8xxx-vibrator to ff-memless-next
Port hid-axff to ff-memless-next
Port hid-emsff to ff-memless-next
Port hid-dr to ff-memless-next
Port hid-gaff to ff-memless-next
Port hid-holtekff to ff-memless-next
Port hid-lgff to ff-memless-next
Port hid-lg3ff to ff-memless-next
Port hid-pl to ff-memless-next
Port hid-sjoy to ff-memless-next
Port hid-sony to ff-memless-next
Port hid-tmff to ff-memless-next
Port hid-wiimote-modules to ff-memless-next
Port hid-zpff to ff-memless-next
Port gamecon to ff-memless-next
Port xpad to ff-memless-next
Port hid-lg4ff to ff-memless-next
Replace ff-memless with ff-memless-next
drivers/hid/Kconfig | 30 +- drivers/hid/hid-axff.c | 32 +- drivers/hid/hid-dr.c | 59 +- drivers/hid/hid-emsff.c | 38 +- drivers/hid/hid-gaff.c | 32 +- drivers/hid/hid-holtekff.c | 47 +- drivers/hid/hid-lg2ff.c | 65 ++- drivers/hid/hid-lg3ff.c | 60 +- drivers/hid/hid-lg4ff.c | 93 +-- drivers/hid/hid-lgff.c | 70 ++- drivers/hid/hid-pl.c | 38 +- drivers/hid/hid-sjoy.c | 35 +- drivers/hid/hid-sony.c | 24 +- drivers/hid/hid-tmff.c | 83 +-- drivers/hid/hid-wiimote-modules.c | 74 ++- drivers/hid/hid-zpff.c | 30 +- drivers/input/Kconfig | 4 +- drivers/input/Makefile | 2 +- drivers/input/ff-memless-next.c | 1037 +++++++++++++++++++++++++++++++++ drivers/input/ff-memless.c | 547 ----------------- drivers/input/joystick/Kconfig | 4 +- drivers/input/joystick/gamecon.c | 57 +- drivers/input/joystick/xpad.c | 125 ++-- drivers/input/misc/Kconfig | 10 +- drivers/input/misc/arizona-haptics.c | 39 +- drivers/input/misc/max8997_haptic.c | 25 +- drivers/input/misc/pm8xxx-vibrator.c | 28 +- drivers/input/misc/twl4030-vibra.c | 31 +- drivers/input/misc/twl6040-vibra.c | 27 +- include/linux/input.h | 3 - include/linux/input/ff-memless-next.h | 149 +++++ 31 files changed, 1939 insertions(+), 959 deletions(-) create mode 100644 drivers/input/ff-memless-next.c delete mode 100644 drivers/input/ff-memless.c create mode 100644 include/linux/input/ff-memless-next.h
Signature · 6 lines
1.9.2 -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH v2 1/24 input: Add ff-memless-next module
From: Michal Malý <[email protected]>
--- drivers/input/Kconfig | 11 + drivers/input/Makefile | 1 + drivers/input/ff-memless-next.c | 1037 +++++++++++++++++++++++++++++++++ include/linux/input/ff-memless-next.h | 149 +++++ 4 files changed, 1198 insertions(+) create mode 100644 drivers/input/ff-memless-next.c create mode 100644 include/linux/input/ff-memless-next.h
drivers/input/Kconfig +11 -0
@@ -38,6 +38,17 @@ config INPUT_FF_MEMLESS To compile this driver as a module, choose M here: the module will be called ff-memless. +config INPUT_FF_MEMLESS_NEXT + tristate "New version of support for memoryless force-feedback devices" + help + Say Y here to enable a new version of support for memoryless force + feedback devices. + + If unsure, say N. + + To compile this driver as a module, choose M here: the + module will be called ff-memless-next. + config INPUT_POLLDEV tristate "Polled input device skeleton" help
drivers/input/Makefile +1 -0
@@ -8,6 +8,7 @@ obj-$(CONFIG_INPUT) += input-core.o input-core-y := input.o input-compat.o input-mt.o ff-core.o obj-$(CONFIG_INPUT_FF_MEMLESS) += ff-memless.o +obj-$(CONFIG_INPUT_FF_MEMLESS_NEXT) += ff-memless-next.o obj-$(CONFIG_INPUT_POLLDEV) += input-polldev.o obj-$(CONFIG_INPUT_SPARSEKMAP) += sparse-keymap.o obj-$(CONFIG_INPUT_MATRIXKMAP) += matrix-keymap.o
drivers/input/ff-memless-next.c new file +1037 -0
1,037 lines not on this page · raw message
include/linux/input/ff-memless-next.h new file +149 -0
149 lines not on this page · raw message
Signature · 6 lines
1.9.2 -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH v2 2/24 Port arizona-haptics to ff-memless-next
In reply to Michal Malý--- drivers/input/misc/Kconfig | 2 +- drivers/input/misc/arizona-haptics.c | 39 +++++++++++++++++++++++------------- 2 files changed, 26 insertions(+), 15 deletions(-)
drivers/input/misc/Kconfig +1 -1
@@ -75,7 +75,7 @@ config INPUT_AD714X_SPI config INPUT_ARIZONA_HAPTICS tristate "Arizona haptics support" depends on MFD_ARIZONA && SND_SOC - select INPUT_FF_MEMLESS + select INPUT_FF_MEMLESS_NEXT help Say Y to enable support for the haptics module in Arizona CODECs.
drivers/input/misc/arizona-haptics.c +25 -14
@@ -13,6 +13,7 @@#include <linux/module.h> #include <linux/platform_device.h> #include <linux/input.h> +#include <linux/input/ff-memless-next.h> #include <linux/slab.h> #include <sound/soc.h>
@@ -22,6 +23,8 @@#include <linux/mfd/arizona/pdata.h> #include <linux/mfd/arizona/registers.h> +#define FF_UPDATE_RATE 50 +struct arizona_haptics {struct arizona *arizona;struct input_dev *input_dev;
@@ -108,29 +111,37 @@ static void arizona_haptics_work(struct work_struct *work) }static int arizona_haptics_play (struct input_dev *input,void *data, -struct ff_effect *effect) +const struct mlnx_effect_command *command) {struct arizona_haptics *haptics =input_get_drvdata (input);struct arizona *arizona = haptics->arizona; +const struct mlnx_rumble_force *rumble_force = &command->u.rumble_force;if (!arizona->dapm) {dev_err (arizona->dev,"No DAPM context\n" );return -EBUSY ; } -if (effect->u.rumble.strong_magnitude) { -/* Scale the magnitude into the range the device supports */ -if (arizona->pdata.hap_act) { - haptics->intensity = - effect->u.rumble.strong_magnitude >>9 ; -if (effect->direction <0x8000 ) - haptics->intensity +=0x7f ; +switch (command->cmd) { +case MLNX_START_RUMBLE : +if (rumble_force->strong) { +/* Scale the magnitude into the range the device supports */ +if (arizona->pdata.hap_act) { + haptics->intensity = rumble_force->strong >>9 ; +if (rumble_force->strong_dir <0x8000 ) + haptics->intensity +=0x7f ; + }else { + haptics->intensity = rumble_force->strong >>8 ; + } }else { - haptics->intensity = - effect->u.rumble.strong_magnitude >>8 ; + haptics->intensity =0 ; } - }else { +break ; +case MLNX_STOP_RUMBLE : haptics->intensity =0 ; +break ; +default : +return -EINVAL ; }schedule_work (&haptics->work);
@@ -183,10 +194,10 @@ static int arizona_haptics_probe(struct platform_device *pdev) haptics->input_dev->close = arizona_haptics_close;__set_bit (FF_RUMBLE , haptics->input_dev->ffbit); - ret =input_ff_create_memless (haptics->input_dev,NULL , - arizona_haptics_play); + ret =input_ff_create_mlnx (haptics->input_dev,NULL , + arizona_haptics_play,FF_UPDATE_RATE );if (ret <0 ) { -dev_err (arizona->dev,"input_ff_create_memless() failed: %d\n" , +dev_err (arizona->dev,"input_ff_create_mlnx() failed: %d\n" , ret); goto err_ialloc; }
Signature · 1 line
1.9.2
PATCH v2 3/24 Port twl4030-vibra to ff-memless-next
In reply to Michal Malý--- drivers/input/misc/Kconfig | 2 +- drivers/input/misc/twl4030-vibra.c | 31 +++++++++++++++++++++++++------ 2 files changed, 26 insertions(+), 7 deletions(-)
drivers/input/misc/Kconfig +1 -1
@@ -407,7 +407,7 @@ config INPUT_TWL4030_VIBRA tristate "Support for TWL4030 Vibrator" depends on TWL4030_CORE select MFD_TWL4030_AUDIO - select INPUT_FF_MEMLESS + select INPUT_FF_MEMLESS_NEXT help This option enables support for TWL4030 Vibrator Driver.
drivers/input/misc/twl4030-vibra.c +25 -6
@@ -32,9 +32,11 @@#include <linux/mfd/twl4030-audio.h> #include <linux/input.h> #include <linux/slab.h> +#include <linux/input/ff-memless-next.h> /* MODULE ID2 */ #define LEDEN 0x00 +#define FF_UPDATE_RATE 50/* ForceFeedback */ #define EFFECT_DIR_180_DEG 0x8000/* range is 0 - 0xFFFF */
@@ -134,14 +136,31 @@ static void vibra_play_work(struct work_struct *work)/*** Input/ForceFeedback ***/ static int vibra_play (struct input_dev *input,void *data, -struct ff_effect *effect) +const struct mlnx_effect_command *command) {struct vibra_info *info =input_get_drvdata (input); +const struct mlnx_rumble_force *rumble_force = &command->u.rumble_force; + +switch (command->cmd) { +case MLNX_START_RUMBLE : +if (command->u.rumble_force.strong) { + info->speed = rumble_force->strong >>8 ; + info->direction = rumble_force->strong_dir <EFFECT_DIR_180_DEG ? +0 :1 ; + }else { + info->speed = rumble_force->weak >>9 ; + info->direction = rumble_force->weak_dir <EFFECT_DIR_180_DEG ? +0 :1 ; + } +break ; +case MLNX_STOP_RUMBLE : + info->speed =0 ; + info->direction =0 ; +break ; +default : +return -EINVAL ; + } - info->speed = effect->u.rumble.strong_magnitude >>8 ; -if (!info->speed) - info->speed = effect->u.rumble.weak_magnitude >>9 ; - info->direction = effect->direction <EFFECT_DIR_180_DEG ?0 :1 ;schedule_work (&info->play_work);return 0 ; }
@@ -227,7 +246,7 @@ static int twl4030_vibra_probe(struct platform_device *pdev) info->input_dev->close = twl4030_vibra_close;__set_bit (FF_RUMBLE , info->input_dev->ffbit); - ret =input_ff_create_memless (info->input_dev,NULL , vibra_play); + ret =input_ff_create_mlnx (info->input_dev,NULL , vibra_play,FF_UPDATE_RATE );if (ret <0 ) {dev_dbg (&pdev->dev,"couldn't register vibrator to FF\n" );return ret;
Signature · 1 line
1.9.2
PATCH v2 4/24 Port twl6040-vibra to ff-memless-next
In reply to Michal Malý--- drivers/input/misc/Kconfig | 2 +- drivers/input/misc/twl6040-vibra.c | 27 ++++++++++++++++++++++----- 2 files changed, 23 insertions(+), 6 deletions(-)
drivers/input/misc/Kconfig +1 -1
@@ -417,7 +417,7 @@ config INPUT_TWL4030_VIBRA config INPUT_TWL6040_VIBRA tristate "Support for TWL6040 Vibrator" depends on TWL6040_CORE - select INPUT_FF_MEMLESS + select INPUT_FF_MEMLESS_NEXT help This option enables support for TWL6040 Vibrator Driver.
drivers/input/misc/twl6040-vibra.c +22 -5
@@ -30,12 +30,14 @@#include <linux/of.h> #include <linux/workqueue.h> #include <linux/input.h> +#include <linux/input/ff-memless-next.h> #include <linux/mfd/twl6040.h> #include <linux/slab.h> #include <linux/delay.h> #include <linux/regulator/consumer.h> #define EFFECT_DIR_180_DEG 0x8000 +#define FF_UPDATE_RATE 50/* Recommended modulation index 85% */ #define TWL6040_VIBRA_MOD 85
@@ -197,9 +199,10 @@ static void vibra_play_work(struct work_struct *work) }static int vibra_play (struct input_dev *input,void *data, -struct ff_effect *effect) +const struct mlnx_effect_command *command) {struct vibra_info *info =input_get_drvdata (input); +const struct mlnx_rumble_force *rumble_force = &command->u.rumble_force;int ret;/* Do not allow effect, while the routing is set to use audio */
@@ -209,9 +212,23 @@ static int vibra_play(struct input_dev *input, void *data,return -EBUSY ; } - info->weak_speed = effect->u.rumble.weak_magnitude; - info->strong_speed = effect->u.rumble.strong_magnitude; - info->direction = effect->direction <EFFECT_DIR_180_DEG ?1 :-1 ; +switch (command->cmd) { +case MLNX_START_RUMBLE : + info->weak_speed = rumble_force->weak; + info->strong_speed = rumble_force->strong; +if (info->strong_speed >= info->weak_speed) + info->direction = rumble_force->strong_dir <EFFECT_DIR_180_DEG ?1 :-1 ; +else + info->direction = rumble_force->weak_dir <EFFECT_DIR_180_DEG ?1 :-1 ; +break ; +case MLNX_STOP_RUMBLE : + info->weak_speed =0 ; + info->strong_speed =0 ; + info->direction =1 ; +break ; +default : +return -EINVAL ; + } ret =queue_work (info->workqueue, &info->play_work);if (!ret) {
@@ -367,7 +384,7 @@ static int twl6040_vibra_probe(struct platform_device *pdev) info->input_dev->close = twl6040_vibra_close;__set_bit (FF_RUMBLE , info->input_dev->ffbit); - ret =input_ff_create_memless (info->input_dev,NULL , vibra_play); + ret =input_ff_create_mlnx (info->input_dev,NULL , vibra_play,FF_UPDATE_RATE );if (ret <0 ) {dev_err (info->dev,"couldn't register vibrator to FF\n" ); goto err_ialloc;
Signature · 1 line
1.9.2
PATCH v2 5/24 Port max8997_haptic to ff-memless-next
In reply to Michal Malý--- drivers/input/misc/Kconfig | 2 +- drivers/input/misc/max8997_haptic.c | 25 +++++++++++++++++++------ 2 files changed, 20 insertions(+), 7 deletions(-)
drivers/input/misc/Kconfig +1 -1
@@ -157,7 +157,7 @@ config INPUT_MAX8925_ONKEY config INPUT_MAX8997_HAPTIC tristate "MAXIM MAX8997 haptic controller support" depends on PWM && HAVE_PWM && MFD_MAX8997 - select INPUT_FF_MEMLESS + select INPUT_FF_MEMLESS_NEXT help This option enables device driver support for the haptic controller on MAXIM MAX8997 chip. This driver supports ff-memless interface
drivers/input/misc/max8997_haptic.c +19 -6
@@ -31,6 +31,7 @@#include <linux/mfd/max8997-private.h> #include <linux/mfd/max8997.h> #include <linux/regulator/consumer.h> +#include <linux/input/ff-memless-next.h> /* Haptic configuration 2 register */ #define MAX8997_MOTOR_TYPE_SHIFT 7
@@ -43,6 +44,8 @@#define MAX8997_SIG_DUTY_SHIFT 2#define MAX8997_PWM_DUTY_SHIFT 0 +#define FF_UPDATE_RATE 50 +struct max8997_haptic {struct device *dev;struct i2c_client *client;
@@ -219,13 +222,23 @@ static void max8997_haptic_play_effect_work(struct work_struct *work) }static int max8997_haptic_play_effect (struct input_dev *dev,void *data, -struct ff_effect *effect) +const struct mlnx_effect_command *command) {struct max8997_haptic *chip =input_get_drvdata (dev); +const struct mlnx_rumble_force *rumble_force = &command->u.rumble_force; - chip->level = effect->u.rumble.strong_magnitude; -if (!chip->level) - chip->level = effect->u.rumble.weak_magnitude; +switch (command->cmd) { +case MLNX_START_RUMBLE : + chip->level = rumble_force->strong; +if (!chip->level) + chip->level = rumble_force->weak; +break ; +case MLNX_STOP_RUMBLE : + chip->level =0 ; +break ; +default : +return -EINVAL ; + }schedule_work (&chip->work);
@@ -319,8 +332,8 @@ static int max8997_haptic_probe(struct platform_device *pdev)input_set_drvdata (input_dev, chip);input_set_capability (input_dev,EV_FF ,FF_RUMBLE ); - error =input_ff_create_memless (input_dev,NULL , - max8997_haptic_play_effect); + error =input_ff_create_mlnx (input_dev,NULL , + max8997_haptic_play_effect,FF_UPDATE_RATE );if (error) { dev_err(&pdev->dev, "unable to create FF device, error: %d\n",
Signature · 1 line
1.9.2
PATCH v2 6/24 Port pm8xxx-vibrator to ff-memless-next
In reply to Michal Malý--- drivers/input/misc/Kconfig | 2 +- drivers/input/misc/pm8xxx-vibrator.c | 28 +++++++++++++++++++--------- 2 files changed, 20 insertions(+), 10 deletions(-)
drivers/input/misc/Kconfig +1 -1
@@ -108,7 +108,7 @@ config INPUT_PCSPKR config INPUT_PM8XXX_VIBRATOR tristate "Qualcomm PM8XXX vibrator support" depends on MFD_PM8XXX - select INPUT_FF_MEMLESS + select INPUT_FF_MEMLESS_NEXT help This option enables device driver support for the vibrator on Qualcomm PM8xxx chip. This driver supports ff-memless interface
drivers/input/misc/pm8xxx-vibrator.c +19 -9
@@ -17,6 +17,7 @@#include <linux/input.h> #include <linux/slab.h> #include <linux/regmap.h> +#include <linux/input/ff-memless-next.h> #define VIB_DRV 0x4A
@@ -29,7 +30,7 @@#define VIB_MAX_LEVELS (VIB_MAX_LEVEL_mV - VIB_MIN_LEVEL_mV)#define MAX_FF_SPEED 0xff - +#define FF_UPDATE_RATE 50/** * struct pm8xxx_vib - structure to hold vibrator data * @vib_input_dev: input device supporting force feedback
@@ -128,14 +129,23 @@ static void pm8xxx_vib_close(struct input_dev *dev)* Currently this driver supports only rumble effects. */ static int pm8xxx_vib_play_effect (struct input_dev *dev,void *data, -struct ff_effect *effect) +const struct mlnx_command *command) {struct pm8xxx_vib *vib =input_get_drvdata (dev); - - vib->speed = effect->u.rumble.strong_magnitude >>8 ; -if (!vib->speed) - vib->speed = effect->u.rumble.weak_magnitude >>9 ; - +const struct mlnx_rumble_force *rumble_force = &command->u.rumble_force; + +switch (command->cmd) { +case MLNX_START_RUMBLE : + vib->speed = rumble_force->strong >>8 ; +if (!vib->speed) + vib->speed = rumble_force->weak >>9 ; +break ; +case MLNX_STOP_RUMBLE : + vib->speed =0 ; +break ; +default : +return -EINVAL ; + }schedule_work (&vib->work);return 0 ;
@@ -182,8 +192,8 @@ static int pm8xxx_vib_probe(struct platform_device *pdev)input_set_drvdata (input_dev, vib);input_set_capability (vib->vib_input_dev,EV_FF ,FF_RUMBLE ); - error =input_ff_create_memless (input_dev,NULL , - pm8xxx_vib_play_effect); + error =input_ff_create_mlnx (input_dev,NULL , + pm8xxx_vib_play_effect,FF_UPDATE_RATE );if (error) {dev_err (&pdev->dev,"couldn't register vibrator as FF device\n" );
Signature · 6 lines
1.9.2 -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH v2 7/24 Port hid-axff to ff-memless-next
In reply to Michal Malý--- drivers/hid/Kconfig | 2 +- drivers/hid/hid-axff.c | 32 +++++++++++++++++++++++--------- 2 files changed, 24 insertions(+), 10 deletions(-)
drivers/hid/Kconfig +1 -1
@@ -106,7 +106,7 @@ config HID_ACRUX config HID_ACRUX_FF bool "ACRUX force feedback support" depends on HID_ACRUX - select INPUT_FF_MEMLESS + select INPUT_FF_MEMLESS_NEXT ---help--- Say Y here if you want to enable force feedback support for ACRUX game controllers.
drivers/hid/hid-axff.c +23 -9
@@ -31,31 +31,45 @@#include <linux/slab.h> #include <linux/hid.h> #include <linux/module.h> +#include <linux/input/ff-memless-next.h> #include "hid-ids.h" +#define FF_UPDATE_RATE 50#ifdef CONFIG_HID_ACRUX_FF struct axff_device {struct hid_report *report; }; -static int axff_play (struct input_dev *dev,void *data,struct ff_effect *effect) +static int axff_play (struct input_dev *dev,void *data, +const struct mlnx_effect_command *command) {struct hid_device *hid =input_get_drvdata (dev);struct axff_device *axff = data;struct hid_report *report = axff->report; +const struct mlnx_rumble_force *rumble_force = &command->u.rumble_force;int field_count =0 ;int left, right;int i, j; - left = effect->u.rumble.strong_magnitude; - right = effect->u.rumble.weak_magnitude; - -dbg_hid ("called with 0x%04x 0x%04x" , left, right); - - left = left *0xff /0xffff ; - right = right *0xff /0xffff ; +switch (command->cmd) { +case MLNX_START_RUMBLE : + left = rumble_force->strong; + right = rumble_force->weak; + +dbg_hid ("called with 0x%04x 0x%04x" , left, right); + + left = left *0xff /0xffff ; + right = right *0xff /0xffff ; +break ; +case MLNX_STOP_RUMBLE : + left =0 ; + right =0 ; +break ; +default : +return -EINVAL ; + }for (i =0 ; i < report->maxfield; i++) {for (j =0 ; j < report->field[i]->report_count; j++) {
@@ -107,7 +121,7 @@ static int axff_init(struct hid_device *hid)set_bit (FF_RUMBLE , dev->ffbit); - error =input_ff_create_memless (dev, axff, axff_play); + error =input_ff_create_mlnx (dev, axff, axff_play,FF_UPDATE_RATE );if (error) goto err_free_mem;
Signature · 1 line
1.9.2
PATCH v2 8/24 Port hid-emsff to ff-memless-next
In reply to Michal Malý--- drivers/hid/Kconfig | 2 +- drivers/hid/hid-emsff.c | 38 ++++++++++++++++++++++++++------------ 2 files changed, 27 insertions(+), 13 deletions(-)
drivers/hid/Kconfig +1 -1
@@ -204,7 +204,7 @@ config DRAGONRISE_FF config HID_EMS_FF tristate "EMS Production Inc. force feedback support" depends on HID - select INPUT_FF_MEMLESS + select INPUT_FF_MEMLESS_NEXT ---help--- Say Y here if you want to enable force feedback support for devices by EMS Production Ltd.
drivers/hid/hid-emsff.c +26 -12
@@ -24,30 +24,44 @@#include <linux/hid.h> #include <linux/input.h> #include <linux/module.h> +#include <linux/input/ff-memless-next.h> #include "hid-ids.h" +#define FF_UPDATE_RATE 50 +struct emsff_device {struct hid_report *report; };static int emsff_play (struct input_dev *dev,void *data, -struct ff_effect *effect) +const struct mlnx_effect_command *command) {struct hid_device *hid =input_get_drvdata (dev);struct emsff_device *emsff = data; +const struct mlnx_rumble_force *rumble_force = &command->u.rumble_force;int weak, strong; - weak = effect->u.rumble.weak_magnitude; - strong = effect->u.rumble.strong_magnitude; - -dbg_hid ("called with 0x%04x 0x%04x\n" , strong, weak); - - weak = weak *0xff /0xffff ; - strong = strong *0xff /0xffff ; - - emsff->report->field[0 ]->value[1 ] = weak; - emsff->report->field[0 ]->value[2 ] = strong; +switch (command->cmd) { +case MLNX_START_RUMBLE : + weak = rumble_force->weak; + strong = rumble_force->strong; + +dbg_hid ("called with 0x%04x 0x%04x\n" , strong, weak); + + weak = weak *0xff /0xffff ; + strong = strong *0xff /0xffff ; + + emsff->report->field[0 ]->value[1 ] = weak; + emsff->report->field[0 ]->value[2 ] = strong; +break ; +case MLNX_STOP_RUMBLE : + weak =0 ; + strong =0 ; +break ; +default : +return -EINVAL ; + }dbg_hid ("running with 0x%02x 0x%02x\n" , strong, weak);hid_hw_request (hid, emsff->report,HID_REQ_SET_REPORT );
@@ -88,7 +102,7 @@ static int emsff_init(struct hid_device *hid)set_bit (FF_RUMBLE , dev->ffbit); - error =input_ff_create_memless (dev, emsff, emsff_play); + error =input_ff_create_mlnx (dev, emsff, emsff_play,FF_UPDATE_RATE );if (error) {kfree (emsff);return error;
Signature · 6 lines
1.9.2 -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH v2 9/24 Port hid-dr to ff-memless-next
In reply to Michal Malý--- drivers/hid/Kconfig | 2 +- drivers/hid/hid-dr.c | 59 ++++++++++++++++++++++++++++++++-------------------- 2 files changed, 37 insertions(+), 24 deletions(-)
drivers/hid/Kconfig +1 -1
@@ -196,7 +196,7 @@ config HID_DRAGONRISE config DRAGONRISE_FF bool "DragonRise Inc. force feedback" depends on HID_DRAGONRISE - select INPUT_FF_MEMLESS + select INPUT_FF_MEMLESS_NEXT ---help--- Say Y here if you want to enable force feedback support for DragonRise Inc. game controllers.
drivers/hid/hid-dr.c +36 -23
89 lines not on this page · raw message
Signature · 1 line
1.9.2
PATCH v2 10/24 Port hid-gaff to ff-memless-next
In reply to Michal Malý--- drivers/hid/Kconfig | 2 +- drivers/hid/hid-gaff.c | 32 +++++++++++++++++++++++--------- 2 files changed, 24 insertions(+), 10 deletions(-)
drivers/hid/Kconfig +1 -1
@@ -656,7 +656,7 @@ config HID_GREENASIA config GREENASIA_FF bool "GreenAsia (Product ID 0x12) force feedback support" depends on HID_GREENASIA - select INPUT_FF_MEMLESS + select INPUT_FF_MEMLESS_NEXT ---help--- Say Y here if you have a GreenAsia (Product ID 0x12) based game controller (like MANTA Warrior MM816 and SpeedLink Strike2 SL-6635) or adapter
drivers/hid/hid-gaff.c +23 -9
@@ -31,8 +31,11 @@#include <linux/slab.h> #include <linux/hid.h> #include <linux/module.h> +#include <linux/input/ff-memless-next.h> #include "hid-ids.h" +#define FF_UPDATE_RATE 50 +#ifdef CONFIG_GREENASIA_FF struct gaff_device {
@@ -40,19 +43,30 @@ struct gaff_device { };static int hid_gaff_play (struct input_dev *dev,void *data, -struct ff_effect *effect) +const struct mlnx_effect_command *command) {struct hid_device *hid =input_get_drvdata (dev);struct gaff_device *gaff = data; +const struct mlnx_rumble_force *rumble_force = &command->u.rumble_force;int left, right; - left = effect->u.rumble.strong_magnitude; - right = effect->u.rumble.weak_magnitude; - -dbg_hid ("called with 0x%04x 0x%04x" , left, right); - - left = left *0xfe /0xffff ; - right = right *0xfe /0xffff ; +switch (command->cmd) { +case MLNX_START_RUMBLE : + left = rumble_force->strong; + right = rumble_force->weak; + +dbg_hid ("called with 0x%04x 0x%04x" , left, right); + + left = left *0xfe /0xffff ; + right = right *0xfe /0xffff ; +break ; +case MLNX_STOP_RUMBLE : + left =0 ; + right =0 ; +break ; +default : +return -EINVAL ; + } gaff->report->field[0 ]->value[0 ] =0x51 ; gaff->report->field[0 ]->value[1 ] =0x0 ;
@@ -109,7 +123,7 @@ static int gaff_init(struct hid_device *hid)set_bit (FF_RUMBLE , dev->ffbit); - error =input_ff_create_memless (dev, gaff, hid_gaff_play); + error =input_ff_create_mlnx (dev, gaff, hid_gaff_play,FF_UPDATE_RATE );if (error) {kfree (gaff);return error;
Signature · 1 line
1.9.2
PATCH v2 11/24 Port hid-holtekff to ff-memless-next
In reply to Michal Malý--- drivers/hid/Kconfig | 2 +- drivers/hid/hid-holtekff.c | 47 +++++++++++++++++++++++++++++----------------- 2 files changed, 31 insertions(+), 18 deletions(-)
drivers/hid/Kconfig +1 -1
@@ -247,7 +247,7 @@ config HID_HOLTEK config HOLTEK_FF bool "Holtek On Line Grip force feedback support" depends on HID_HOLTEK - select INPUT_FF_MEMLESS + select INPUT_FF_MEMLESS_NEXT ---help--- Say Y here if you have a Holtek On Line Grip based game controller and want to have force feedback support for it.
drivers/hid/hid-holtekff.c +30 -17
80 lines not on this page · raw message
Signature · 6 lines
1.9.2 -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH v2 12/24 Port hid-lgff to ff-memless-next
In reply to Michal Malý--- drivers/hid/Kconfig | 2 +- drivers/hid/hid-lgff.c | 70 +++++++++++++++++++++++++++++++++++--------------- 2 files changed, 51 insertions(+), 21 deletions(-)
drivers/hid/Kconfig +1 -1
@@ -356,7 +356,7 @@ config HID_LOGITECH_DJ config LOGITECH_FF bool "Logitech force feedback support" depends on HID_LOGITECH - select INPUT_FF_MEMLESS + select INPUT_FF_MEMLESS_NEXT help Say Y here if you have one of these devices: - Logitech WingMan Cordless RumblePad
drivers/hid/hid-lgff.c +50 -20
122 lines not on this page · raw message
Signature · 1 line
1.9.2
PATCH v2 13/24 Port hid-lg3ff to ff-memless-next
In reply to Michal Malý--- drivers/hid/Kconfig | 2 +- drivers/hid/hid-lg3ff.c | 60 +++++++++++++++++++++++++++++++------------------ 2 files changed, 39 insertions(+), 23 deletions(-)
drivers/hid/Kconfig +1 -1
@@ -382,7 +382,7 @@ config LOGIRUMBLEPAD2_FF config LOGIG940_FF bool "Logitech Flight System G940 force feedback support" depends on HID_LOGITECH - select INPUT_FF_MEMLESS + select INPUT_FF_MEMLESS_NEXT help Say Y here if you want to enable force feedback support for Logitech Flight System G940 devices.
drivers/hid/hid-lg3ff.c +38 -22
102 lines not on this page · raw message
Signature · 1 line
1.9.2