int razer_krait_init(struct razer_mouse *m, struct libusb_device *usbdev) { struct krait_private *priv; int err; priv = zalloc(sizeof(struct krait_private)); if (!priv) return -ENOMEM; priv->m = m; m->drv_data = priv; err = razer_usb_add_used_interface(m->usb_ctx, 0, 0); if (err) { free(priv); return err; } priv->profile.nr = 0; priv->profile.get_dpimapping = krait_get_dpimapping; priv->profile.set_dpimapping = krait_set_dpimapping; priv->profile.mouse = m; priv->dpimapping[0].nr = 0; priv->dpimapping[0].res[RAZER_DIM_0] = RAZER_MOUSE_RES_400DPI; priv->dpimapping[0].dimension_mask = (1 << RAZER_DIM_0); priv->dpimapping[0].change = NULL; priv->dpimapping[0].mouse = m; priv->dpimapping[1].nr = 1; priv->dpimapping[1].res[RAZER_DIM_0] = RAZER_MOUSE_RES_1600DPI; priv->dpimapping[1].dimension_mask = (1 << RAZER_DIM_0); priv->dpimapping[1].change = NULL; priv->dpimapping[1].mouse = m; priv->cur_dpimapping = &priv->dpimapping[1]; m->type = RAZER_MOUSETYPE_KRAIT; razer_generic_usb_gen_idstr(usbdev, NULL, "Krait", 1, NULL, m->idstr); m->commit = krait_commit; m->get_profiles = krait_get_profiles; m->supported_resolutions = krait_supported_resolutions; m->supported_dpimappings = krait_supported_dpimappings; return 0; }
int razer_naga_init(struct razer_mouse *m, struct libusb_device *usbdev) { struct naga_private *priv; struct libusb_device_descriptor desc; int i, fwver, err; const char *model; BUILD_BUG_ON(sizeof(struct naga_command) != 90); err = libusb_get_device_descriptor(usbdev, &desc); if (err) { razer_error("hw_naga: Failed to get device descriptor\n"); return -EIO; } priv = zalloc(sizeof(struct naga_private)); if (!priv) return -ENOMEM; priv->m = m; m->drv_data = priv; /* Need to wait some time between USB packets to * not confuse the firmware of some devices. */ razer_event_spacing_init(&priv->packet_spacing, 25); err = razer_usb_add_used_interface(m->usb_ctx, 0, 0); if (err) goto err_free; err = m->claim(m); if (err) { razer_error("hw_naga: Failed to claim device\n"); goto err_free; } /* Fetch firmware version */ fwver = naga_read_fw_ver(priv); if (fwver < 0) { err = fwver; goto err_release; } priv->fw_version = fwver; if (desc.idProduct == RAZER_NAGA_PID_EPIC) { if (priv->fw_version < NAGA_FW(0x01, 0x04)) { razer_error("hw_naga: The firmware version %d.%d of this Naga " "has known bugs. Please upgrade to version 1.04 or later.", NAGA_FW_MAJOR(priv->fw_version), NAGA_FW_MINOR(priv->fw_version)); m->flags |= RAZER_MOUSEFLG_SUGGESTFWUP; } } priv->frequency = RAZER_MOUSE_FREQ_1000HZ; priv->led_states[NAGA_LED_SCROLL] = RAZER_LED_ON; /* FIXME: not supported for Epic? */ priv->led_states[NAGA_LED_LOGO] = RAZER_LED_ON; if (desc.idProduct == RAZER_NAGA_PID_2014) priv->led_states[NAGA_LED_THUMB_GRID] = RAZER_LED_ON; else priv->led_states[NAGA_LED_THUMB_GRID] = RAZER_LED_UNKNOWN; priv->profile.nr = 0; priv->profile.get_freq = naga_get_freq; priv->profile.set_freq = naga_set_freq; priv->profile.get_dpimapping = naga_get_dpimapping; priv->profile.set_dpimapping = naga_set_dpimapping; priv->profile.mouse = m; if (desc.idProduct == RAZER_NAGA_PID_2014) { priv->nb_dpimappings = NAGA_8200_NR_DPIMAPPINGS; priv->command_init_resolution = naga_command_init_resolution_8200; } else { priv->nb_dpimappings = NAGA_5600_NR_DPIMAPPINGS; priv->command_init_resolution = naga_command_init_resolution_5600; } for (i = 0; i < priv->nb_dpimappings; i++) { priv->dpimapping[i].nr = (unsigned int)i; priv->dpimapping[i].res[RAZER_DIM_0] = (enum razer_mouse_res)((i + 1) * 100); if (priv->dpimapping[i].res[RAZER_DIM_0] == 1000) { priv->cur_dpimapping_X = &priv->dpimapping[i]; priv->cur_dpimapping_Y = &priv->dpimapping[i]; } priv->dpimapping[i].dimension_mask = (1 << RAZER_DIM_0); priv->dpimapping[i].change = NULL; priv->dpimapping[i].mouse = m; } razer_init_axes(&priv->axes[0], "X", RAZER_AXIS_INDEPENDENT_DPIMAPPING, "Y", RAZER_AXIS_INDEPENDENT_DPIMAPPING, "Scroll", 0); m->type = RAZER_MOUSETYPE_NAGA; switch (desc.idProduct) { default: case RAZER_NAGA_PID_CLASSIC: model = "Naga"; break; case RAZER_NAGA_PID_EPIC: model = "Naga Epic"; break; case RAZER_NAGA_PID_2012: model = "Naga 2012"; break; case RAZER_NAGA_PID_HEX: model = "Naga Hex"; break; case RAZER_NAGA_PID_2014: model = "Naga 2014"; break; } razer_generic_usb_gen_idstr(usbdev, m->usb_ctx->h, model, 1, NULL, m->idstr); m->get_fw_version = naga_get_fw_version; m->commit = naga_commit; m->global_get_leds = naga_get_leds; m->get_profiles = naga_get_profiles; m->supported_axes = naga_supported_axes; m->supported_resolutions = naga_supported_resolutions; m->supported_freqs = naga_supported_freqs; m->supported_dpimappings = naga_supported_dpimappings; err = naga_do_commit(priv); if (err) { razer_error("hw_naga: Failed to commit initial settings\n"); goto err_release; } m->release(m); return 0; err_release: m->release(m); err_free: free(priv); return err; }