Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d6b92c2c authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid into next

Pull HID patches from Jiri Kosina:
 - RMI driver for Synaptics touchpads, by Benjamin Tissoires, Andrew
   Duggan and Jiri Kosina
 - cleanup of hid-sony driver and improved support for Sixaxis and
   Dualshock 4, by Frank Praznik
 - other usual small fixes and support for new device IDs

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid: (29 commits)
  HID: thingm: thingm_fwinfo[] doesn't need to be global
  HID: core: add two new usages for digitizer
  HID: hid-sensor-hub: new device id and quirk for STM Sensor hub
  HID: usbhid: enable NO_INIT_REPORTS quirk for Semico USB Keykoard
  HID: hid-sensor-hub: Set report quirk for Microsoft Surface
  HID: debug: add labels for HID Sensor Usages
  HID: uhid: Use kmemdup instead of kmalloc + memcpy
  HID: rmi: do not handle touchscreens through hid-rmi
  HID: quirk for Saitek RAT7 and MMO7 mices' mode button
  HID: core: fix validation of report id 0
  HID: rmi: fix masks for x and w_x data
  HID: rmi: fix wrong struct field name
  HID: rmi: do not fetch more than 16 bytes in a query
  HID: rmi: check for the existence of some optional queries before reading query 12
  HID: i2c-hid: hid report descriptor retrieval changes
  HID: add missing hid usages
  HID: hid-sony - allow 3rd party INTEC controller to turn off all leds
  HID: sony: Add blink support to the Sixaxis and DualShock 4 LEDs
  HID: sony: Initialize the controller LEDs with a device ID value
  HID: sony: Use the controller Bluetooth MAC address as the unique value in the battery name string
  ...
parents 1aacb90e beea3f4a
Loading
Loading
Loading
Loading
+0 −23
Original line number Diff line number Diff line
What:		/sys/class/leds/blink1::<serial>/rgb
Date:		January 2013
Contact:	Vivien Didelot <vivien.didelot@savoirfairelinux.com>
Description:	The ThingM blink1 is an USB RGB LED. The color notation is
		3-byte hexadecimal. Read this attribute to get the last set
		color. Write the 24-bit hexadecimal color to change the current
		LED color. The default color is full white (0xFFFFFF).
		For instance, set the color to green with: echo 00FF00 > rgb

What:		/sys/class/leds/blink1::<serial>/fade
Date:		January 2013
Contact:	Vivien Didelot <vivien.didelot@savoirfairelinux.com>
Description:	This attribute allows to set a fade time in milliseconds for
		the next color change. Read the attribute to know the current
		fade time. The default value is set to 0 (no fade time). For
		instance, set a fade time of 2 seconds with: echo 2000 > fade

What:		/sys/class/leds/blink1::<serial>/play
Date:		January 2013
Contact:	Vivien Didelot <vivien.didelot@savoirfairelinux.com>
Description:	This attribute is used to play/pause the light patterns. Write 1
		to start playing, 0 to stop. Reading this attribute returns the
		current playing status.
+12 −1
Original line number Diff line number Diff line
@@ -608,7 +608,10 @@ config HID_SAITEK
	Support for Saitek devices that are not fully compliant with the
	HID standard.

	Currently only supports the PS1000 controller.
	Supported devices:
	- PS1000 Dual Analog Pad
	- R.A.T.7 Gaming Mouse
	- M.M.O.7 Gaming Mouse

config HID_SAMSUNG
	tristate "Samsung InfraRed remote control or keyboards"
@@ -657,6 +660,14 @@ config HID_SUNPLUS
	---help---
	Support for Sunplus wireless desktop.

config HID_RMI
	tristate "Synaptics RMI4 device support"
	depends on HID
	---help---
	Support for Synaptics RMI4 touchpads.
	Say Y here if you have a Synaptics RMI4 touchpads over i2c-hid or usbhid
	and want support for its special functionalities.

config HID_GREENASIA
	tristate "GreenAsia (Product ID 0x12) game controller support"
	depends on HID
+1 −0
Original line number Diff line number Diff line
@@ -97,6 +97,7 @@ obj-$(CONFIG_HID_ROCCAT) += hid-roccat.o hid-roccat-common.o \
	hid-roccat-arvo.o hid-roccat-isku.o hid-roccat-kone.o \
	hid-roccat-koneplus.o hid-roccat-konepure.o hid-roccat-kovaplus.o \
	hid-roccat-lua.o hid-roccat-pyra.o hid-roccat-ryos.o hid-roccat-savu.o
