static void g15_led_mr_brightness_set(struct led_classdev *led_cdev, enum led_brightness value) { g15_led_set(led_cdev, value, G15_LED_MR); }
static int g15_input_get_keycode(struct input_dev * dev, unsigned int scancode, unsigned int * keycode) { int retval; #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37) struct input_keymap_entry ke = { .flags = 0, .len = sizeof(scancode), .index = scancode, .scancode = { scancode }, }; retval = input_get_keycode(dev, &ke); *keycode = ke.keycode; #else retval = input_get_keycode(dev, scancode, keycode); #endif return retval; } static void g15_msg_send(struct hid_device *hdev, u8 msg, u8 value1, u8 value2) { struct g15_data *data = hid_get_g15data(hdev); data->led_report->field[0]->value[0] = msg; data->led_report->field[0]->value[1] = value1; data->led_report->field[0]->value[2] = value2; usbhid_submit_report(hdev, data->led_report, USB_DIR_OUT); } static void g15_led_set(struct led_classdev *led_cdev, enum led_brightness value, int led_num) { struct device *dev; struct hid_device *hdev; struct g15_data *data; u8 mask; /* Get the device associated with the led */ dev = led_cdev->dev->parent; /* Get the hid associated with the device */ hdev = container_of(dev, struct hid_device, dev); /* Get the underlying data value */ data = hid_get_g15data(hdev); mask = 0x01<<led_num; if (value) data->led |= mask; else data->led &= ~mask; g15_msg_send(hdev, 0x04, ~(data->led), 0); } static void g15_led_m1_brightness_set(struct led_classdev *led_cdev, enum led_brightness value) { g15_led_set(led_cdev, value, G15_LED_M1); }