blob: 03b216d3c58a182c1ab78ea236d6606171206bc3 [file] [log] [blame]
/* Copyright 2020 The ChromiumOS Authors
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
/*
* General definitions for I2C-HID
*
* For a complete reference, please see the following docs on
* https://docs.microsoft.com/
*
* 1. hid-over-i2c-protocol-spec-v1-0.docx
*/
#ifndef __CROS_EC_I2C_HID_H
#define __CROS_EC_I2C_HID_H
#include "common.h"
#include "stdint.h"
/*
* I2C-HID registers
*
* Except for I2C_HID_HID_DESC_REGISTER, fields in this section can be chosen
* freely so we just picked something that we are happy with.
*
* I2C_HID_HID_DESC_REGISTER is defined in the ACPI table so please make sure
* you have put in the same value there.
*/
#define I2C_HID_HID_DESC_REGISTER 0x0001
#define I2C_HID_REPORT_DESC_REGISTER 0x1000
#define I2C_HID_INPUT_REPORT_REGISTER 0x2000
#define I2C_HID_COMMAND_REGISTER 0x3000
#define I2C_HID_DATA_REGISTER 0x3000
/* I2C-HID commands */
#define I2C_HID_CMD_RESET 0x01
#define I2C_HID_CMD_GET_REPORT 0x02
#define I2C_HID_CMD_SET_REPORT 0x03
#define I2C_HID_CMD_GET_IDLE 0x04
#define I2C_HID_CMD_SET_IDLE 0x05
#define I2C_HID_CMD_GET_PROTOCOL 0x06
#define I2C_HID_CMD_SET_PROTOCOL 0x07
#define I2C_HID_CMD_SET_POWER 0x08
/* Common HID fields */
#define I2C_HID_DESC_LENGTH sizeof(struct i2c_hid_descriptor)
#define I2C_HID_BCD_VERSION 0x0100
/* I2C-HID HID descriptor */
struct __packed i2c_hid_descriptor {
uint16_t wHIDDescLength;
uint16_t bcdVersion;
uint16_t wReportDescLength;
uint16_t wReportDescRegister;
uint16_t wInputRegister;
uint16_t wMaxInputLength;
uint16_t wOutputRegister;
uint16_t wMaxOutputLength;
uint16_t wCommandRegister;
uint16_t wDataRegister;
uint16_t wVendorID;
uint16_t wProductID;
uint16_t wVersionID;
uint32_t reserved;
};
#endif /* __CROS_EC_I2C_HID_H */