hid: Import iichid - I2C transport backend for HID subsystem
This implements hid_if.m methods for HID-over-I2C protocol [1]. Following kernel options are added: IICHID_SAMPLING - Enable support for a sampling mode as interrupt resource acquisition is not always possible in a case of GPIO interrupts. IICHID_DEBUG - Enable debug output. The module is based on prior Marc Priggemeyer work (D16698). [1] http://download.microsoft.com/download/7/d/d/7dd44bb7-2a7a-4505-ac1c-7227d3d96d5b/hid-over-i2c-protocol-spec-v1-0.docx Differential revision: https://reviews.freebsd.org/D27892
This commit is contained in:
parent
e49fa9f6f3
commit
b1f1b07f6d
@ -211,6 +211,7 @@ MAN= aac.4 \
|
||||
iic_gpiomux.4 \
|
||||
iicbb.4 \
|
||||
iicbus.4 \
|
||||
iichid.4 \
|
||||
iicmux.4 \
|
||||
iicsmb.4 \
|
||||
iir.4 \
|
||||
|
96
share/man/man4/iichid.4
Normal file
96
share/man/man4/iichid.4
Normal file
@ -0,0 +1,96 @@
|
||||
.\" Copyright (c) 2020 Vladimir Kondratyev <wulf@FreeBSD.org>
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms, with or without
|
||||
.\" modification, are permitted provided that the following conditions
|
||||
.\" are met:
|
||||
.\" 1. Redistributions of source code must retain the above copyright
|
||||
.\" notice, this list of conditions and the following disclaimer.
|
||||
.\" 2. Redistributions in binary form must reproduce the above copyright
|
||||
.\" notice, this list of conditions and the following disclaimer in the
|
||||
.\" documentation and/or other materials provided with the distribution.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd September 21, 2020
|
||||
.Dt IICHID 4
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm iichid
|
||||
.Nd I2C HID transport driver
|
||||
.Sh SYNOPSIS
|
||||
To compile this driver into the kernel,
|
||||
place the following lines in your
|
||||
kernel configuration file:
|
||||
.Bd -ragged -offset indent
|
||||
.Cd "device iichid"
|
||||
.Ed
|
||||
.Pp
|
||||
Alternatively, to load the driver as a
|
||||
module at boot time, place the following line in
|
||||
.Xr loader.conf 5 :
|
||||
.Bd -literal -offset indent
|
||||
iichid_load="YES"
|
||||
.Ed
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm
|
||||
driver provides a interface to I2C Human Interface Devices (HIDs).
|
||||
.Sh SYSCTL VARIABLES
|
||||
Next parameters are available as
|
||||
.Xr sysctl 8
|
||||
variables.
|
||||
Debug parameter is available as
|
||||
.Xr loader 8
|
||||
tunable as well.
|
||||
.Bl -tag -width indent
|
||||
.It Va dev.iichid.*.sampling_rate_fast
|
||||
Active sampling rate in num/second (for sampling mode).
|
||||
.It Va dev.iichid.*.sampling_rate_slow
|
||||
Idle sampling rate in num/second (for sampling mode).
|
||||
.It Va dev.iichid.*.sampling_hysteresis
|
||||
Number of missing samples before enabling of slow mode (for sampling mode).
|
||||
.It Va hw.iichid.debug
|
||||
Debug output level, where 0 is debugging disabled and larger values increase
|
||||
debug message verbosity.
|
||||
Default is 0.
|
||||
.El
|
||||
.Sh SEE ALSO
|
||||
.Xr ig4 4
|
||||
.Sh BUGS
|
||||
The
|
||||
.Nm
|
||||
does not support GPIO interrupts yet.
|
||||
In that case
|
||||
.Nm
|
||||
enables sampling mode with periodic polling of hardware by driver means.
|
||||
See dev.iichid.*.sampling_*
|
||||
.Xr sysctl 4
|
||||
variables for tuning of sampling parameters.
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Nm
|
||||
driver first appeared in
|
||||
.Fx 13.0.
|
||||
.Sh AUTHORS
|
||||
.An -nosplit
|
||||
The
|
||||
.Nm
|
||||
driver was written by
|
||||
.An Marc Priggemeyer Aq Mt marc.priggemeyer@gmail.com
|
||||
and
|
||||
.An Vladimir Kondratyev Aq Mt wulf@FreeBSD.org .
|
||||
.Pp
|
||||
This manual page was written by
|
||||
.An Vladimir Kondratyev Aq Mt wulf@FreeBSD.org .
|
@ -384,3 +384,4 @@ device uinput # install /dev/uinput cdev
|
||||
# HID support
|
||||
options HID_DEBUG # enable debug msgs
|
||||
device hid # Generic HID support
|
||||
options IICHID_SAMPLING # Workaround missing GPIO INTR support
|
||||
|
@ -1848,6 +1848,7 @@ dev/iicbus/iicbb.c optional iicbb
|
||||
dev/iicbus/iicbb_if.m optional iicbb
|
||||
dev/iicbus/iicbus.c optional iicbus
|
||||
dev/iicbus/iicbus_if.m optional iicbus
|
||||
dev/iicbus/iichid.c optional iichid acpi hid iicbus
|
||||
dev/iicbus/iiconf.c optional iicbus
|
||||
dev/iicbus/iicsmb.c optional iicsmb \
|
||||
dependency "iicbus_if.h"
|
||||
|
@ -1016,3 +1016,5 @@ LINDEBUGFS
|
||||
|
||||
# options for HID support
|
||||
HID_DEBUG opt_hid.h
|
||||
IICHID_DEBUG opt_hid.h
|
||||
IICHID_SAMPLING opt_hid.h
|
||||
|
@ -903,3 +903,4 @@ driver_t hidbus_driver = {
|
||||
|
||||
MODULE_DEPEND(hidbus, hid, 1, 1, 1);
|
||||
MODULE_VERSION(hidbus, 1);
|
||||
DRIVER_MODULE(hidbus, iichid, hidbus_driver, hidbus_devclass, 0, 0);
|
||||
|
1252
sys/dev/iicbus/iichid.c
Normal file
1252
sys/dev/iicbus/iichid.c
Normal file
File diff suppressed because it is too large
Load Diff
@ -352,3 +352,4 @@ device uinput # install /dev/uinput cdev
|
||||
# HID support
|
||||
options HID_DEBUG # enable debug msgs
|
||||
device hid # Generic HID support
|
||||
options IICHID_SAMPLING # Workaround missing GPIO INTR support
|
||||
|
@ -29,4 +29,9 @@ SUBDIR += tca6416 \
|
||||
rx8803
|
||||
.endif
|
||||
|
||||
.if ${MACHINE_CPUARCH} == "aarch64" || ${MACHINE_CPUARCH} == "amd64" || \
|
||||
${MACHINE_CPUARCH} == "i386"
|
||||
SUBDIR += iichid
|
||||
.endif
|
||||
|
||||
.include <bsd.subdir.mk>
|
||||
|
8
sys/modules/i2c/iichid/Makefile
Normal file
8
sys/modules/i2c/iichid/Makefile
Normal file
@ -0,0 +1,8 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.PATH: ${SRCTOP}/sys/dev/iicbus
|
||||
KMOD = iichid
|
||||
SRCS = iichid.c
|
||||
SRCS += acpi_if.h bus_if.h device_if.h hid_if.h iicbus_if.h opt_hid.h
|
||||
|
||||
.include <bsd.kmod.mk>
|
Loading…
Reference in New Issue
Block a user