drivers/hid/hid-lg.c

Source file repositories/reference/linux-study-clean/drivers/hid/hid-lg.c

File Facts

System
Linux kernel
Corpus path
drivers/hid/hid-lg.c
Extension
.c
Size
41390 bytes
Lines
947
Domain
Driver Families
Bucket
drivers/hid
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

if (*rsize == FG_RDESC_ORIG_SIZE) {
			hid_info(hdev,
				"fixing up Logitech Wingman Formula GP report descriptor\n");
			*rsize = sizeof(fg_rdesc_fixed);
			return fg_rdesc_fixed;
		} else {
			hid_info(hdev,
				"rdesc size test failed for formula gp\n");
		}
		break;


	case USB_DEVICE_ID_LOGITECH_WINGMAN_FFG:
		if (*rsize == FFG_RDESC_ORIG_SIZE) {
			hid_info(hdev,
				"fixing up Logitech Wingman Formula Force GP report descriptor\n");
			*rsize = sizeof(ffg_rdesc_fixed);
			return ffg_rdesc_fixed;
		}
		break;

	/* Several wheels report as this id when operating in emulation mode. */
	case USB_DEVICE_ID_LOGITECH_WHEEL:
		if (*rsize == DF_RDESC_ORIG_SIZE) {
			hid_info(hdev,
				"fixing up Logitech Driving Force report descriptor\n");
			*rsize = sizeof(df_rdesc_fixed);
			return df_rdesc_fixed;
		}
		break;

	case USB_DEVICE_ID_LOGITECH_MOMO_WHEEL:
		if (*rsize == MOMO_RDESC_ORIG_SIZE) {
			hid_info(hdev,
				"fixing up Logitech Momo Force (Red) report descriptor\n");
			*rsize = sizeof(momo_rdesc_fixed);
			return momo_rdesc_fixed;
		}
		break;

	case USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2:
		if (*rsize == MOMO2_RDESC_ORIG_SIZE) {
			hid_info(hdev,
				"fixing up Logitech Momo Racing Force (Black) report descriptor\n");
			*rsize = sizeof(momo2_rdesc_fixed);
			return momo2_rdesc_fixed;
		}
		break;

	case USB_DEVICE_ID_LOGITECH_VIBRATION_WHEEL:
		if (*rsize == FV_RDESC_ORIG_SIZE) {
			hid_info(hdev,
				"fixing up Logitech Formula Vibration report descriptor\n");
			*rsize = sizeof(fv_rdesc_fixed);
			return fv_rdesc_fixed;
		}
		break;

	case USB_DEVICE_ID_LOGITECH_DFP_WHEEL:
		if (*rsize == DFP_RDESC_ORIG_SIZE) {
			hid_info(hdev,
				"fixing up Logitech Driving Force Pro report descriptor\n");
			*rsize = sizeof(dfp_rdesc_fixed);
			return dfp_rdesc_fixed;
		}
		break;

	case USB_DEVICE_ID_LOGITECH_WII_WHEEL:
		if (*rsize >= 101 && rdesc[41] == 0x95 && rdesc[42] == 0x0B &&
				rdesc[47] == 0x05 && rdesc[48] == 0x09) {
			hid_info(hdev, "fixing up Logitech Speed Force Wireless report descriptor\n");
			rdesc[41] = 0x05;
			rdesc[42] = 0x09;
			rdesc[47] = 0x95;
			rdesc[48] = 0x0B;
		}
		break;
	}

	return rdesc;
}

#define lg_map_key_clear(c)	hid_map_usage_clear(hi, usage, bit, max, \
		EV_KEY, (c))

static int lg_ultrax_remote_mapping(struct hid_input *hi,
		struct hid_usage *usage, unsigned long **bit, int *max)
{
	if ((usage->hid & HID_USAGE_PAGE) != HID_UP_LOGIVENDOR)
		return 0;

Annotation

Implementation Notes