rotary: modified Hall ic event value for TMWC-824
authorsungmin ha <sungmin82.ha@samsung.com>
Tue, 28 Apr 2015 08:12:42 +0000 (17:12 +0900)
committersungmin ha <sungmin82.ha@samsung.com>
Tue, 28 Apr 2015 08:14:02 +0000 (17:14 +0900)
Change-Id: Ibd86e5c97839ea90383797096ed2c887a703e8b7
Signed-off-by: sungmin ha <sungmin82.ha@samsung.com>
drivers/maru/maru_virtio_rotary.c

index 7364be6a19ce8e9b4f34e0e0ee4bf241cb6e9b2d..bc5cc5f3777776bd40a9bdf538e9be9be777667b 100755 (executable)
@@ -69,7 +69,6 @@ struct virtio_rotary *vrtr;
 
 static int last_pos; /* 0 ~ 360 */
 static int last_detent;
-static int status; /* 0 ~ 2 */
 
 static struct virtio_device_id id_table[] = {
        { VIRTIO_ID_ROTARY, VIRTIO_DEV_ANY_ID },
@@ -96,9 +95,7 @@ static void vq_rotary_handler(struct virtqueue *vq)
        void *data;
        struct rotary_event event;
 
-       int i = 0;
        int pos = 0;
-       int value = 0;
 
        data = virtqueue_get_buf(vq, &len);
        if (!data) {
@@ -107,9 +104,7 @@ static void vq_rotary_handler(struct virtqueue *vq)
        }
 
        while (1) {
-               memcpy(&event,
-                               &vrtr->event[vqidx],
-                               sizeof(struct rotary_event));
+               memcpy(&event, &vrtr->event[vqidx], sizeof(struct rotary_event));
 
                event.delta %= 360;
                if (event.delta == 0) {
@@ -122,55 +117,30 @@ static void vq_rotary_handler(struct virtqueue *vq)
                        "rotary event: vqidx(%d), event.delta(%d), pos(%d)\n",
                        vqidx, event.delta, pos);
 
-               if (event.delta > 0) { /* CW */
-                       for (i = 0; i < event.delta; i++) {
-                               value = last_pos + i;
-                               if ((value % DETENT_UNIT == 0) && (get_rotary_pos(value) != last_detent)) {
-                                       status++;
-                                       status %= 3; /* 0->1->2->0 .. */
-
-                                       last_detent = get_rotary_pos(value);
-
-                                       VR_LOG(KERN_INFO,
-                                               "event: delta(%d), detent(%d), status(%d)\n",
-                                               event.delta, last_detent, status);
-
-                                       input_report_rel(vrtr->idev, REL_X, 0);
-                                       input_report_rel(vrtr->idev, REL_Y, 0);
-                                       input_report_rel(vrtr->idev, REL_WHEEL, status + 1);
-                                       input_sync(vrtr->idev);
+               if ((pos % DETENT_UNIT) == 0) {
+                       input_report_rel(vrtr->idev, REL_WHEEL, 1);
+                       if (get_rotary_pos(pos) != last_detent) {
+                               last_detent = get_rotary_pos(pos);
+                               if (event.delta > 0) {
+                                       input_report_rel(vrtr->idev, REL_WHEEL, 2);
+                               } else {
+                                       input_report_rel(vrtr->idev, REL_WHEEL, -2);
                                }
+                       } else {
+                               input_report_rel(vrtr->idev, REL_WHEEL, -1);
                        }
-               } else { /* CCW */
-                       for (i = 0; i > event.delta; i--) {
-                               value = last_pos + i;
-                               if ((value % DETENT_UNIT == 0) && (get_rotary_pos(value) != last_detent)) {
-                                       status--;
-                                       status = REMAINDER(status, 3); /* 0->2->1->0 .. */
-
-                                       last_detent = get_rotary_pos(value);
-
-                                       VR_LOG(KERN_INFO,
-                                               "event: delta(%d), detent(%d), status(%d)\n",
-                                               event.delta, last_detent, status);
-
-                                       input_report_rel(vrtr->idev, REL_X, 0);
-                                       input_report_rel(vrtr->idev, REL_Y, 0);
-                                       input_report_rel(vrtr->idev, REL_WHEEL, status + 1);
-                                       input_sync(vrtr->idev);
-                               }
+                       input_sync(vrtr->idev);
 
-                       }
+                       VR_LOG(KERN_INFO, "event: delta(%d), detent(%d)\n", event.delta, last_detent);
                }
 
                last_pos = pos;
 
-               memset(&vrtr->event[vqidx],
-                               0x00,
-                               sizeof(struct rotary_event));
+               memset(&vrtr->event[vqidx], 0x00, sizeof(struct rotary_event));
                vqidx++;
-               if (vqidx == ROTARY_BUF_SIZE)
+               if (vqidx == ROTARY_BUF_SIZE) {
                        vqidx = 0;
+               }
        }
        err = virtqueue_add_inbuf(vq,
                                                vrtr->sg,