mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
3.1 KiB
88 lines
3.1 KiB
High Speed Synchronous Serial Interface (HSI) |
|
============================================= |
|
|
|
Introduction |
|
--------------- |
|
|
|
High Speed Syncronous Interface (HSI) is a fullduplex, low latency protocol, |
|
that is optimized for die-level interconnect between an Application Processor |
|
and a Baseband chipset. It has been specified by the MIPI alliance in 2003 and |
|
implemented by multiple vendors since then. |
|
|
|
The HSI interface supports full duplex communication over multiple channels |
|
(typically 8) and is capable of reaching speeds up to 200 Mbit/s. |
|
|
|
The serial protocol uses two signals, DATA and FLAG as combined data and clock |
|
signals and an additional READY signal for flow control. An additional WAKE |
|
signal can be used to wakeup the chips from standby modes. The signals are |
|
commonly prefixed by AC for signals going from the application die to the |
|
cellular die and CA for signals going the other way around. |
|
|
|
:: |
|
|
|
+------------+ +---------------+ |
|
| Cellular | | Application | |
|
| Die | | Die | |
|
| | - - - - - - CAWAKE - - - - - - >| | |
|
| T|------------ CADATA ------------>|R | |
|
| X|------------ CAFLAG ------------>|X | |
|
| |<----------- ACREADY ------------| | |
|
| | | | |
|
| | | | |
|
| |< - - - - - ACWAKE - - - - - - -| | |
|
| R|<----------- ACDATA -------------|T | |
|
| X|<----------- ACFLAG -------------|X | |
|
| |------------ CAREADY ----------->| | |
|
| | | | |
|
| | | | |
|
+------------+ +---------------+ |
|
|
|
HSI Subsystem in Linux |
|
------------------------- |
|
|
|
In the Linux kernel the hsi subsystem is supposed to be used for HSI devices. |
|
The hsi subsystem contains drivers for hsi controllers including support for |
|
multi-port controllers and provides a generic API for using the HSI ports. |
|
|
|
It also contains HSI client drivers, which make use of the generic API to |
|
implement a protocol used on the HSI interface. These client drivers can |
|
use an arbitrary number of channels. |
|
|
|
hsi-char Device |
|
------------------ |
|
|
|
Each port automatically registers a generic client driver called hsi_char, |
|
which provides a charecter device for userspace representing the HSI port. |
|
It can be used to communicate via HSI from userspace. Userspace may |
|
configure the hsi_char device using the following ioctl commands: |
|
|
|
HSC_RESET |
|
flush the HSI port |
|
|
|
HSC_SET_PM |
|
enable or disable the client. |
|
|
|
HSC_SEND_BREAK |
|
send break |
|
|
|
HSC_SET_RX |
|
set RX configuration |
|
|
|
HSC_GET_RX |
|
get RX configuration |
|
|
|
HSC_SET_TX |
|
set TX configuration |
|
|
|
HSC_GET_TX |
|
get TX configuration |
|
|
|
The kernel HSI API |
|
------------------ |
|
|
|
.. kernel-doc:: include/linux/hsi/hsi.h |
|
:internal: |
|
|
|
.. kernel-doc:: drivers/hsi/hsi_core.c |
|
:export: |
|
|
|
|