xref: /linux/Documentation/driver-api/hsi.rst (revision 7852fe3a)
15e995786SJonathan CorbetHigh Speed Synchronous Serial Interface (HSI)
25e995786SJonathan Corbet=============================================
35e995786SJonathan Corbet
45e995786SJonathan CorbetIntroduction
55e995786SJonathan Corbet---------------
65e995786SJonathan Corbet
7*7852fe3aSRandy DunlapHigh Speed Synchronous Interface (HSI) is a full duplex, low latency protocol,
85e995786SJonathan Corbetthat is optimized for die-level interconnect between an Application Processor
95e995786SJonathan Corbetand a Baseband chipset. It has been specified by the MIPI alliance in 2003 and
105e995786SJonathan Corbetimplemented by multiple vendors since then.
115e995786SJonathan Corbet
125e995786SJonathan CorbetThe HSI interface supports full duplex communication over multiple channels
135e995786SJonathan Corbet(typically 8) and is capable of reaching speeds up to 200 Mbit/s.
145e995786SJonathan Corbet
155e995786SJonathan CorbetThe serial protocol uses two signals, DATA and FLAG as combined data and clock
165e995786SJonathan Corbetsignals and an additional READY signal for flow control. An additional WAKE
175e995786SJonathan Corbetsignal can be used to wakeup the chips from standby modes. The signals are
185e995786SJonathan Corbetcommonly prefixed by AC for signals going from the application die to the
195e995786SJonathan Corbetcellular die and CA for signals going the other way around.
205e995786SJonathan Corbet
215e995786SJonathan Corbet::
225e995786SJonathan Corbet
235e995786SJonathan Corbet    +------------+                                 +---------------+
245e995786SJonathan Corbet    |  Cellular  |                                 |  Application  |
255e995786SJonathan Corbet    |    Die     |                                 |      Die      |
265e995786SJonathan Corbet    |            | - - - - - - CAWAKE - - - - - - >|               |
275e995786SJonathan Corbet    |           T|------------ CADATA ------------>|R              |
285e995786SJonathan Corbet    |           X|------------ CAFLAG ------------>|X              |
295e995786SJonathan Corbet    |            |<----------- ACREADY ------------|               |
305e995786SJonathan Corbet    |            |                                 |               |
315e995786SJonathan Corbet    |            |                                 |               |
325e995786SJonathan Corbet    |            |< - - - - -  ACWAKE - - - - - - -|               |
335e995786SJonathan Corbet    |           R|<----------- ACDATA -------------|T              |
345e995786SJonathan Corbet    |           X|<----------- ACFLAG -------------|X              |
355e995786SJonathan Corbet    |            |------------ CAREADY ----------->|               |
365e995786SJonathan Corbet    |            |                                 |               |
375e995786SJonathan Corbet    |            |                                 |               |
385e995786SJonathan Corbet    +------------+                                 +---------------+
395e995786SJonathan Corbet
405e995786SJonathan CorbetHSI Subsystem in Linux
415e995786SJonathan Corbet-------------------------
425e995786SJonathan Corbet
435e995786SJonathan CorbetIn the Linux kernel the hsi subsystem is supposed to be used for HSI devices.
445e995786SJonathan CorbetThe hsi subsystem contains drivers for hsi controllers including support for
455e995786SJonathan Corbetmulti-port controllers and provides a generic API for using the HSI ports.
465e995786SJonathan Corbet
475e995786SJonathan CorbetIt also contains HSI client drivers, which make use of the generic API to
485e995786SJonathan Corbetimplement a protocol used on the HSI interface. These client drivers can
495e995786SJonathan Corbetuse an arbitrary number of channels.
505e995786SJonathan Corbet
515e995786SJonathan Corbethsi-char Device
525e995786SJonathan Corbet------------------
535e995786SJonathan Corbet
545e995786SJonathan CorbetEach port automatically registers a generic client driver called hsi_char,
55*7852fe3aSRandy Dunlapwhich provides a character device for userspace representing the HSI port.
565e995786SJonathan CorbetIt can be used to communicate via HSI from userspace. Userspace may
575e995786SJonathan Corbetconfigure the hsi_char device using the following ioctl commands:
585e995786SJonathan Corbet
595e995786SJonathan CorbetHSC_RESET
605e995786SJonathan Corbet flush the HSI port
615e995786SJonathan Corbet
625e995786SJonathan CorbetHSC_SET_PM
635e995786SJonathan Corbet enable or disable the client.
645e995786SJonathan Corbet
655e995786SJonathan CorbetHSC_SEND_BREAK
665e995786SJonathan Corbet send break
675e995786SJonathan Corbet
685e995786SJonathan CorbetHSC_SET_RX
695e995786SJonathan Corbet set RX configuration
705e995786SJonathan Corbet
715e995786SJonathan CorbetHSC_GET_RX
725e995786SJonathan Corbet get RX configuration
735e995786SJonathan Corbet
745e995786SJonathan CorbetHSC_SET_TX
755e995786SJonathan Corbet set TX configuration
765e995786SJonathan Corbet
775e995786SJonathan CorbetHSC_GET_TX
785e995786SJonathan Corbet get TX configuration
795e995786SJonathan Corbet
805e995786SJonathan CorbetThe kernel HSI API
815e995786SJonathan Corbet------------------
825e995786SJonathan Corbet
835e995786SJonathan Corbet.. kernel-doc:: include/linux/hsi/hsi.h
845e995786SJonathan Corbet   :internal:
855e995786SJonathan Corbet
865e995786SJonathan Corbet.. kernel-doc:: drivers/hsi/hsi_core.c
875e995786SJonathan Corbet   :export:
885e995786SJonathan Corbet
89