hanwang
static void hanwang_parse_packet(struct hanwang *hanwang)
unsigned char *data = hanwang->data;
struct input_dev *input_dev = hanwang->dev;
struct usb_device *dev = hanwang->usbdev;
enum hanwang_tablet_type type = hanwang->features->type;
hanwang->current_tool = BTN_TOOL_PEN;
hanwang->current_id = STYLUS_DEVICE_ID;
hanwang->current_id = 0;
hanwang->current_tool, 0);
hanwang->current_id = 0;
hanwang->current_tool, 0);
hanwang->current_id = STYLUS_DEVICE_ID;
hanwang->current_tool = BTN_TOOL_PEN;
hanwang->current_id = ERASER_DEVICE_ID;
hanwang->current_tool = BTN_TOOL_RUBBER;
hanwang->current_id = 0;
input_report_abs(input_dev, ABS_MISC, hanwang->current_id);
hanwang->features->pid);
hanwang->current_id = PAD_DEVICE_ID;
input_report_abs(input_dev, ABS_MISC, hanwang->current_id);
struct hanwang *hanwang = urb->context;
struct usb_device *dev = hanwang->usbdev;
hanwang_parse_packet(hanwang);
struct hanwang *hanwang = input_get_drvdata(dev);
hanwang->irq->dev = hanwang->usbdev;
if (usb_submit_urb(hanwang->irq, GFP_KERNEL))
struct hanwang *hanwang = input_get_drvdata(dev);
usb_kill_urb(hanwang->irq);
static bool get_features(struct usb_device *dev, struct hanwang *hanwang)
hanwang->features = &features_array[i];
struct hanwang *hanwang;
hanwang = kzalloc_obj(*hanwang);
if (!hanwang || !input_dev) {
if (!get_features(dev, hanwang)) {
hanwang->data = usb_alloc_coherent(dev, hanwang->features->pkg_len,
GFP_KERNEL, &hanwang->data_dma);
if (!hanwang->data) {
hanwang->irq = usb_alloc_urb(0, GFP_KERNEL);
if (!hanwang->irq) {
hanwang->usbdev = dev;
hanwang->dev = input_dev;
usb_make_path(dev, hanwang->phys, sizeof(hanwang->phys));
strlcat(hanwang->phys, "/input0", sizeof(hanwang->phys));
strscpy(hanwang->name, hanwang->features->name, sizeof(hanwang->name));
input_dev->name = hanwang->name;
input_dev->phys = hanwang->phys;
input_set_drvdata(input_dev, hanwang);
0, hanwang->features->max_x, 4, 0);
0, hanwang->features->max_y, 4, 0);
0, hanwang->features->max_tilt_x, 0, 0);
0, hanwang->features->max_tilt_y, 0, 0);
0, hanwang->features->max_pressure, 0, 0);
usb_fill_int_urb(hanwang->irq, dev,
hanwang->data, hanwang->features->pkg_len,
hanwang_irq, hanwang, endpoint->bInterval);
hanwang->irq->transfer_dma = hanwang->data_dma;
hanwang->irq->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
error = input_register_device(hanwang->dev);
usb_set_intfdata(intf, hanwang);
fail3: usb_free_urb(hanwang->irq);
fail2: usb_free_coherent(dev, hanwang->features->pkg_len,
hanwang->data, hanwang->data_dma);
kfree(hanwang);
struct hanwang *hanwang = usb_get_intfdata(intf);
input_unregister_device(hanwang->dev);
usb_free_urb(hanwang->irq);
hanwang->features->pkg_len, hanwang->data,
hanwang->data_dma);
kfree(hanwang);