From: "Michal Malý" <madcatxster@devoid-pointer.net>
To: linux-input@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: dmitry.torokhov@gmail.com, jkosina@suse.cz, elias.vds@gmail.com,
anssi.hannula@iki.fi, simon@mungewell.org,
"Michal Malý" <madcatxster@devoid-pointer.net>
Subject: [PATCH v3 12/24] hid: Port hid-lgff to ff-memless-next
Date: Sat, 26 Apr 2014 13:57:49 +0200 [thread overview]
Message-ID: <1398513696-12626-13-git-send-email-madcatxster@devoid-pointer.net> (raw)
In-Reply-To: <1398513696-12626-1-git-send-email-madcatxster@devoid-pointer.net>
Port hid-lgff to ff-memless-next
Signed-off-by: Michal Malý <madcatxster@devoid-pointer.net>
---
drivers/hid/Kconfig | 2 +-
drivers/hid/hid-lgff.c | 70 +++++++++++++++++++++++++++++++++++---------------
2 files changed, 51 insertions(+), 21 deletions(-)
diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
index 1749a4a..c4b0cbb 100644
--- a/drivers/hid/Kconfig
+++ b/drivers/hid/Kconfig
@@ -365,7 +365,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
diff --git a/drivers/hid/hid-lgff.c b/drivers/hid/hid-lgff.c
index e1394af..40ad68a 100644
--- a/drivers/hid/hid-lgff.c
+++ b/drivers/hid/hid-lgff.c
@@ -31,9 +31,12 @@
#include <linux/input.h>
#include <linux/hid.h>
+#include <linux/input/ff-memless-next.h>
#include "hid-lg.h"
+#define FF_UPDATE_RATE 50
+
struct dev_type {
u16 idVendor;
u16 idProduct;
@@ -47,11 +50,25 @@ static const signed short ff_rumble[] = {
static const signed short ff_joystick[] = {
FF_CONSTANT,
+ FF_RAMP,
+ FF_PERIODIC,
+ FF_SQUARE,
+ FF_TRIANGLE,
+ FF_SINE,
+ FF_SAW_UP,
+ FF_SAW_DOWN,
-1
};
static const signed short ff_joystick_ac[] = {
FF_CONSTANT,
+ FF_RAMP,
+ FF_PERIODIC,
+ FF_SQUARE,
+ FF_TRIANGLE,
+ FF_SINE,
+ FF_SAW_UP,
+ FF_SAW_DOWN,
FF_AUTOCENTER,
-1
};
@@ -66,45 +83,58 @@ static const struct dev_type devices[] = {
{ 0x046d, 0xc295, ff_joystick },
};
-static int hid_lgff_play(struct input_dev *dev, void *data, struct ff_effect *effect)
+static int hid_lgff_play(struct input_dev *dev, void *data,
+ const struct mlnx_effect_command *command)
{
struct hid_device *hid = input_get_drvdata(dev);
struct list_head *report_list = &hid->report_enum[HID_OUTPUT_REPORT].report_list;
struct hid_report *report = list_entry(report_list->next, struct hid_report, list);
- int x, y;
- unsigned int left, right;
-#define CLAMP(x) if (x < 0) x = 0; if (x > 0xff) x = 0xff
+ switch (command->cmd) {
+ case MLNX_START_COMBINED: {
+ const struct mlnx_simple_force *simple_force = &command->u.simple_force;
+ /* Scale down from MLNX range */
+ const int x = 0x80 - (simple_force->x * 0xff / 0xffff);
+ const int y = 0x80 - (simple_force->y * 0xff / 0xffff);
- switch (effect->type) {
- case FF_CONSTANT:
- x = effect->u.ramp.start_level + 0x7f; /* 0x7f is center */
- y = effect->u.ramp.end_level + 0x7f;
- CLAMP(x);
- CLAMP(y);
report->field[0]->value[0] = 0x51;
report->field[0]->value[1] = 0x08;
report->field[0]->value[2] = x;
report->field[0]->value[3] = y;
dbg_hid("(x, y)=(%04x, %04x)\n", x, y);
- hid_hw_request(hid, report, HID_REQ_SET_REPORT);
break;
+ }
+ case MLNX_STOP_COMBINED:
+ report->field[0]->value[0] = 0x51;
+ report->field[0]->value[1] = 0x08;
+ report->field[0]->value[2] = 0x80;
+ report->field[0]->value[3] = 0x80;
+ break;
+ case MLNX_START_RUMBLE: {
+ const struct mlnx_rumble_force *rumble_force = &command->u.rumble_force;
+ /* Scale down from MLNX range */
+ const unsigned int right = rumble_force->weak * 0xff / 0xffff;
+ const unsigned int left = rumble_force->strong * 0xff / 0xffff;
- case FF_RUMBLE:
- right = effect->u.rumble.strong_magnitude;
- left = effect->u.rumble.weak_magnitude;
- right = right * 0xff / 0xffff;
- left = left * 0xff / 0xffff;
- CLAMP(left);
- CLAMP(right);
report->field[0]->value[0] = 0x42;
report->field[0]->value[1] = 0x00;
report->field[0]->value[2] = left;
report->field[0]->value[3] = right;
dbg_hid("(left, right)=(%04x, %04x)\n", left, right);
- hid_hw_request(hid, report, HID_REQ_SET_REPORT);
break;
}
+ case MLNX_STOP_RUMBLE:
+ report->field[0]->value[0] = 0x42;
+ report->field[0]->value[1] = 0x00;
+ report->field[0]->value[2] = 0;
+ report->field[0]->value[3] = 0;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ hid_hw_request(hid, report, HID_REQ_SET_REPORT);
+
return 0;
}
@@ -148,7 +178,7 @@ int lgff_init(struct hid_device* hid)
for (i = 0; ff_bits[i] >= 0; i++)
set_bit(ff_bits[i], dev->ffbit);
- error = input_ff_create_memless(dev, NULL, hid_lgff_play);
+ error = input_ff_create_mlnx(dev, NULL, hid_lgff_play, FF_UPDATE_RATE);
if (error)
return error;
--
1.9.2
next prev parent reply other threads:[~2014-04-26 11:57 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-26 11:57 [PATCH v3 00/24] input: Introduce ff-memless-next as an improved replacement for ff-memless Michal Malý
2014-04-26 11:57 ` [PATCH v3 01/24] input: Add ff-memless-next module Michal Malý
2014-04-26 13:07 ` Antonio Ospite
2014-04-26 15:04 ` Michal Malý
2014-04-26 11:57 ` [PATCH v3 02/24] input: Port arizona-haptics to ff-memless-next Michal Malý
2014-04-26 11:57 ` [PATCH v3 03/24] input: Port twl4030-vibra " Michal Malý
2014-04-26 11:57 ` [PATCH v4 04/24] input: Port twl6040-vibra " Michal Malý
2014-04-26 11:57 ` [PATCH v3 05/24] input: Port max8997_haptic " Michal Malý
2014-04-26 11:57 ` [PATCH v3 06/24] input: Port pm8xxx-vibrator " Michal Malý
2014-04-26 11:57 ` [PATCH v3 07/24] hid: Port hid-axff " Michal Malý
2014-04-26 11:57 ` [PATCH v3 08/24] hid: Port hid-emsff " Michal Malý
2014-04-26 11:57 ` [PATCH v3 09/24] hid: Port hid-dr " Michal Malý
2014-04-26 11:57 ` [PATCH v3 10/24] hid: Port hid-gaff " Michal Malý
2014-04-26 11:57 ` [PATCH v3 11/24] hid: Port hid-holtekff " Michal Malý
2014-04-26 11:57 ` Michal Malý [this message]
2014-04-26 11:57 ` [PATCH v3 13/24] hid: Port hid-lg3ff " Michal Malý
2014-04-26 11:57 ` [PATCH v3 14/24] hid: Port hid-pl " Michal Malý
2014-04-26 11:57 ` [PATCH v3 15/24] hid: Port hid-sjoy " Michal Malý
2014-04-26 11:57 ` [PATCH v3 16/24] hid: Port hid-sony " Michal Malý
2014-04-26 13:09 ` Antonio Ospite
2014-04-26 15:05 ` Michal Malý
2014-04-26 11:57 ` [PATCH v3 17/24] hid: Port hid-tmff " Michal Malý
2014-04-26 11:57 ` [PATCH v3 18/24] hid: Port hid-wiimote-modules " Michal Malý
2014-04-26 11:57 ` [PATCH v3 19/24] hid: Port hid-zpff " Michal Malý
2014-04-26 11:57 ` [PATCH v3 20/24] input: Port gamecon " Michal Malý
2014-04-26 11:57 ` [PATCH v3 21/24] input: Port xpad " Michal Malý
2014-04-26 11:57 ` [PATCH v3 22/24] hid: Port hid-lg2ff " Michal Malý
2014-04-26 11:58 ` [PATCH v3 23/24] hid: Port hid-lg4ff " Michal Malý
2014-04-26 13:50 ` Elias Vanderstuyft
2014-04-26 11:58 ` [PATCH v3 24/24] input: Replace ff-memless with ff-memless-next Michal Malý
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1398513696-12626-13-git-send-email-madcatxster@devoid-pointer.net \
--to=madcatxster@devoid-pointer.net \
--cc=anssi.hannula@iki.fi \
--cc=dmitry.torokhov@gmail.com \
--cc=elias.vds@gmail.com \
--cc=jkosina@suse.cz \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=simon@mungewell.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).