]>
Commit | Line | Data |
---|---|---|
5e995786 JC |
1 | High Speed Synchronous Serial Interface (HSI) |
2 | ============================================= | |
3 | ||
4 | Introduction | |
5 | --------------- | |
6 | ||
7 | High Speed Syncronous Interface (HSI) is a fullduplex, low latency protocol, | |
8 | that is optimized for die-level interconnect between an Application Processor | |
9 | and a Baseband chipset. It has been specified by the MIPI alliance in 2003 and | |
10 | implemented by multiple vendors since then. | |
11 | ||
12 | The HSI interface supports full duplex communication over multiple channels | |
13 | (typically 8) and is capable of reaching speeds up to 200 Mbit/s. | |
14 | ||
15 | The serial protocol uses two signals, DATA and FLAG as combined data and clock | |
16 | signals and an additional READY signal for flow control. An additional WAKE | |
17 | signal can be used to wakeup the chips from standby modes. The signals are | |
18 | commonly prefixed by AC for signals going from the application die to the | |
19 | cellular die and CA for signals going the other way around. | |
20 | ||
21 | :: | |
22 | ||
23 | +------------+ +---------------+ | |
24 | | Cellular | | Application | | |
25 | | Die | | Die | | |
26 | | | - - - - - - CAWAKE - - - - - - >| | | |
27 | | T|------------ CADATA ------------>|R | | |
28 | | X|------------ CAFLAG ------------>|X | | |
29 | | |<----------- ACREADY ------------| | | |
30 | | | | | | |
31 | | | | | | |
32 | | |< - - - - - ACWAKE - - - - - - -| | | |
33 | | R|<----------- ACDATA -------------|T | | |
34 | | X|<----------- ACFLAG -------------|X | | |
35 | | |------------ CAREADY ----------->| | | |
36 | | | | | | |
37 | | | | | | |
38 | +------------+ +---------------+ | |
39 | ||
40 | HSI Subsystem in Linux | |
41 | ------------------------- | |
42 | ||
43 | In the Linux kernel the hsi subsystem is supposed to be used for HSI devices. | |
44 | The hsi subsystem contains drivers for hsi controllers including support for | |
45 | multi-port controllers and provides a generic API for using the HSI ports. | |
46 | ||
47 | It also contains HSI client drivers, which make use of the generic API to | |
48 | implement a protocol used on the HSI interface. These client drivers can | |
49 | use an arbitrary number of channels. | |
50 | ||
51 | hsi-char Device | |
52 | ------------------ | |
53 | ||
54 | Each port automatically registers a generic client driver called hsi_char, | |
55 | which provides a charecter device for userspace representing the HSI port. | |
56 | It can be used to communicate via HSI from userspace. Userspace may | |
57 | configure the hsi_char device using the following ioctl commands: | |
58 | ||
59 | HSC_RESET | |
60 | flush the HSI port | |
61 | ||
62 | HSC_SET_PM | |
63 | enable or disable the client. | |
64 | ||
65 | HSC_SEND_BREAK | |
66 | send break | |
67 | ||
68 | HSC_SET_RX | |
69 | set RX configuration | |
70 | ||
71 | HSC_GET_RX | |
72 | get RX configuration | |
73 | ||
74 | HSC_SET_TX | |
75 | set TX configuration | |
76 | ||
77 | HSC_GET_TX | |
78 | get TX configuration | |
79 | ||
80 | The kernel HSI API | |
81 | ------------------ | |
82 | ||
83 | .. kernel-doc:: include/linux/hsi/hsi.h | |
84 | :internal: | |
85 | ||
86 | .. kernel-doc:: drivers/hsi/hsi_core.c | |
87 | :export: | |
88 |