obj-$(CONFIG_HID_RMI)		+= hid-rmi.o
obj-$(CONFIG_HID_SAITEK)	+= hid-saitek.o
obj-$(CONFIG_HID_SAMSUNG)	+= hid-samsung.o
obj-$(CONFIG_HID_SMARTJOYPLUS)	+= hid-sjoy.o
+23 −1
Original line number Diff line number Diff line
@@ -779,6 +779,14 @@ static int hid_scan_report(struct hid_device *hid)
	    (hid->group == HID_GROUP_MULTITOUCH))
		hid->group = HID_GROUP_MULTITOUCH_WIN_8;

	/*
	* Vendor specific handlings
	*/
	if ((hid->vendor == USB_VENDOR_ID_SYNAPTICS) &&
	    (hid->group == HID_GROUP_GENERIC))
		/* hid-rmi should take care of them, not hid-generic */
		hid->group = HID_GROUP_RMI;

	vfree(parser);
	return 0;
}
@@ -842,7 +850,17 @@ struct hid_report *hid_validate_values(struct hid_device *hid,
	 * ->numbered being checked, which may not always be the case when
	 * drivers go to access report values.
	 */
	if (id == 0) {
		/*
		 * Validating on id 0 means we should examine the first
		 * report in the list.
		 */
		report = list_entry(
				hid->report_enum[type].report_list.next,
				struct hid_report, list);
	} else {
		report = hid->report_enum[type].report_id_hash[id];
	}
	if (!report) {
		hid_err(hid, "missing %s %u\n", hid_report_names[type], id);
		return NULL;
@@ -1868,7 +1886,11 @@ static const struct hid_device_id hid_have_special_driver[] = {
	{ HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_RYOS_MK_PRO) },
	{ HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_SAVU) },
#endif
#if IS_ENABLED(CONFIG_HID_SAITEK)
	{ HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_PS1000) },
	{ HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RAT7) },
	{ HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_MMO7) },
#endif
	{ HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_IR_REMOTE) },
	{ HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_WIRELESS_KBD_MOUSE) },
	{ HID_USB_DEVICE(USB_VENDOR_ID_SKYCABLE, USB_DEVICE_ID_SKYCABLE_WIRELESS_PRESENTER) },
