Esempio n. 1
0
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;
}
Esempio n. 2
0
File: hw_naga.c Progetto: ali/razer
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;
}