Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 62c8cba8 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "HID: qvr: Adding numerator and denominator to sensor data"

parents a2d6c83b 59c8e41e
Loading
Loading
Loading
Loading
+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
@@ -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;
@@ -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 {
@@ -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)
{
@@ -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",
@@ -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)
@@ -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);