+91 −0
Original line number Diff line number Diff line
@@ -165,6 +165,8 @@ static const struct hid_usage_entry hid_usage_table[] = {
    {0, 0x53, "DeviceIndex"},
    {0, 0x54, "ContactCount"},
    {0, 0x55, "ContactMaximumNumber"},
    {0, 0x5A, "SecondaryBarrelSwitch"},
    {0, 0x5B, "TransducerSerialNumber"},
  { 15, 0, "PhysicalInterfaceDevice" },
    {0, 0x00, "Undefined"},
    {0, 0x01, "Physical_Interface_Device"},
@@ -272,6 +274,85 @@ static const struct hid_usage_entry hid_usage_table[] = {
    {0, 0xAA, "Shared_Parameter_Blocks"},
    {0, 0xAB, "Create_New_Effect_Report"},
    {0, 0xAC, "RAM_Pool_Available"},
  {  0x20, 0, "Sensor" },
    { 0x20, 0x01, "Sensor" },
    { 0x20, 0x10, "Biometric" },
      { 0x20, 0x11, "BiometricHumanPresence" },
      { 0x20, 0x12, "BiometricHumanProximity" },
      { 0x20, 0x13, "BiometricHumanTouch" },
    { 0x20, 0x20, "Electrical" },
      { 0x20, 0x21, "ElectricalCapacitance" },
      { 0x20, 0x22, "ElectricalCurrent" },
      { 0x20, 0x23, "ElectricalPower" },
      { 0x20, 0x24, "ElectricalInductance" },
      { 0x20, 0x25, "ElectricalResistance" },
      { 0x20, 0x26, "ElectricalVoltage" },
      { 0x20, 0x27, "ElectricalPoteniometer" },
      { 0x20, 0x28, "ElectricalFrequency" },
      { 0x20, 0x29, "ElectricalPeriod" },
    { 0x20, 0x30, "Environmental" },
      { 0x20, 0x31, "EnvironmentalAtmosphericPressure" },
      { 0x20, 0x32, "EnvironmentalHumidity" },
      { 0x20, 0x33, "EnvironmentalTemperature" },
      { 0x20, 0x34, "EnvironmentalWindDirection" },
      { 0x20, 0x35, "EnvironmentalWindSpeed" },
    { 0x20, 0x40, "Light" },
      { 0x20, 0x41, "LightAmbientLight" },
      { 0x20, 0x42, "LightConsumerInfrared" },
    { 0x20, 0x50, "Location" },
      { 0x20, 0x51, "LocationBroadcast" },
      { 0x20, 0x52, "LocationDeadReckoning" },
      { 0x20, 0x53, "LocationGPS" },
      { 0x20, 0x54, "LocationLookup" },
      { 0x20, 0x55, "LocationOther" },
      { 0x20, 0x56, "LocationStatic" },
      { 0x20, 0x57, "LocationTriangulation" },
    { 0x20, 0x60, "Mechanical" },
      { 0x20, 0x61, "MechanicalBooleanSwitch" },
      { 0x20, 0x62, "MechanicalBooleanSwitchArray" },
      { 0x20, 0x63, "MechanicalMultivalueSwitch" },
      { 0x20, 0x64, "MechanicalForce" },
      { 0x20, 0x65, "MechanicalPressure" },
      { 0x20, 0x66, "MechanicalStrain" },
      { 0x20, 0x67, "MechanicalWeight" },
      { 0x20, 0x68, "MechanicalHapticVibrator" },
      { 0x20, 0x69, "MechanicalHallEffectSwitch" },
    { 0x20, 0x70, "Motion" },
      { 0x20, 0x71, "MotionAccelerometer1D" },
      { 0x20, 0x72, "MotionAccelerometer2D" },
      { 0x20, 0x73, "MotionAccelerometer3D" },
      { 0x20, 0x74, "MotionGyrometer1D" },
      { 0x20, 0x75, "MotionGyrometer2D" },
      { 0x20, 0x76, "MotionGyrometer3D" },
      { 0x20, 0x77, "MotionMotionDetector" },
      { 0x20, 0x78, "MotionSpeedometer" },
      { 0x20, 0x79, "MotionAccelerometer" },
      { 0x20, 0x7A, "MotionGyrometer" },
    { 0x20, 0x80, "Orientation" },
      { 0x20, 0x81, "OrientationCompass1D" },
      { 0x20, 0x82, "OrientationCompass2D" },
      { 0x20, 0x83, "OrientationCompass3D" },
      { 0x20, 0x84, "OrientationInclinometer1D" },
      { 0x20, 0x85, "OrientationInclinometer2D" },
      { 0x20, 0x86, "OrientationInclinometer3D" },
      { 0x20, 0x87, "OrientationDistance1D" },
      { 0x20, 0x88, "OrientationDistance2D" },
      { 0x20, 0x89, "OrientationDistance3D" },
      { 0x20, 0x8A, "OrientationDeviceOrientation" },
      { 0x20, 0x8B, "OrientationCompass" },
      { 0x20, 0x8C, "OrientationInclinometer" },
      { 0x20, 0x8D, "OrientationDistance" },
    { 0x20, 0x90, "Scanner" },
      { 0x20, 0x91, "ScannerBarcode" },
      { 0x20, 0x91, "ScannerRFID" },
      { 0x20, 0x91, "ScannerNFC" },
    { 0x20, 0xA0, "Time" },
      { 0x20, 0xA1, "TimeAlarmTimer" },
      { 0x20, 0xA2, "TimeRealTimeClock" },
    { 0x20, 0xE0, "Other" },
      { 0x20, 0xE1, "OtherCustom" },
      { 0x20, 0xE2, "OtherGeneric" },
      { 0x20, 0xE3, "OtherGenericEnumerator" },
  { 0x84, 0, "Power Device" },
    { 0x84, 0x02, "PresentStatus" },
    { 0x84, 0x03, "ChangeStatus" },
@@ -855,6 +936,16 @@ static const char *keys[KEY_MAX + 1] = {
	[KEY_KBDILLUMDOWN] = "KbdIlluminationDown",
	[KEY_KBDILLUMUP] = "KbdIlluminationUp",
	[KEY_SWITCHVIDEOMODE] = "SwitchVideoMode",
	[KEY_BUTTONCONFIG] = "ButtonConfig",
	[KEY_TASKMANAGER] = "TaskManager",
	[KEY_JOURNAL] = "Journal",
	[KEY_CONTROLPANEL] = "ControlPanel",
	[KEY_APPSELECT] = "AppSelect",
	[KEY_SCREENSAVER] = "ScreenSaver",
	[KEY_VOICECOMMAND] = "VoiceCommand",
	[KEY_BRIGHTNESS_MIN] = "BrightnessMin",
	[KEY_BRIGHTNESS_MAX] = "BrightnessMax",
	[KEY_BRIGHTNESS_AUTO] = "BrightnessAuto",
};

static const char *relatives[REL_MAX + 1] = {
Loading