Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
35d03a0d
Commit
35d03a0d
authored
Aug 04, 2010
by
Jiri Kosina
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'acrux' into for-linus
Conflicts: drivers/hid/hid-ids.h
parents
9929ffed
7d3d42a7
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
187 additions
and
1 deletion
+187
-1
drivers/hid/Kconfig
drivers/hid/Kconfig
+8
-0
drivers/hid/Makefile
drivers/hid/Makefile
+1
-0
drivers/hid/hid-axff.c
drivers/hid/hid-axff.c
+172
-0
drivers/hid/hid-core.c
drivers/hid/hid-core.c
+3
-0
drivers/hid/hid-ids.h
drivers/hid/hid-ids.h
+3
-1
No files found.
drivers/hid/Kconfig
View file @
35d03a0d
...
...
@@ -68,6 +68,14 @@ config HID_A4TECH
---help---
Support for A4 tech X5 and WOP-35 / Trust 450L mice.
config HID_ACRUX_FF
tristate "ACRUX force feedback support"
depends on USB_HID
select INPUT_FF_MEMLESS
---help---
Say Y here if you want to enable force feedback support for ACRUX
game controllers.
config HID_APPLE
tristate "Apple" if EMBEDDED
depends on (USB_HID || BT_HIDP)
...
...
drivers/hid/Makefile
View file @
35d03a0d
...
...
@@ -24,6 +24,7 @@ endif
obj-$(CONFIG_HID_3M_PCT)
+=
hid-3m-pct.o
obj-$(CONFIG_HID_A4TECH)
+=
hid-a4tech.o
obj-$(CONFIG_HID_ACRUX_FF)
+=
hid-axff.o
obj-$(CONFIG_HID_APPLE)
+=
hid-apple.o
obj-$(CONFIG_HID_BELKIN)
+=
hid-belkin.o
obj-$(CONFIG_HID_CANDO)
+=
hid-cando.o
...
...
drivers/hid/hid-axff.c
0 → 100644
View file @
35d03a0d
/*
* Force feedback support for ACRUX game controllers
*
* From what I have gathered, these devices are mass produced in China
* by several vendors. They often share the same design as the original
* Xbox 360 controller.
*
* 1a34:0802 "ACRUX USB GAMEPAD 8116"
* - tested with a EXEQ EQ-PCU-02090 game controller.
*
* Copyright (c) 2010 Sergei Kolzun <x0r@dv-life.ru>
*/
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <linux/input.h>
#include <linux/slab.h>
#include <linux/usb.h>
#include <linux/hid.h>
#include "hid-ids.h"
#include "usbhid/usbhid.h"
struct
axff_device
{
struct
hid_report
*
report
;
};
static
int
axff_play
(
struct
input_dev
*
dev
,
void
*
data
,
struct
ff_effect
*
effect
)
{
struct
hid_device
*
hid
=
input_get_drvdata
(
dev
);
struct
axff_device
*
axff
=
data
;
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
*
0xff
/
0xffff
;
right
=
right
*
0xff
/
0xffff
;
axff
->
report
->
field
[
0
]
->
value
[
0
]
=
left
;
axff
->
report
->
field
[
1
]
->
value
[
0
]
=
right
;
axff
->
report
->
field
[
2
]
->
value
[
0
]
=
left
;
axff
->
report
->
field
[
3
]
->
value
[
0
]
=
right
;
dbg_hid
(
"running with 0x%02x 0x%02x"
,
left
,
right
);
usbhid_submit_report
(
hid
,
axff
->
report
,
USB_DIR_OUT
);
return
0
;
}
static
int
axff_init
(
struct
hid_device
*
hid
)
{
struct
axff_device
*
axff
;
struct
hid_report
*
report
;
struct
hid_input
*
hidinput
=
list_first_entry
(
&
hid
->
inputs
,
struct
hid_input
,
list
);
struct
list_head
*
report_list
=&
hid
->
report_enum
[
HID_OUTPUT_REPORT
].
report_list
;
struct
input_dev
*
dev
=
hidinput
->
input
;
int
error
;
if
(
list_empty
(
report_list
))
{
dev_err
(
&
hid
->
dev
,
"no output reports found
\n
"
);
return
-
ENODEV
;
}
report
=
list_first_entry
(
report_list
,
struct
hid_report
,
list
);
if
(
report
->
maxfield
<
4
)
{
dev_err
(
&
hid
->
dev
,
"no fields in the report: %d
\n
"
,
report
->
maxfield
);
return
-
ENODEV
;
}
axff
=
kzalloc
(
sizeof
(
struct
axff_device
),
GFP_KERNEL
);
if
(
!
axff
)
return
-
ENOMEM
;
set_bit
(
FF_RUMBLE
,
dev
->
ffbit
);
error
=
input_ff_create_memless
(
dev
,
axff
,
axff_play
);
if
(
error
)
goto
err_free_mem
;
axff
->
report
=
report
;
axff
->
report
->
field
[
0
]
->
value
[
0
]
=
0x00
;
axff
->
report
->
field
[
1
]
->
value
[
0
]
=
0x00
;
axff
->
report
->
field
[
2
]
->
value
[
0
]
=
0x00
;
axff
->
report
->
field
[
3
]
->
value
[
0
]
=
0x00
;
usbhid_submit_report
(
hid
,
axff
->
report
,
USB_DIR_OUT
);
dev_info
(
&
hid
->
dev
,
"Force Feedback for ACRUX game controllers by Sergei Kolzun<x0r@dv-life.ru>
\n
"
);
return
0
;
err_free_mem:
kfree
(
axff
);
return
error
;
}
static
int
ax_probe
(
struct
hid_device
*
hdev
,
const
struct
hid_device_id
*
id
)
{
int
error
;
dev_dbg
(
&
hdev
->
dev
,
"ACRUX HID hardware probe..."
);
error
=
hid_parse
(
hdev
);
if
(
error
)
{
dev_err
(
&
hdev
->
dev
,
"parse failed
\n
"
);
return
error
;
}
error
=
hid_hw_start
(
hdev
,
HID_CONNECT_DEFAULT
&
~
HID_CONNECT_FF
);
if
(
error
)
{
dev_err
(
&
hdev
->
dev
,
"hw start failed
\n
"
);
return
error
;
}
error
=
axff_init
(
hdev
);
if
(
error
)
{
/*
* Do not fail device initialization completely as device
* may still be partially operable, just warn.
*/
dev_warn
(
&
hdev
->
dev
,
"Failed to enable force feedback support, error: %d
\n
"
,
error
);
}
return
0
;
}
static
const
struct
hid_device_id
ax_devices
[]
=
{
{
HID_USB_DEVICE
(
USB_VENDOR_ID_ACRUX
,
0x0802
),
},
{
}
};
MODULE_DEVICE_TABLE
(
hid
,
ax_devices
);
static
struct
hid_driver
ax_driver
=
{
.
name
=
"acrux"
,
.
id_table
=
ax_devices
,
.
probe
=
ax_probe
,
};
static
int
__init
ax_init
(
void
)
{
return
hid_register_driver
(
&
ax_driver
);
}
static
void
__exit
ax_exit
(
void
)
{
hid_unregister_driver
(
&
ax_driver
);
}
module_init
(
ax_init
);
module_exit
(
ax_exit
);
MODULE_AUTHOR
(
"Sergei Kolzun"
);
MODULE_DESCRIPTION
(
"Force feedback support for ACRUX game controllers"
);
MODULE_LICENSE
(
"GPL"
);
drivers/hid/hid-core.c
View file @
35d03a0d
...
...
@@ -1239,6 +1239,9 @@ static const struct hid_device_id hid_blacklist[] = {
{
HID_USB_DEVICE
(
USB_VENDOR_ID_3M
,
USB_DEVICE_ID_3M2256
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_A4TECH
,
USB_DEVICE_ID_A4TECH_WCP32PU
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_A4TECH
,
USB_DEVICE_ID_A4TECH_X5_005D
)
},
#if defined(CONFIG_HID_ACRUX_FF) || defined(CONFIG_HID_ACRUX_FF_MODULE)
{
HID_USB_DEVICE
(
USB_VENDOR_ID_ACRUX
,
0x0802
)
},
#endif
{
HID_USB_DEVICE
(
USB_VENDOR_ID_APPLE
,
USB_DEVICE_ID_APPLE_ATV_IRCONTROL
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_APPLE
,
USB_DEVICE_ID_APPLE_IRCONTROL4
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_APPLE
,
USB_DEVICE_ID_APPLE_MIGHTYMOUSE
)
},
...
...
drivers/hid/hid-ids.h
View file @
35d03a0d
...
...
@@ -34,7 +34,9 @@
#define USB_DEVICE_ID_ACECAD_FLAIR 0x0004
#define USB_DEVICE_ID_ACECAD_302 0x0008
#define USB_VENDOR_ID_ADS_TECH 0x06e1
#define USB_VENDOR_ID_ACRUX 0x1a34
#define USB_VENDOR_ID_ADS_TECH 0x06e1
#define USB_DEVICE_ID_ADS_TECH_RADIO_SI470X 0xa155
#define USB_VENDOR_ID_AFATECH 0x15a4
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment