Lines Matching refs:xpad
23 * - ITO Takayuki for providing essential xpad information on his website
638 static int xpad_init_input(struct usb_xpad *xpad);
639 static void xpad_deinit_input(struct usb_xpad *xpad);
640 static void xpadone_ack_mode_report(struct usb_xpad *xpad, u8 seq_num);
651 static void xpad_process_packet(struct usb_xpad *xpad, u16 cmd, unsigned char *data)
653 struct input_dev *dev = xpad->dev;
655 if (!(xpad->mapping & MAP_STICKS_TO_NULL)) {
670 if (xpad->mapping & MAP_TRIGGERS_TO_BUTTONS) {
679 if (xpad->mapping & MAP_DPAD_TO_BUTTONS) {
721 static void xpad360_process_packet(struct usb_xpad *xpad, struct input_dev *dev,
729 if (xpad->mapping & MAP_DPAD_TO_BUTTONS) {
743 if (!(xpad->mapping & MAP_DPAD_TO_BUTTONS) ||
744 xpad->xtype == XTYPE_XBOX360W) {
768 if (!(xpad->mapping & MAP_STICKS_TO_NULL)) {
783 if (xpad->mapping & MAP_TRIGGERS_TO_BUTTONS) {
796 struct usb_xpad *xpad = container_of(work, struct usb_xpad, work);
799 if (xpad->pad_present) {
800 error = xpad_init_input(xpad);
803 dev_err(&xpad->dev->dev,
806 rcu_assign_pointer(xpad->x360w_dev, xpad->dev);
809 RCU_INIT_POINTER(xpad->x360w_dev, NULL);
815 xpad_deinit_input(xpad);
833 static void xpad360w_process_packet(struct usb_xpad *xpad, u16 cmd, unsigned char *data)
842 if (xpad->pad_present != present) {
843 xpad->pad_present = present;
844 schedule_work(&xpad->work);
853 dev = rcu_dereference(xpad->x360w_dev);
855 xpad360_process_packet(xpad, dev, cmd, &data[4]);
868 static void xpadone_process_packet(struct usb_xpad *xpad, u16 cmd, unsigned char *data)
870 struct input_dev *dev = xpad->dev;
880 xpadone_ack_mode_report(xpad, data[2]);
901 if (xpad->mapping & MAP_DPAD_TO_BUTTONS) {
922 if (!(xpad->mapping & MAP_STICKS_TO_NULL)) {
937 if (xpad->mapping & MAP_TRIGGERS_TO_BUTTONS) {
954 struct usb_xpad *xpad = urb->context;
955 struct device *dev = &xpad->intf->dev;
977 switch (xpad->xtype) {
979 xpad360_process_packet(xpad, xpad->dev, 0, xpad->idata);
982 xpad360w_process_packet(xpad, 0, xpad->idata);
985 xpadone_process_packet(xpad, 0, xpad->idata);
988 xpad_process_packet(xpad, 0, xpad->idata);
998 /* Callers must hold xpad->odata_lock spinlock */
999 static bool xpad_prepare_next_init_packet(struct usb_xpad *xpad)
1003 if (xpad->xtype != XTYPE_XBOXONE)
1007 while (xpad->init_seq < ARRAY_SIZE(xboxone_init_packets)) {
1008 init_packet = &xboxone_init_packets[xpad->init_seq++];
1011 init_packet->idVendor != xpad->dev->id.vendor)
1015 init_packet->idProduct != xpad->dev->id.product)
1019 memcpy(xpad->odata, init_packet->data, init_packet->len);
1020 xpad->irq_out->transfer_buffer_length = init_packet->len;
1023 xpad->odata[2] = xpad->odata_serial++;
1030 /* Callers must hold xpad->odata_lock spinlock */
1031 static bool xpad_prepare_next_out_packet(struct usb_xpad *xpad)
1037 if (xpad_prepare_next_init_packet(xpad))
1041 if (++xpad->last_out_packet >= XPAD_NUM_OUT_PACKETS)
1042 xpad->last_out_packet = 0;
1044 pkt = &xpad->out_packets[xpad->last_out_packet];
1046 dev_dbg(&xpad->intf->dev,
1048 __func__, xpad->last_out_packet);
1055 memcpy(xpad->odata, packet->data, packet->len);
1056 xpad->irq_out->transfer_buffer_length = packet->len;
1064 /* Callers must hold xpad->odata_lock spinlock */
1065 static int xpad_try_sending_next_out_packet(struct usb_xpad *xpad)
1069 if (!xpad->irq_out_active && xpad_prepare_next_out_packet(xpad)) {
1070 usb_anchor_urb(xpad->irq_out, &xpad->irq_out_anchor);
1071 error = usb_submit_urb(xpad->irq_out, GFP_ATOMIC);
1073 dev_err(&xpad->intf->dev,
1076 usb_unanchor_urb(xpad->irq_out);
1080 xpad->irq_out_active = true;
1088 struct usb_xpad *xpad = urb->context;
1089 struct device *dev = &xpad->intf->dev;
1094 spin_lock_irqsave(&xpad->odata_lock, flags);
1099 xpad->irq_out_active = xpad_prepare_next_out_packet(xpad);
1108 xpad->irq_out_active = false;
1117 if (xpad->irq_out_active) {
1118 usb_anchor_urb(urb, &xpad->irq_out_anchor);
1125 xpad->irq_out_active = false;
1129 spin_unlock_irqrestore(&xpad->odata_lock, flags);
1132 static int xpad_init_output(struct usb_interface *intf, struct usb_xpad *xpad,
1137 if (xpad->xtype == XTYPE_UNKNOWN)
1140 init_usb_anchor(&xpad->irq_out_anchor);
1142 xpad->odata = usb_alloc_coherent(xpad->udev, XPAD_PKT_LEN,
1143 GFP_KERNEL, &xpad->odata_dma);
1144 if (!xpad->odata)
1147 spin_lock_init(&xpad->odata_lock);
1149 xpad->irq_out = usb_alloc_urb(0, GFP_KERNEL);
1150 if (!xpad->irq_out) {
1155 usb_fill_int_urb(xpad->irq_out, xpad->udev,
1156 usb_sndintpipe(xpad->udev, ep_irq_out->bEndpointAddress),
1157 xpad->odata, XPAD_PKT_LEN,
1158 xpad_irq_out, xpad, ep_irq_out->bInterval);
1159 xpad->irq_out->transfer_dma = xpad->odata_dma;
1160 xpad->irq_out->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1165 usb_free_coherent(xpad->udev, XPAD_PKT_LEN, xpad->odata, xpad->odata_dma);
1169 static void xpad_stop_output(struct usb_xpad *xpad)
1171 if (xpad->xtype != XTYPE_UNKNOWN) {
1172 if (!usb_wait_anchor_empty_timeout(&xpad->irq_out_anchor,
1174 dev_warn(&xpad->intf->dev,
1176 usb_kill_anchored_urbs(&xpad->irq_out_anchor);
1181 static void xpad_deinit_output(struct usb_xpad *xpad)
1183 if (xpad->xtype != XTYPE_UNKNOWN) {
1184 usb_free_urb(xpad->irq_out);
1185 usb_free_coherent(xpad->udev, XPAD_PKT_LEN,
1186 xpad->odata, xpad->odata_dma);
1190 static int xpad_inquiry_pad_presence(struct usb_xpad *xpad)
1193 &xpad->out_packets[XPAD_OUT_CMD_IDX];
1197 spin_lock_irqsave(&xpad->odata_lock, flags);
1215 xpad->last_out_packet = -1;
1216 retval = xpad_try_sending_next_out_packet(xpad);
1218 spin_unlock_irqrestore(&xpad->odata_lock, flags);
1223 static int xpad_start_xbox_one(struct usb_xpad *xpad)
1228 spin_lock_irqsave(&xpad->odata_lock, flags);
1235 xpad->init_seq = 0;
1236 retval = xpad_try_sending_next_out_packet(xpad);
1238 spin_unlock_irqrestore(&xpad->odata_lock, flags);
1243 static void xpadone_ack_mode_report(struct usb_xpad *xpad, u8 seq_num)
1247 &xpad->out_packets[XPAD_OUT_CMD_IDX];
1253 spin_lock_irqsave(&xpad->odata_lock, flags);
1261 xpad->last_out_packet = -1;
1262 xpad_try_sending_next_out_packet(xpad);
1264 spin_unlock_irqrestore(&xpad->odata_lock, flags);
1270 struct usb_xpad *xpad = input_get_drvdata(dev);
1271 struct xpad_output_packet *packet = &xpad->out_packets[XPAD_OUT_FF_IDX];
1283 spin_lock_irqsave(&xpad->odata_lock, flags);
1285 switch (xpad->xtype) {
1330 packet->data[2] = xpad->odata_serial++;
1346 dev_dbg(&xpad->dev->dev,
1347 "%s - rumble command sent to unsupported xpad type: %d\n",
1348 __func__, xpad->xtype);
1353 retval = xpad_try_sending_next_out_packet(xpad);
1356 spin_unlock_irqrestore(&xpad->odata_lock, flags);
1360 static int xpad_init_ff(struct usb_xpad *xpad)
1362 if (xpad->xtype == XTYPE_UNKNOWN)
1365 input_set_capability(xpad->dev, EV_FF, FF_RUMBLE);
1367 return input_ff_create_memless(xpad->dev, NULL, xpad_play_effect);
1371 static int xpad_init_ff(struct usb_xpad *xpad) { return 0; }
1383 struct usb_xpad *xpad;
1406 static void xpad_send_led_command(struct usb_xpad *xpad, int command)
1409 &xpad->out_packets[XPAD_OUT_LED_IDX];
1414 spin_lock_irqsave(&xpad->odata_lock, flags);
1416 switch (xpad->xtype) {
1443 xpad_try_sending_next_out_packet(xpad);
1445 spin_unlock_irqrestore(&xpad->odata_lock, flags);
1452 static void xpad_identify_controller(struct usb_xpad *xpad)
1454 led_set_brightness(&xpad->led->led_cdev, (xpad->pad_nr % 4) + 2);
1463 xpad_send_led_command(xpad_led->xpad, value);
1466 static int xpad_led_probe(struct usb_xpad *xpad)
1472 if (xpad->xtype != XTYPE_XBOX360 && xpad->xtype != XTYPE_XBOX360W)
1475 xpad->led = led = kzalloc(sizeof(struct xpad_led), GFP_KERNEL);
1479 xpad->pad_nr = ida_simple_get(&xpad_pad_seq, 0, 0, GFP_KERNEL);
1480 if (xpad->pad_nr < 0) {
1481 error = xpad->pad_nr;
1485 snprintf(led->name, sizeof(led->name), "xpad%d", xpad->pad_nr);
1486 led->xpad = xpad;
1493 error = led_classdev_register(&xpad->udev->dev, led_cdev);
1497 xpad_identify_controller(xpad);
1502 ida_simple_remove(&xpad_pad_seq, xpad->pad_nr);
1505 xpad->led = NULL;
1509 static void xpad_led_disconnect(struct usb_xpad *xpad)
1511 struct xpad_led *xpad_led = xpad->led;
1515 ida_simple_remove(&xpad_pad_seq, xpad->pad_nr);
1520 static int xpad_led_probe(struct usb_xpad *xpad) { return 0; }
1521 static void xpad_led_disconnect(struct usb_xpad *xpad) { }
1524 static int xpad_start_input(struct usb_xpad *xpad)
1528 if (usb_submit_urb(xpad->irq_in, GFP_KERNEL))
1531 if (xpad->xtype == XTYPE_XBOXONE) {
1532 error = xpad_start_xbox_one(xpad);
1534 usb_kill_urb(xpad->irq_in);
1542 static void xpad_stop_input(struct usb_xpad *xpad)
1544 usb_kill_urb(xpad->irq_in);
1547 static void xpad360w_poweroff_controller(struct usb_xpad *xpad)
1551 &xpad->out_packets[XPAD_OUT_CMD_IDX];
1553 spin_lock_irqsave(&xpad->odata_lock, flags);
1571 xpad->last_out_packet = -1;
1572 xpad_try_sending_next_out_packet(xpad);
1574 spin_unlock_irqrestore(&xpad->odata_lock, flags);
1577 static int xpad360w_start_input(struct usb_xpad *xpad)
1581 error = usb_submit_urb(xpad->irq_in, GFP_KERNEL);
1592 error = xpad_inquiry_pad_presence(xpad);
1594 usb_kill_urb(xpad->irq_in);
1601 static void xpad360w_stop_input(struct usb_xpad *xpad)
1603 usb_kill_urb(xpad->irq_in);
1606 flush_work(&xpad->work);
1611 struct usb_xpad *xpad = input_get_drvdata(dev);
1613 return xpad_start_input(xpad);
1618 struct usb_xpad *xpad = input_get_drvdata(dev);
1620 xpad_stop_input(xpad);
1625 struct usb_xpad *xpad = input_get_drvdata(input_dev);
1636 if (xpad->xtype == XTYPE_XBOXONE)
1651 static void xpad_deinit_input(struct usb_xpad *xpad)
1653 if (xpad->input_created) {
1654 xpad->input_created = false;
1655 xpad_led_disconnect(xpad);
1656 input_unregister_device(xpad->dev);
1660 static int xpad_init_input(struct usb_xpad *xpad)
1669 xpad->dev = input_dev;
1670 input_dev->name = xpad->name;
1671 input_dev->phys = xpad->phys;
1672 usb_to_input_id(xpad->udev, &input_dev->id);
1674 if (xpad->xtype == XTYPE_XBOX360W) {
1679 input_dev->dev.parent = &xpad->intf->dev;
1681 input_set_drvdata(input_dev, xpad);
1683 if (xpad->xtype != XTYPE_XBOX360W) {
1688 if (!(xpad->mapping & MAP_STICKS_TO_NULL)) {
1699 if (xpad->xtype == XTYPE_XBOX360 || xpad->xtype == XTYPE_XBOX360W ||
1700 xpad->xtype == XTYPE_XBOXONE) {
1708 if (xpad->mapping & MAP_DPAD_TO_BUTTONS) {
1720 if (!(xpad->mapping & MAP_DPAD_TO_BUTTONS) ||
1721 xpad->xtype == XTYPE_XBOX360W) {
1726 if (xpad->mapping & MAP_TRIGGERS_TO_BUTTONS) {
1735 error = xpad_init_ff(xpad);
1739 error = xpad_led_probe(xpad);
1743 error = input_register_device(xpad->dev);
1747 xpad->input_created = true;
1751 xpad_led_disconnect(xpad);
1762 struct usb_xpad *xpad;
1775 xpad = kzalloc(sizeof(struct usb_xpad), GFP_KERNEL);
1776 if (!xpad)
1779 usb_make_path(udev, xpad->phys, sizeof(xpad->phys));
1780 strlcat(xpad->phys, "/input0", sizeof(xpad->phys));
1782 xpad->idata = usb_alloc_coherent(udev, XPAD_PKT_LEN,
1783 GFP_KERNEL, &xpad->idata_dma);
1784 if (!xpad->idata) {
1789 xpad->irq_in = usb_alloc_urb(0, GFP_KERNEL);
1790 if (!xpad->irq_in) {
1795 xpad->udev = udev;
1796 xpad->intf = intf;
1797 xpad->mapping = xpad_device[i].mapping;
1798 xpad->xtype = xpad_device[i].xtype;
1799 xpad->name = xpad_device[i].name;
1800 INIT_WORK(&xpad->work, xpad_presence_work);
1802 if (xpad->xtype == XTYPE_UNKNOWN) {
1805 xpad->xtype = XTYPE_XBOX360W;
1807 xpad->xtype = XTYPE_XBOXONE;
1809 xpad->xtype = XTYPE_XBOX360;
1811 xpad->xtype = XTYPE_XBOX;
1815 xpad->mapping |= MAP_DPAD_TO_BUTTONS;
1817 xpad->mapping |= MAP_TRIGGERS_TO_BUTTONS;
1819 xpad->mapping |= MAP_STICKS_TO_NULL;
1822 if (xpad->xtype == XTYPE_XBOXONE &&
1852 error = xpad_init_output(intf, xpad, ep_irq_out);
1856 usb_fill_int_urb(xpad->irq_in, udev,
1858 xpad->idata, XPAD_PKT_LEN, xpad_irq_in,
1859 xpad, ep_irq_in->bInterval);
1860 xpad->irq_in->transfer_dma = xpad->idata_dma;
1861 xpad->irq_in->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1863 usb_set_intfdata(intf, xpad);
1865 if (xpad->xtype == XTYPE_XBOX360W) {
1873 error = xpad360w_start_input(xpad);
1885 error = xpad_init_input(xpad);
1892 xpad_deinit_output(xpad);
1894 usb_free_urb(xpad->irq_in);
1896 usb_free_coherent(udev, XPAD_PKT_LEN, xpad->idata, xpad->idata_dma);
1898 kfree(xpad);
1904 struct usb_xpad *xpad = usb_get_intfdata(intf);
1906 if (xpad->xtype == XTYPE_XBOX360W)
1907 xpad360w_stop_input(xpad);
1909 xpad_deinit_input(xpad);
1915 xpad_stop_output(xpad);
1917 xpad_deinit_output(xpad);
1919 usb_free_urb(xpad->irq_in);
1920 usb_free_coherent(xpad->udev, XPAD_PKT_LEN,
1921 xpad->idata, xpad->idata_dma);
1923 kfree(xpad);
1930 struct usb_xpad *xpad = usb_get_intfdata(intf);
1931 struct input_dev *input = xpad->dev;
1933 if (xpad->xtype == XTYPE_XBOX360W) {
1939 xpad360w_stop_input(xpad);
1947 if (auto_poweroff && xpad->pad_present)
1948 xpad360w_poweroff_controller(xpad);
1952 xpad_stop_input(xpad);
1956 xpad_stop_output(xpad);
1963 struct usb_xpad *xpad = usb_get_intfdata(intf);
1964 struct input_dev *input = xpad->dev;
1967 if (xpad->xtype == XTYPE_XBOX360W) {
1968 retval = xpad360w_start_input(xpad);
1972 retval = xpad_start_input(xpad);
1973 } else if (xpad->xtype == XTYPE_XBOXONE) {
1979 retval = xpad_start_xbox_one(xpad);
1988 .name = "xpad",