0001 High Speed Synchronous Serial Interface (HSI)
0002 =============================================
0003
0004 Introduction
0005 ---------------
0006
0007 High Speed Syncronous Interface (HSI) is a fullduplex, low latency protocol,
0008 that is optimized for die-level interconnect between an Application Processor
0009 and a Baseband chipset. It has been specified by the MIPI alliance in 2003 and
0010 implemented by multiple vendors since then.
0011
0012 The HSI interface supports full duplex communication over multiple channels
0013 (typically 8) and is capable of reaching speeds up to 200 Mbit/s.
0014
0015 The serial protocol uses two signals, DATA and FLAG as combined data and clock
0016 signals and an additional READY signal for flow control. An additional WAKE
0017 signal can be used to wakeup the chips from standby modes. The signals are
0018 commonly prefixed by AC for signals going from the application die to the
0019 cellular die and CA for signals going the other way around.
0020
0021 ::
0022
0023 +------------+ +---------------+
0024 | Cellular | | Application |
0025 | Die | | Die |
0026 | | - - - - - - CAWAKE - - - - - - >| |
0027 | T|------------ CADATA ------------>|R |
0028 | X|------------ CAFLAG ------------>|X |
0029 | |<----------- ACREADY ------------| |
0030 | | | |
0031 | | | |
0032 | |< - - - - - ACWAKE - - - - - - -| |
0033 | R|<----------- ACDATA -------------|T |
0034 | X|<----------- ACFLAG -------------|X |
0035 | |------------ CAREADY ----------->| |
0036 | | | |
0037 | | | |
0038 +------------+ +---------------+
0039
0040 HSI Subsystem in Linux
0041 -------------------------
0042
0043 In the Linux kernel the hsi subsystem is supposed to be used for HSI devices.
0044 The hsi subsystem contains drivers for hsi controllers including support for
0045 multi-port controllers and provides a generic API for using the HSI ports.
0046
0047 It also contains HSI client drivers, which make use of the generic API to
0048 implement a protocol used on the HSI interface. These client drivers can
0049 use an arbitrary number of channels.
0050
0051 hsi-char Device
0052 ------------------
0053
0054 Each port automatically registers a generic client driver called hsi_char,
0055 which provides a charecter device for userspace representing the HSI port.
0056 It can be used to communicate via HSI from userspace. Userspace may
0057 configure the hsi_char device using the following ioctl commands:
0058
0059 HSC_RESET
0060 flush the HSI port
0061
0062 HSC_SET_PM
0063 enable or disable the client.
0064
0065 HSC_SEND_BREAK
0066 send break
0067
0068 HSC_SET_RX
0069 set RX configuration
0070
0071 HSC_GET_RX
0072 get RX configuration
0073
0074 HSC_SET_TX
0075 set TX configuration
0076
0077 HSC_GET_TX
0078 get TX configuration
0079
0080 The kernel HSI API
0081 ------------------
0082
0083 .. kernel-doc:: include/linux/hsi/hsi.h
0084 :internal:
0085
0086 .. kernel-doc:: drivers/hsi/hsi_core.c
0087 :export:
0088