|  | 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: | 
|  |  |