From: sungmin ha Date: Tue, 28 Apr 2015 08:12:42 +0000 (+0900) Subject: rotary: modified Hall ic event value for TMWC-824 X-Git-Tag: TizenStudio_2.0_p2.3.1~15 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9458bf6839aef7e9fa58c296fab4456ec5837b7d;p=sdk%2Femulator%2Femulator-kernel.git rotary: modified Hall ic event value for TMWC-824 Change-Id: Ibd86e5c97839ea90383797096ed2c887a703e8b7 Signed-off-by: sungmin ha --- diff --git a/drivers/maru/maru_virtio_rotary.c b/drivers/maru/maru_virtio_rotary.c index 7364be6a19ce..bc5cc5f37777 100755 --- a/drivers/maru/maru_virtio_rotary.c +++ b/drivers/maru/maru_virtio_rotary.c @@ -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,