From: giwoong.kim Date: Tue, 18 Dec 2012 10:52:39 +0000 (+0900) Subject: touch: remove 'goto' statement X-Git-Tag: 2.2.1_release^2~59 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=24f40be8933e10b92f8f5f2fbac12b200daed11b;p=sdk%2Femulator%2Femulator-kernel.git touch: remove 'goto' statement Goto statement must not be used. Signed-off-by: GiWoong Kim --- diff --git a/drivers/maru/maru_usb_touchscreen.c b/drivers/maru/maru_usb_touchscreen.c index 3f848e0ea4c8..7f88794858a7 100644 --- a/drivers/maru/maru_usb_touchscreen.c +++ b/drivers/maru/maru_usb_touchscreen.c @@ -29,6 +29,7 @@ * */ + #include #include #include @@ -75,18 +76,28 @@ static void emul_touchscreen_sys_irq(struct urb *urb) int id = packet->z; switch (urb->status) { - case 0: - /* success */ - break; - case -ECONNRESET: - case -ENOENT: - case -ESHUTDOWN: - /* this urb is terminated, clean up */ - dbg("%s - urb shutting down with status: %d", __func__, urb->status); - return; - default: - dbg("%s - nonzero urb status received: %d", __func__, urb->status); - goto exit; + case 0: + /* success */ + break; + case -ECONNRESET: + case -ENOENT: + case -ESHUTDOWN: + /* this urb is terminated, clean up */ + dbg("%s - urb shutting down with status: %d", + __func__, urb->status); + return; + + default: + dbg("%s - nonzero urb status received: %d", + __func__, urb->status); + + usb_mark_last_busy(usb_ts->usbdev); + retval = usb_submit_urb(urb, GFP_ATOMIC); + if (retval) { + err("%s - usb_submit_urb failed with result %d", + __func__, retval); + } + return; } /* Multi-touch Protocol B */ @@ -97,24 +108,30 @@ static void emul_touchscreen_sys_irq(struct urb *urb) input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR, 5); input_report_abs(input_dev, ABS_MT_POSITION_X, packet->x); input_report_abs(input_dev, ABS_MT_POSITION_Y, packet->y); - //printk(KERN_INFO "!!pressed x=%d, y=%d, z=%d", - //packet->x, packet->y, packet->z); + +#if 0 + printk(KERN_INFO "pressed x=%d, y=%d, z=%d", + packet->x, packet->y, packet->z); +#endif } else { /* release */ input_mt_slot(input_dev, id); input_mt_report_slot_state(input_dev, MT_TOOL_FINGER, false); - //printk(KERN_INFO "!!released x=%d, y=%d, z=%d", - //packet->x, packet->y, packet->z); + +#if 0 + printk(KERN_INFO "!!released x=%d, y=%d, z=%d", + packet->x, packet->y, packet->z); +#endif } input_sync(input_dev); - exit: usb_mark_last_busy(usb_ts->usbdev); retval = usb_submit_urb(urb, GFP_ATOMIC); if (retval) { - err("%s - usb_submit_urb failed with result %d", __func__, retval); + err("%s - usb_submit_urb failed with result %d", + __func__, retval); } } @@ -170,23 +187,34 @@ static int emul_touchscreen_probe(struct usb_interface *intf, const struct usb_d usb_ts = kzalloc(sizeof(struct emul_touchscreen), GFP_KERNEL); if (!usb_ts) { - goto fail1; + input_free_device(usb_ts->emuldev); + kfree(usb_ts); + return error; } usb_ts->usbdev = interface_to_usbdev(intf); - usb_ts->data = usb_alloc_coherent(usb_ts->usbdev, 10, GFP_KERNEL, &usb_ts->data_dma); + usb_ts->data = usb_alloc_coherent(usb_ts->usbdev, + 10, GFP_KERNEL, &usb_ts->data_dma); if (!usb_ts->data) { - goto fail1; + input_free_device(usb_ts->emuldev); + kfree(usb_ts); + return error; } usb_ts->irq = usb_alloc_urb(0, GFP_KERNEL); if (!usb_ts->irq) { - goto fail2; + usb_free_coherent(usb_ts->usbdev, + 10, usb_ts->data, usb_ts->data_dma); + input_free_device(usb_ts->emuldev); + kfree(usb_ts); + return error; } usb_ts->emuldev = input_allocate_device(); if (!usb_ts->emuldev) { - goto fail1; + input_free_device(usb_ts->emuldev); + kfree(usb_ts); + return error; } usb_ts->intf = intf; @@ -212,9 +240,9 @@ static int emul_touchscreen_probe(struct usb_interface *intf, const struct usb_d usb_ts->emuldev->keybit[BIT_WORD(BTN_TOUCH)] |= BIT_MASK(BTN_TOUCH); input_set_abs_params(usb_ts->emuldev, - ABS_X, 0, TOUCHSCREEN_RESOLUTION_X, 4, 0); + ABS_X, 0, /*TOUCHSCREEN_RESOLUTION_X*/0, 0, 0); input_set_abs_params(usb_ts->emuldev, - ABS_Y, 0, TOUCHSCREEN_RESOLUTION_Y, 4, 0); + ABS_Y, 0, /*TOUCHSCREEN_RESOLUTION_Y*/0, 0, 0); /* for multitouch */ input_mt_init_slots(usb_ts->emuldev, MAX_TRKID); @@ -228,25 +256,25 @@ static int emul_touchscreen_probe(struct usb_interface *intf, const struct usb_d ABS_MT_POSITION_Y, 0, TOUCHSCREEN_RESOLUTION_Y, 0, 0); usb_fill_int_urb(usb_ts->irq, usb_ts->usbdev, - usb_rcvintpipe(usb_ts->usbdev, endpoint->bEndpointAddress), - usb_ts->data, EMUL_TOUCHSCREEN_PACKET_LEN, - emul_touchscreen_sys_irq, usb_ts, endpoint->bInterval); + usb_rcvintpipe(usb_ts->usbdev, endpoint->bEndpointAddress), + usb_ts->data, EMUL_TOUCHSCREEN_PACKET_LEN, + emul_touchscreen_sys_irq, usb_ts, endpoint->bInterval); + usb_ts->irq->transfer_dma = usb_ts->data_dma; usb_ts->irq->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; error = input_register_device(usb_ts->emuldev); if (error) { - goto fail3; + usb_free_urb(usb_ts->irq); + usb_free_coherent(usb_ts->usbdev, + 10, usb_ts->data, usb_ts->data_dma); + input_free_device(usb_ts->emuldev); + kfree(usb_ts); + return error; } usb_set_intfdata(intf, usb_ts); return 0; - - fail3: usb_free_urb(usb_ts->irq); - fail2: usb_free_coherent(usb_ts->usbdev, 10, usb_ts->data, usb_ts->data_dma); - fail1: input_free_device(usb_ts->emuldev); - kfree(usb_ts); - return error; } static void emul_touchscreen_disconnect(struct usb_interface *intf) diff --git a/drivers/maru/maru_virtio_touchscreen.c b/drivers/maru/maru_virtio_touchscreen.c old mode 100755 new mode 100644 index a724bf6fc99e..07656fa346f6 --- a/drivers/maru/maru_virtio_touchscreen.c +++ b/drivers/maru/maru_virtio_touchscreen.c @@ -180,7 +180,9 @@ unsigned int finger_id = 0; /* finger id */ */ static void vq_touchscreen_callback(struct virtqueue *vq) { - //printk(KERN_INFO "vq touchscreen callback\n"); +#if 0 + printk(KERN_INFO "vq touchscreen callback\n"); +#endif recv_index = (unsigned int)virtqueue_get_buf(vt->vq, &len); if (recv_index == 0) { @@ -215,7 +217,9 @@ static void vq_touchscreen_callback(struct virtqueue *vq) input_sync(vt->idev); /* expose buffer to other end */ - err = virtqueue_add_buf(vt->vq, sg, 0, recv_index, (void *)recv_index, GFP_ATOMIC); + err = virtqueue_add_buf(vt->vq, sg, 0, + recv_index, (void *)recv_index, GFP_ATOMIC); + if (err < 0) { printk(KERN_ERR "failed to add buffer!\n"); } @@ -260,7 +264,6 @@ struct file_operations virtio_touchscreen_fops = { static int virtio_touchscreen_probe(struct virtio_device *vdev) { - //struct virtio_touchscreen *vt = NULL; int ret = 0; printk(KERN_INFO "virtio touchscreen driver is probed\n"); @@ -277,7 +280,10 @@ static int virtio_touchscreen_probe(struct virtio_device *vdev) vq_touchscreen_callback, "virtio-touchscreen-vq"); if (IS_ERR(vt->vq)) { ret = PTR_ERR(vt->vq); - goto fail1; + + kfree(vt); + vdev->priv = NULL; + return ret; } /* enable callback */ @@ -289,10 +295,15 @@ static int virtio_touchscreen_probe(struct virtio_device *vdev) for (index = 0; index < MAX_BUF_COUNT; index++) { sg_set_buf(&sg[index], &vbuf[index], sizeof(EmulTouchEvent)); - err = virtqueue_add_buf(vt->vq, sg, 0, index + 1, (void *)index + 1, GFP_ATOMIC); + err = virtqueue_add_buf(vt->vq, sg, 0, + index + 1, (void *)index + 1, GFP_ATOMIC); + if (err < 0) { printk(KERN_ERR "failed to add buffer\n"); - goto fail1; + + kfree(vt); + vdev->priv = NULL; + return ret; } } @@ -301,7 +312,10 @@ static int virtio_touchscreen_probe(struct virtio_device *vdev) if (!vt->idev) { printk(KERN_ERR "failed to allocate a input touchscreen device\n"); ret = -1; - goto fail1; + + kfree(vt); + vdev->priv = NULL; + return ret; } vt->idev->name = "Maru Virtio Touchscreen"; @@ -334,7 +348,12 @@ static int virtio_touchscreen_probe(struct virtio_device *vdev) if (ret) { printk(KERN_ERR "input touchscreen driver cannot registered\n"); ret = -1; - goto fail2; + + input_mt_destroy_slots(vt->idev); + input_free_device(vt->idev); + kfree(vt); + vdev->priv = NULL; + return ret; } #if 0 /* using a thread */ @@ -344,9 +363,13 @@ static int virtio_touchscreen_probe(struct virtio_device *vdev) if (IS_ERR(vt->thread)) { printk(KERN_ERR "unable to start the virtio touchscreen thread\n"); ret = PTR_ERR(vt->thread); - goto fail3; - } + input_mt_destroy_slots(vt->idev); + input_free_device(vt->idev); + kfree(vt); + vdev->priv = NULL; + return ret; + } #else /* using a callback */ virtqueue_kick(vt->vq); @@ -356,34 +379,25 @@ static int virtio_touchscreen_probe(struct virtio_device *vdev) #endif return 0; - -fail2: - input_mt_destroy_slots(vt->idev); - input_free_device(vt->idev); -fail1: - kfree(vt); - vdev->priv = NULL; - - return ret; } static void __devexit virtio_touchscreen_remove(struct virtio_device *vdev) { - virtio_touchscreen *vt = NULL; + virtio_touchscreen *vts = NULL; printk(KERN_INFO "virtio touchscreen driver is removed\n"); - vt = vdev->priv; + vts = vdev->priv; - kthread_stop(vt->thread); + kthread_stop(vts->thread); vdev->config->reset(vdev); /* reset device */ vdev->config->del_vqs(vdev); /* clean up the queues */ - input_unregister_device(vt->idev); - input_mt_destroy_slots(vt->idev); + input_unregister_device(vts->idev); + input_mt_destroy_slots(vts->idev); - kfree(vt); + kfree(vts); } MODULE_DEVICE_TABLE(virtio, id_table);