aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation/driver-api
diff options
context:
space:
mode:
authorJonathan Corbet <corbet@lwn.net>2016-09-06 09:15:24 -0400
committerJonathan Corbet <corbet@lwn.net>2016-09-06 11:14:52 -0400
commit5e995786850e78b7950f6979a6bdd3990abc89cd (patch)
treee95ff5fb0ee816885b92206fdff70aa1bfe4a027 /Documentation/driver-api
parent70fc1f547a91c137913a23a0f7a4a89c33930c6a (diff)
docs: split up serial-interfaces.rst
It never made sense to keep these documents together; move each into its own file. Drop the section numbering on hsi.txt on its way to its own file. Suggested-by: Sebastian Reichel <sre@kernel.org> Signed-off-by: Jonathan Corbet <corbet@lwn.net>
Diffstat (limited to 'Documentation/driver-api')
-rw-r--r--Documentation/driver-api/hsi.rst88
-rw-r--r--Documentation/driver-api/i2c.rst46
-rw-r--r--Documentation/driver-api/index.rst4
-rw-r--r--Documentation/driver-api/serial-interfaces.rst189
-rw-r--r--Documentation/driver-api/spi.rst53
5 files changed, 190 insertions, 190 deletions
diff --git a/Documentation/driver-api/hsi.rst b/Documentation/driver-api/hsi.rst
new file mode 100644
index 000000000000..f9cec02b72a1
--- /dev/null
+++ b/Documentation/driver-api/hsi.rst
@@ -0,0 +1,88 @@
1High Speed Synchronous Serial Interface (HSI)
2=============================================
3
4Introduction
5---------------
6
7High Speed Syncronous Interface (HSI) is a fullduplex, low latency protocol,
8that is optimized for die-level interconnect between an Application Processor
9and a Baseband chipset. It has been specified by the MIPI alliance in 2003 and
10implemented by multiple vendors since then.
11
12The HSI interface supports full duplex communication over multiple channels
13(typically 8) and is capable of reaching speeds up to 200 Mbit/s.
14
15The serial protocol uses two signals, DATA and FLAG as combined data and clock
16signals and an additional READY signal for flow control. An additional WAKE
17signal can be used to wakeup the chips from standby modes. The signals are
18commonly prefixed by AC for signals going from the application die to the
19cellular 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
40HSI Subsystem in Linux
41-------------------------
42
43In the Linux kernel the hsi subsystem is supposed to be used for HSI devices.
44The hsi subsystem contains drivers for hsi controllers including support for
45multi-port controllers and provides a generic API for using the HSI ports.
46
47It also contains HSI client drivers, which make use of the generic API to
48implement a protocol used on the HSI interface. These client drivers can
49use an arbitrary number of channels.
50
51hsi-char Device
52------------------
53
54Each port automatically registers a generic client driver called hsi_char,
55which provides a charecter device for userspace representing the HSI port.
56It can be used to communicate via HSI from userspace. Userspace may
57configure the hsi_char device using the following ioctl commands:
58
59HSC_RESET
60 flush the HSI port
61
62HSC_SET_PM
63 enable or disable the client.
64
65HSC_SEND_BREAK
66 send break
67
68HSC_SET_RX
69 set RX configuration
70
71HSC_GET_RX
72 get RX configuration
73
74HSC_SET_TX
75 set TX configuration
76
77HSC_GET_TX
78 get TX configuration
79
80The 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
diff --git a/Documentation/driver-api/i2c.rst b/Documentation/driver-api/i2c.rst
new file mode 100644
index 000000000000..f3939f7852bd
--- /dev/null
+++ b/Documentation/driver-api/i2c.rst
@@ -0,0 +1,46 @@
1I\ :sup:`2`\ C and SMBus Subsystem
2==================================
3
4I\ :sup:`2`\ C (or without fancy typography, "I2C") is an acronym for
5the "Inter-IC" bus, a simple bus protocol which is widely used where low
6data rate communications suffice. Since it's also a licensed trademark,
7some vendors use another name (such as "Two-Wire Interface", TWI) for
8the same bus. I2C only needs two signals (SCL for clock, SDA for data),
9conserving board real estate and minimizing signal quality issues. Most
10I2C devices use seven bit addresses, and bus speeds of up to 400 kHz;
11there's a high speed extension (3.4 MHz) that's not yet found wide use.
12I2C is a multi-master bus; open drain signaling is used to arbitrate
13between masters, as well as to handshake and to synchronize clocks from
14slower clients.
15
16The Linux I2C programming interfaces support only the master side of bus
17interactions, not the slave side. The programming interface is
18structured around two kinds of driver, and two kinds of device. An I2C
19"Adapter Driver" abstracts the controller hardware; it binds to a
20physical device (perhaps a PCI device or platform_device) and exposes a
21:c:type:`struct i2c_adapter <i2c_adapter>` representing each
22I2C bus segment it manages. On each I2C bus segment will be I2C devices
23represented by a :c:type:`struct i2c_client <i2c_client>`.
24Those devices will be bound to a :c:type:`struct i2c_driver
25<i2c_driver>`, which should follow the standard Linux driver
26model. (At this writing, a legacy model is more widely used.) There are
27functions to perform various I2C protocol operations; at this writing
28all such functions are usable only from task context.
29
30The System Management Bus (SMBus) is a sibling protocol. Most SMBus
31systems are also I2C conformant. The electrical constraints are tighter
32for SMBus, and it standardizes particular protocol messages and idioms.
33Controllers that support I2C can also support most SMBus operations, but
34SMBus controllers don't support all the protocol options that an I2C
35controller will. There are functions to perform various SMBus protocol
36operations, either using I2C primitives or by issuing SMBus commands to
37i2c_adapter devices which don't support those I2C operations.
38
39.. kernel-doc:: include/linux/i2c.h
40 :internal:
41
42.. kernel-doc:: drivers/i2c/i2c-boardinfo.c
43 :functions: i2c_register_board_info
44
45.. kernel-doc:: drivers/i2c/i2c-core.c
46 :export:
diff --git a/Documentation/driver-api/index.rst b/Documentation/driver-api/index.rst
index b50c41011e47..8e259c5d0322 100644
--- a/Documentation/driver-api/index.rst
+++ b/Documentation/driver-api/index.rst
@@ -20,5 +20,7 @@ available subsections can be seen below.
20 sound 20 sound
21 frame-buffer 21 frame-buffer
22 input 22 input
23 serial-interfaces 23 spi
24 i2c
25 hsi
24 miscellaneous 26 miscellaneous
diff --git a/Documentation/driver-api/serial-interfaces.rst b/Documentation/driver-api/serial-interfaces.rst
deleted file mode 100644
index 07c58971a322..000000000000
--- a/Documentation/driver-api/serial-interfaces.rst
+++ /dev/null
@@ -1,189 +0,0 @@
1Serial Peripheral Interface (SPI)
2=================================
3
4SPI is the "Serial Peripheral Interface", widely used with embedded
5systems because it is a simple and efficient interface: basically a
6multiplexed shift register. Its three signal wires hold a clock (SCK,
7often in the range of 1-20 MHz), a "Master Out, Slave In" (MOSI) data
8line, and a "Master In, Slave Out" (MISO) data line. SPI is a full
9duplex protocol; for each bit shifted out the MOSI line (one per clock)
10another is shifted in on the MISO line. Those bits are assembled into
11words of various sizes on the way to and from system memory. An
12additional chipselect line is usually active-low (nCS); four signals are
13normally used for each peripheral, plus sometimes an interrupt.
14
15The SPI bus facilities listed here provide a generalized interface to
16declare SPI busses and devices, manage them according to the standard
17Linux driver model, and perform input/output operations. At this time,
18only "master" side interfaces are supported, where Linux talks to SPI
19peripherals and does not implement such a peripheral itself. (Interfaces
20to support implementing SPI slaves would necessarily look different.)
21
22The programming interface is structured around two kinds of driver, and
23two kinds of device. A "Controller Driver" abstracts the controller
24hardware, which may be as simple as a set of GPIO pins or as complex as
25a pair of FIFOs connected to dual DMA engines on the other side of the
26SPI shift register (maximizing throughput). Such drivers bridge between
27whatever bus they sit on (often the platform bus) and SPI, and expose
28the SPI side of their device as a :c:type:`struct spi_master
29<spi_master>`. SPI devices are children of that master,
30represented as a :c:type:`struct spi_device <spi_device>` and
31manufactured from :c:type:`struct spi_board_info
32<spi_board_info>` descriptors which are usually provided by
33board-specific initialization code. A :c:type:`struct spi_driver
34<spi_driver>` is called a "Protocol Driver", and is bound to a
35spi_device using normal driver model calls.
36
37The I/O model is a set of queued messages. Protocol drivers submit one
38or more :c:type:`struct spi_message <spi_message>` objects,
39which are processed and completed asynchronously. (There are synchronous
40wrappers, however.) Messages are built from one or more
41:c:type:`struct spi_transfer <spi_transfer>` objects, each of
42which wraps a full duplex SPI transfer. A variety of protocol tweaking
43options are needed, because different chips adopt very different
44policies for how they use the bits transferred with SPI.
45
46.. kernel-doc:: include/linux/spi/spi.h
47 :internal:
48
49.. kernel-doc:: drivers/spi/spi.c
50 :functions: spi_register_board_info
51
52.. kernel-doc:: drivers/spi/spi.c
53 :export:
54
55I\ :sup:`2`\ C and SMBus Subsystem
56==================================
57
58I\ :sup:`2`\ C (or without fancy typography, "I2C") is an acronym for
59the "Inter-IC" bus, a simple bus protocol which is widely used where low
60data rate communications suffice. Since it's also a licensed trademark,
61some vendors use another name (such as "Two-Wire Interface", TWI) for
62the same bus. I2C only needs two signals (SCL for clock, SDA for data),
63conserving board real estate and minimizing signal quality issues. Most
64I2C devices use seven bit addresses, and bus speeds of up to 400 kHz;
65there's a high speed extension (3.4 MHz) that's not yet found wide use.
66I2C is a multi-master bus; open drain signaling is used to arbitrate
67between masters, as well as to handshake and to synchronize clocks from
68slower clients.
69
70The Linux I2C programming interfaces support only the master side of bus
71interactions, not the slave side. The programming interface is
72structured around two kinds of driver, and two kinds of device. An I2C
73"Adapter Driver" abstracts the controller hardware; it binds to a
74physical device (perhaps a PCI device or platform_device) and exposes a
75:c:type:`struct i2c_adapter <i2c_adapter>` representing each
76I2C bus segment it manages. On each I2C bus segment will be I2C devices
77represented by a :c:type:`struct i2c_client <i2c_client>`.
78Those devices will be bound to a :c:type:`struct i2c_driver
79<i2c_driver>`, which should follow the standard Linux driver
80model. (At this writing, a legacy model is more widely used.) There are
81functions to perform various I2C protocol operations; at this writing
82all such functions are usable only from task context.
83
84The System Management Bus (SMBus) is a sibling protocol. Most SMBus
85systems are also I2C conformant. The electrical constraints are tighter
86for SMBus, and it standardizes particular protocol messages and idioms.
87Controllers that support I2C can also support most SMBus operations, but
88SMBus controllers don't support all the protocol options that an I2C
89controller will. There are functions to perform various SMBus protocol
90operations, either using I2C primitives or by issuing SMBus commands to
91i2c_adapter devices which don't support those I2C operations.
92
93.. kernel-doc:: include/linux/i2c.h
94 :internal:
95
96.. kernel-doc:: drivers/i2c/i2c-boardinfo.c
97 :functions: i2c_register_board_info
98
99.. kernel-doc:: drivers/i2c/i2c-core.c
100 :export:
101
102High Speed Synchronous Serial Interface (HSI)
103=============================================
104
1051. Introduction
106---------------
107
108High Speed Syncronous Interface (HSI) is a fullduplex, low latency protocol,
109that is optimized for die-level interconnect between an Application Processor
110and a Baseband chipset. It has been specified by the MIPI alliance in 2003 and
111implemented by multiple vendors since then.
112
113The HSI interface supports full duplex communication over multiple channels
114(typically 8) and is capable of reaching speeds up to 200 Mbit/s.
115
116The serial protocol uses two signals, DATA and FLAG as combined data and clock
117signals and an additional READY signal for flow control. An additional WAKE
118signal can be used to wakeup the chips from standby modes. The signals are
119commonly prefixed by AC for signals going from the application die to the
120cellular die and CA for signals going the other way around.
121
122::
123
124 +------------+ +---------------+
125 | Cellular | | Application |
126 | Die | | Die |
127 | | - - - - - - CAWAKE - - - - - - >| |
128 | T|------------ CADATA ------------>|R |
129 | X|------------ CAFLAG ------------>|X |
130 | |<----------- ACREADY ------------| |
131 | | | |
132 | | | |
133 | |< - - - - - ACWAKE - - - - - - -| |
134 | R|<----------- ACDATA -------------|T |
135 | X|<----------- ACFLAG -------------|X |
136 | |------------ CAREADY ----------->| |
137 | | | |
138 | | | |
139 +------------+ +---------------+
140
1412. HSI Subsystem in Linux
142-------------------------
143
144In the Linux kernel the hsi subsystem is supposed to be used for HSI devices.
145The hsi subsystem contains drivers for hsi controllers including support for
146multi-port controllers and provides a generic API for using the HSI ports.
147
148It also contains HSI client drivers, which make use of the generic API to
149implement a protocol used on the HSI interface. These client drivers can
150use an arbitrary number of channels.
151
1523. hsi-char Device
153------------------
154
155Each port automatically registers a generic client driver called hsi_char,
156which provides a charecter device for userspace representing the HSI port.
157It can be used to communicate via HSI from userspace. Userspace may
158configure the hsi_char device using the following ioctl commands:
159
160HSC_RESET
161 flush the HSI port
162
163HSC_SET_PM
164 enable or disable the client.
165
166HSC_SEND_BREAK
167 send break
168
169HSC_SET_RX
170 set RX configuration
171
172HSC_GET_RX
173 get RX configuration
174
175HSC_SET_TX
176 set TX configuration
177
178HSC_GET_TX
179 get TX configuration
180
181The kernel HSI API
182------------------
183
184.. kernel-doc:: include/linux/hsi/hsi.h
185 :internal:
186
187.. kernel-doc:: drivers/hsi/hsi_core.c
188 :export:
189
diff --git a/Documentation/driver-api/spi.rst b/Documentation/driver-api/spi.rst
new file mode 100644
index 000000000000..f64cb666498a
--- /dev/null
+++ b/Documentation/driver-api/spi.rst
@@ -0,0 +1,53 @@
1Serial Peripheral Interface (SPI)
2=================================
3
4SPI is the "Serial Peripheral Interface", widely used with embedded
5systems because it is a simple and efficient interface: basically a
6multiplexed shift register. Its three signal wires hold a clock (SCK,
7often in the range of 1-20 MHz), a "Master Out, Slave In" (MOSI) data
8line, and a "Master In, Slave Out" (MISO) data line. SPI is a full
9duplex protocol; for each bit shifted out the MOSI line (one per clock)
10another is shifted in on the MISO line. Those bits are assembled into
11words of various sizes on the way to and from system memory. An
12additional chipselect line is usually active-low (nCS); four signals are
13normally used for each peripheral, plus sometimes an interrupt.
14
15The SPI bus facilities listed here provide a generalized interface to
16declare SPI busses and devices, manage them according to the standard
17Linux driver model, and perform input/output operations. At this time,
18only "master" side interfaces are supported, where Linux talks to SPI
19peripherals and does not implement such a peripheral itself. (Interfaces
20to support implementing SPI slaves would necessarily look different.)
21
22The programming interface is structured around two kinds of driver, and
23two kinds of device. A "Controller Driver" abstracts the controller
24hardware, which may be as simple as a set of GPIO pins or as complex as
25a pair of FIFOs connected to dual DMA engines on the other side of the
26SPI shift register (maximizing throughput). Such drivers bridge between
27whatever bus they sit on (often the platform bus) and SPI, and expose
28the SPI side of their device as a :c:type:`struct spi_master
29<spi_master>`. SPI devices are children of that master,
30represented as a :c:type:`struct spi_device <spi_device>` and
31manufactured from :c:type:`struct spi_board_info
32<spi_board_info>` descriptors which are usually provided by
33board-specific initialization code. A :c:type:`struct spi_driver
34<spi_driver>` is called a "Protocol Driver", and is bound to a
35spi_device using normal driver model calls.
36
37The I/O model is a set of queued messages. Protocol drivers submit one
38or more :c:type:`struct spi_message <spi_message>` objects,
39which are processed and completed asynchronously. (There are synchronous
40wrappers, however.) Messages are built from one or more
41:c:type:`struct spi_transfer <spi_transfer>` objects, each of
42which wraps a full duplex SPI transfer. A variety of protocol tweaking
43options are needed, because different chips adopt very different
44policies for how they use the bits transferred with SPI.
45
46.. kernel-doc:: include/linux/spi/spi.h
47 :internal:
48
49.. kernel-doc:: drivers/spi/spi.c
50 :functions: spi_register_board_info
51
52.. kernel-doc:: drivers/spi/spi.c
53 :export: