touch: remove 'goto' statement
authorgiwoong.kim <giwoong.kim@samsung.com>
Tue, 18 Dec 2012 10:52:39 +0000 (19:52 +0900)
committergiwoong.kim <giwoong.kim@samsung.com>
Fri, 21 Dec 2012 01:42:40 +0000 (10:42 +0900)
Goto statement must not be used.

Signed-off-by: GiWoong Kim <giwoong.kim@samsung.com>
drivers/maru/maru_usb_touchscreen.c
drivers/maru/maru_virtio_touchscreen.c [changed mode: 0755->0644]

index 3f848e0ea4c820a70455e9e35953cfe142258c78..7f88794858a7991e66bb48a5a1865d180783627f 100644 (file)
@@ -29,6 +29,7 @@
  *
  */
 
+
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/init.h>
@@ -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)
old mode 100755 (executable)
new mode 100644 (file)
index a724bf6..07656fa
@@ -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);