Loading drivers/hid/hid-qvr.c +35 −30 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved. * Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -63,6 +63,7 @@ struct qvr_buf_index { uint8_t padding[60]; }; // struct must be 64 bit aligned struct qvr_sensor_t { uint64_t gts; uint64_t ats; Loading @@ -70,13 +71,19 @@ struct qvr_sensor_t { s32 gx; s32 gy; s32 gz; u32 gNumerator; u32 gDenominator; s32 ax; s32 ay; s32 az; u32 aNumerator; u32 aDenominator; s32 mx; s32 my; s32 mz; uint8_t padding[4]; u32 mNumerator; u32 mDenominator; uint8_t padding[44]; }; struct qvr_calib_data { Loading Loading @@ -105,7 +112,6 @@ struct qvr_external_sensor { static DECLARE_WAIT_QUEUE_HEAD(wq); static struct qvr_external_sensor qvr_external_sensor; static uint8_t DEBUG_ORIENTATION; static int read_calibration_len(void) { Loading Loading @@ -255,10 +261,6 @@ static int qvr_send_package_wrap(u8 *message, int msize, struct hid_device *hid) memcpy((void *)&imuData, (void *)message, sizeof(struct external_imu_format)); if (!sensor->ts_base) { if (imuData.gNumerator == 1 && imuData.aNumerator == 1) DEBUG_ORIENTATION = 1; else DEBUG_ORIENTATION = 0; pr_debug("qvr msize = %d reportID=%d padding=%d\n" "qvr version=%d numImu=%d nspip=%d pSize=%d\n" "qvr imuID=%d sampleID=%d temp=%d\n", Loading @@ -285,9 +287,9 @@ static int qvr_send_package_wrap(u8 *message, int msize, struct hid_device *hid) if (!sensor->ts_offset) sensor->ts_offset = imuData.gts0; index_buf = (struct qvr_buf_index *)((uintptr_t)sensor->vaddr + (sensor->vsize / 2) + (8 * sizeof(*sensor_buf))); sensor_buf = (struct qvr_sensor_t *)((uintptr_t)sensor->vaddr + (sensor->vsize / 2)); sensor_buf = (struct qvr_sensor_t *)((uintptr_t)sensor->vaddr + (sensor->vsize / 2) + sizeof(struct qvr_buf_index)); data = (struct qvr_sensor_t *)&(sensor_buf[buf_index]); if (sensor->ts_offset > imuData.gts0) Loading @@ -302,27 +304,30 @@ static int qvr_send_package_wrap(u8 *message, int msize, struct hid_device *hid) data->mts = data->ats; data->gts = data->ats; if (DEBUG_ORIENTATION == 1) { data->ax = -imuData.ax0; data->ax = imuData.ax0; data->ay = imuData.ay0; data->az = -imuData.az0; data->gx = -imuData.gx0; data->az = imuData.az0; data->gx = imuData.gx0; data->gy = imuData.gy0; data->gz = -imuData.gz0; data->mx = -imuData.my0; data->my = -imuData.mx0; data->mz = -imuData.mz0; } else { data->ax = -imuData.ay0; data->ay = -imuData.ax0; data->az = -imuData.az0; data->gx = -imuData.gy0; data->gy = -imuData.gx0; data->gz = -imuData.gz0; data->mx = -imuData.my0; data->my = -imuData.mx0; data->mz = -imuData.mz0; } data->gz = imuData.gz0; data->mx = imuData.my0; data->my = imuData.mx0; data->mz = imuData.mz0; data->ax = imuData.ax0; data->ay = imuData.ay0; data->az = imuData.az0; data->gx = imuData.gx0; data->gy = imuData.gy0; data->gz = imuData.gz0; data->mx = imuData.my0; data->my = imuData.mx0; data->mz = imuData.mz0; data->aNumerator = imuData.aNumerator; data->aDenominator = imuData.aDenominator; data->gNumerator = imuData.gNumerator; data->gDenominator = imuData.gDenominator; data->mNumerator = imuData.mNumerator; data->mDenominator = imuData.mDenominator; trace_qvr_recv_sensor("gyro", data->gts, data->gx, data->gy, data->gz); trace_qvr_recv_sensor("accel", data->ats, data->ax, data->ay, data->az); Loading Loading
drivers/hid/hid-qvr.c +35 −30 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved. * Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -63,6 +63,7 @@ struct qvr_buf_index { uint8_t padding[60]; }; // struct must be 64 bit aligned struct qvr_sensor_t { uint64_t gts; uint64_t ats; Loading @@ -70,13 +71,19 @@ struct qvr_sensor_t { s32 gx; s32 gy; s32 gz; u32 gNumerator; u32 gDenominator; s32 ax; s32 ay; s32 az; u32 aNumerator; u32 aDenominator; s32 mx; s32 my; s32 mz; uint8_t padding[4]; u32 mNumerator; u32 mDenominator; uint8_t padding[44]; }; struct qvr_calib_data { Loading Loading @@ -105,7 +112,6 @@ struct qvr_external_sensor { static DECLARE_WAIT_QUEUE_HEAD(wq); static struct qvr_external_sensor qvr_external_sensor; static uint8_t DEBUG_ORIENTATION; static int read_calibration_len(void) { Loading Loading @@ -255,10 +261,6 @@ static int qvr_send_package_wrap(u8 *message, int msize, struct hid_device *hid) memcpy((void *)&imuData, (void *)message, sizeof(struct external_imu_format)); if (!sensor->ts_base) { if (imuData.gNumerator == 1 && imuData.aNumerator == 1) DEBUG_ORIENTATION = 1; else DEBUG_ORIENTATION = 0; pr_debug("qvr msize = %d reportID=%d padding=%d\n" "qvr version=%d numImu=%d nspip=%d pSize=%d\n" "qvr imuID=%d sampleID=%d temp=%d\n", Loading @@ -285,9 +287,9 @@ static int qvr_send_package_wrap(u8 *message, int msize, struct hid_device *hid) if (!sensor->ts_offset) sensor->ts_offset = imuData.gts0; index_buf = (struct qvr_buf_index *)((uintptr_t)sensor->vaddr + (sensor->vsize / 2) + (8 * sizeof(*sensor_buf))); sensor_buf = (struct qvr_sensor_t *)((uintptr_t)sensor->vaddr + (sensor->vsize / 2)); sensor_buf = (struct qvr_sensor_t *)((uintptr_t)sensor->vaddr + (sensor->vsize / 2) + sizeof(struct qvr_buf_index)); data = (struct qvr_sensor_t *)&(sensor_buf[buf_index]); if (sensor->ts_offset > imuData.gts0) Loading @@ -302,27 +304,30 @@ static int qvr_send_package_wrap(u8 *message, int msize, struct hid_device *hid) data->mts = data->ats; data->gts = data->ats; if (DEBUG_ORIENTATION == 1) { data->ax = -imuData.ax0; data->ax = imuData.ax0; data->ay = imuData.ay0; data->az = -imuData.az0; data->gx = -imuData.gx0; data->az = imuData.az0; data->gx = imuData.gx0; data->gy = imuData.gy0; data->gz = -imuData.gz0; data->mx = -imuData.my0; data->my = -imuData.mx0; data->mz = -imuData.mz0; } else { data->ax = -imuData.ay0; data->ay = -imuData.ax0; data->az = -imuData.az0; data->gx = -imuData.gy0; data->gy = -imuData.gx0; data->gz = -imuData.gz0; data->mx = -imuData.my0; data->my = -imuData.mx0; data->mz = -imuData.mz0; } data->gz = imuData.gz0; data->mx = imuData.my0; data->my = imuData.mx0; data->mz = imuData.mz0; data->ax = imuData.ax0; data->ay = imuData.ay0; data->az = imuData.az0; data->gx = imuData.gx0; data->gy = imuData.gy0; data->gz = imuData.gz0; data->mx = imuData.my0; data->my = imuData.mx0; data->mz = imuData.mz0; data->aNumerator = imuData.aNumerator; data->aDenominator = imuData.aDenominator; data->gNumerator = imuData.gNumerator; data->gDenominator = imuData.gDenominator; data->mNumerator = imuData.mNumerator; data->mDenominator = imuData.mDenominator; trace_qvr_recv_sensor("gyro", data->gts, data->gx, data->gy, data->gz); trace_qvr_recv_sensor("accel", data->ats, data->ax, data->ay, data->az); Loading