aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation/driver-api
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2018-02-01 13:31:17 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2018-02-01 13:31:17 -0500
commitf6cff79f1d122f78a4b35bf4b2f0112afcd89ea4 (patch)
treecf3a38576f9adbb3860982c25f72aebed2bb541a /Documentation/driver-api
parent47fcc0360cfb3fe82e4daddacad3c1cd80b0b75d (diff)
parent9ff6576e124b1227c27c1da43fe5f8ee908263e0 (diff)
Merge tag 'char-misc-4.16-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc
Pull char/misc driver updates from Greg KH: "Here is the big pull request for char/misc drivers for 4.16-rc1. There's a lot of stuff in here. Three new driver subsystems were added for various types of hardware busses: - siox - slimbus - soundwire as well as a new vboxguest subsystem for the VirtualBox hypervisor drivers. There's also big updates from the FPGA subsystem, lots of Android binder fixes, the usual handful of hyper-v updates, and lots of other smaller driver updates. All of these have been in linux-next for a long time, with no reported issues" * tag 'char-misc-4.16-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc: (155 commits) char: lp: use true or false for boolean values android: binder: use VM_ALLOC to get vm area android: binder: Use true and false for boolean values lkdtm: fix handle_irq_event symbol for INT_HW_IRQ_EN EISA: Delete error message for a failed memory allocation in eisa_probe() EISA: Whitespace cleanup misc: remove AVR32 dependencies virt: vbox: Add error mapping for VERR_INVALID_NAME and VERR_NO_MORE_FILES soundwire: Fix a signedness bug uio_hv_generic: fix new type mismatch warnings uio_hv_generic: fix type mismatch warnings auxdisplay: img-ascii-lcd: add missing MODULE_DESCRIPTION/AUTHOR/LICENSE uio_hv_generic: add rescind support uio_hv_generic: check that host supports monitor page uio_hv_generic: create send and receive buffers uio: document uio_hv_generic regions doc: fix documentation about uio_hv_generic vmbus: add monitor_id and subchannel_id to sysfs per channel vmbus: fix ABI documentation uio_hv_generic: use ISR callback method ...
Diffstat (limited to 'Documentation/driver-api')
-rw-r--r--Documentation/driver-api/index.rst2
-rw-r--r--Documentation/driver-api/slimbus.rst127
-rw-r--r--Documentation/driver-api/soundwire/index.rst15
-rw-r--r--Documentation/driver-api/soundwire/summary.rst207
-rw-r--r--Documentation/driver-api/uio-howto.rst26
5 files changed, 370 insertions, 7 deletions
diff --git a/Documentation/driver-api/index.rst b/Documentation/driver-api/index.rst
index d17a9876b473..e9b41b1634f3 100644
--- a/Documentation/driver-api/index.rst
+++ b/Documentation/driver-api/index.rst
@@ -47,6 +47,8 @@ available subsections can be seen below.
47 gpio 47 gpio
48 misc_devices 48 misc_devices
49 dmaengine/index 49 dmaengine/index
50 slimbus
51 soundwire/index
50 52
51.. only:: subproject and html 53.. only:: subproject and html
52 54
diff --git a/Documentation/driver-api/slimbus.rst b/Documentation/driver-api/slimbus.rst
new file mode 100644
index 000000000000..7555ecd538de
--- /dev/null
+++ b/Documentation/driver-api/slimbus.rst
@@ -0,0 +1,127 @@
1============================
2Linux kernel SLIMbus support
3============================
4
5Overview
6========
7
8What is SLIMbus?
9----------------
10SLIMbus (Serial Low Power Interchip Media Bus) is a specification developed by
11MIPI (Mobile Industry Processor Interface) alliance. The bus uses master/slave
12configuration, and is a 2-wire multi-drop implementation (clock, and data).
13
14Currently, SLIMbus is used to interface between application processors of SoCs
15(System-on-Chip) and peripheral components (typically codec). SLIMbus uses
16Time-Division-Multiplexing to accommodate multiple data channels, and
17a control channel.
18
19The control channel is used for various control functions such as bus
20management, configuration and status updates. These messages can be unicast (e.g.
21reading/writing device specific values), or multicast (e.g. data channel
22reconfiguration sequence is a broadcast message announced to all devices)
23
24A data channel is used for data-transfer between 2 SLIMbus devices. Data
25channel uses dedicated ports on the device.
26
27Hardware description:
28---------------------
29SLIMbus specification has different types of device classifications based on
30their capabilities.
31A manager device is responsible for enumeration, configuration, and dynamic
32channel allocation. Every bus has 1 active manager.
33
34A generic device is a device providing application functionality (e.g. codec).
35
36Framer device is responsible for clocking the bus, and transmitting frame-sync
37and framing information on the bus.
38
39Each SLIMbus component has an interface device for monitoring physical layer.
40
41Typically each SoC contains SLIMbus component having 1 manager, 1 framer device,
421 generic device (for data channel support), and 1 interface device.
43External peripheral SLIMbus component usually has 1 generic device (for
44functionality/data channel support), and an associated interface device.
45The generic device's registers are mapped as 'value elements' so that they can
46be written/read using SLIMbus control channel exchanging control/status type of
47information.
48In case there are multiple framer devices on the same bus, manager device is
49responsible to select the active-framer for clocking the bus.
50
51Per specification, SLIMbus uses "clock gears" to do power management based on
52current frequency and bandwidth requirements. There are 10 clock gears and each
53gear changes the SLIMbus frequency to be twice its previous gear.
54
55Each device has a 6-byte enumeration-address and the manager assigns every
56device with a 1-byte logical address after the devices report presence on the
57bus.
58
59Software description:
60---------------------
61There are 2 types of SLIMbus drivers:
62
63slim_controller represents a 'controller' for SLIMbus. This driver should
64implement duties needed by the SoC (manager device, associated
65interface device for monitoring the layers and reporting errors, default
66framer device).
67
68slim_device represents the 'generic device/component' for SLIMbus, and a
69slim_driver should implement driver for that slim_device.
70
71Device notifications to the driver:
72-----------------------------------
73Since SLIMbus devices have mechanisms for reporting their presence, the
74framework allows drivers to bind when corresponding devices report their
75presence on the bus.
76However, it is possible that the driver needs to be probed
77first so that it can enable corresponding SLIMbus device (e.g. power it up and/or
78take it out of reset). To support that behavior, the framework allows drivers
79to probe first as well (e.g. using standard DeviceTree compatibility field).
80This creates the necessity for the driver to know when the device is functional
81(i.e. reported present). device_up callback is used for that reason when the
82device reports present and is assigned a logical address by the controller.
83
84Similarly, SLIMbus devices 'report absent' when they go down. A 'device_down'
85callback notifies the driver when the device reports absent and its logical
86address assignment is invalidated by the controller.
87
88Another notification "boot_device" is used to notify the slim_driver when
89controller resets the bus. This notification allows the driver to take necessary
90steps to boot the device so that it's functional after the bus has been reset.
91
92Driver and Controller APIs:
93--------------------------
94.. kernel-doc:: include/linux/slimbus.h
95 :internal:
96
97.. kernel-doc:: drivers/slimbus/slimbus.h
98 :internal:
99
100.. kernel-doc:: drivers/slimbus/core.c
101 :export:
102
103Clock-pause:
104------------
105SLIMbus mandates that a reconfiguration sequence (known as clock-pause) be
106broadcast to all active devices on the bus before the bus can enter low-power
107mode. Controller uses this sequence when it decides to enter low-power mode so
108that corresponding clocks and/or power-rails can be turned off to save power.
109Clock-pause is exited by waking up framer device (if controller driver initiates
110exiting low power mode), or by toggling the data line (if a slave device wants
111to initiate it).
112
113Clock-pause APIs:
114~~~~~~~~~~~~~~~~~
115.. kernel-doc:: drivers/slimbus/sched.c
116 :export:
117
118Messaging:
119----------
120The framework supports regmap and read/write apis to exchange control-information
121with a SLIMbus device. APIs can be synchronous or asynchronous.
122The header file <linux/slimbus.h> has more documentation about messaging APIs.
123
124Messaging APIs:
125~~~~~~~~~~~~~~~
126.. kernel-doc:: drivers/slimbus/messaging.c
127 :export:
diff --git a/Documentation/driver-api/soundwire/index.rst b/Documentation/driver-api/soundwire/index.rst
new file mode 100644
index 000000000000..647e94654752
--- /dev/null
+++ b/Documentation/driver-api/soundwire/index.rst
@@ -0,0 +1,15 @@
1=======================
2SoundWire Documentation
3=======================
4
5.. toctree::
6 :maxdepth: 1
7
8 summary
9
10.. only:: subproject
11
12 Indices
13 =======
14
15 * :ref:`genindex`
diff --git a/Documentation/driver-api/soundwire/summary.rst b/Documentation/driver-api/soundwire/summary.rst
new file mode 100644
index 000000000000..8193125a2bfb
--- /dev/null
+++ b/Documentation/driver-api/soundwire/summary.rst
@@ -0,0 +1,207 @@
1===========================
2SoundWire Subsystem Summary
3===========================
4
5SoundWire is a new interface ratified in 2015 by the MIPI Alliance.
6SoundWire is used for transporting data typically related to audio
7functions. SoundWire interface is optimized to integrate audio devices in
8mobile or mobile inspired systems.
9
10SoundWire is a 2-pin multi-drop interface with data and clock line. It
11facilitates development of low cost, efficient, high performance systems.
12Broad level key features of SoundWire interface include:
13
14 (1) Transporting all of payload data channels, control information, and setup
15 commands over a single two-pin interface.
16
17 (2) Lower clock frequency, and hence lower power consumption, by use of DDR
18 (Dual Data Rate) data transmission.
19
20 (3) Clock scaling and optional multiple data lanes to give wide flexibility
21 in data rate to match system requirements.
22
23 (4) Device status monitoring, including interrupt-style alerts to the Master.
24
25The SoundWire protocol supports up to eleven Slave interfaces. All the
26interfaces share the common Bus containing data and clock line. Each of the
27Slaves can support up to 14 Data Ports. 13 Data Ports are dedicated to audio
28transport. Data Port0 is dedicated to transport of Bulk control information,
29each of the audio Data Ports (1..14) can support up to 8 Channels in
30transmit or receiving mode (typically fixed direction but configurable
31direction is enabled by the specification). Bandwidth restrictions to
32~19.2..24.576Mbits/s don't however allow for 11*13*8 channels to be
33transmitted simultaneously.
34
35Below figure shows an example of connectivity between a SoundWire Master and
36two Slave devices. ::
37
38 +---------------+ +---------------+
39 | | Clock Signal | |
40 | Master |-------+-------------------------------| Slave |
41 | Interface | | Data Signal | Interface 1 |
42 | |-------|-------+-----------------------| |
43 +---------------+ | | +---------------+
44 | |
45 | |
46 | |
47 +--+-------+--+
48 | |
49 | Slave |
50 | Interface 2 |
51 | |
52 +-------------+
53
54
55Terminology
56===========
57
58The MIPI SoundWire specification uses the term 'device' to refer to a Master
59or Slave interface, which of course can be confusing. In this summary and
60code we use the term interface only to refer to the hardware. We follow the
61Linux device model by mapping each Slave interface connected on the bus as a
62device managed by a specific driver. The Linux SoundWire subsystem provides
63a framework to implement a SoundWire Slave driver with an API allowing
643rd-party vendors to enable implementation-defined functionality while
65common setup/configuration tasks are handled by the bus.
66
67Bus:
68Implements SoundWire Linux Bus which handles the SoundWire protocol.
69Programs all the MIPI-defined Slave registers. Represents a SoundWire
70Master. Multiple instances of Bus may be present in a system.
71
72Slave:
73Registers as SoundWire Slave device (Linux Device). Multiple Slave devices
74can register to a Bus instance.
75
76Slave driver:
77Driver controlling the Slave device. MIPI-specified registers are controlled
78directly by the Bus (and transmitted through the Master driver/interface).
79Any implementation-defined Slave register is controlled by Slave driver. In
80practice, it is expected that the Slave driver relies on regmap and does not
81request direct register access.
82
83Programming interfaces (SoundWire Master interface Driver)
84==========================================================
85
86SoundWire Bus supports programming interfaces for the SoundWire Master
87implementation and SoundWire Slave devices. All the code uses the "sdw"
88prefix commonly used by SoC designers and 3rd party vendors.
89
90Each of the SoundWire Master interfaces needs to be registered to the Bus.
91Bus implements API to read standard Master MIPI properties and also provides
92callback in Master ops for Master driver to implement its own functions that
93provides capabilities information. DT support is not implemented at this
94time but should be trivial to add since capabilities are enabled with the
95``device_property_`` API.
96
97The Master interface along with the Master interface capabilities are
98registered based on board file, DT or ACPI.
99
100Following is the Bus API to register the SoundWire Bus:
101
102.. code-block:: c
103
104 int sdw_add_bus_master(struct sdw_bus *bus)
105 {
106 if (!bus->dev)
107 return -ENODEV;
108
109 mutex_init(&bus->lock);
110 INIT_LIST_HEAD(&bus->slaves);
111
112 /* Check ACPI for Slave devices */
113 sdw_acpi_find_slaves(bus);
114
115 /* Check DT for Slave devices */
116 sdw_of_find_slaves(bus);
117
118 return 0;
119 }
120
121This will initialize sdw_bus object for Master device. "sdw_master_ops" and
122"sdw_master_port_ops" callback functions are provided to the Bus.
123
124"sdw_master_ops" is used by Bus to control the Bus in the hardware specific
125way. It includes Bus control functions such as sending the SoundWire
126read/write messages on Bus, setting up clock frequency & Stream
127Synchronization Point (SSP). The "sdw_master_ops" structure abstracts the
128hardware details of the Master from the Bus.
129
130"sdw_master_port_ops" is used by Bus to setup the Port parameters of the
131Master interface Port. Master interface Port register map is not defined by
132MIPI specification, so Bus calls the "sdw_master_port_ops" callback
133function to do Port operations like "Port Prepare", "Port Transport params
134set", "Port enable and disable". The implementation of the Master driver can
135then perform hardware-specific configurations.
136
137Programming interfaces (SoundWire Slave Driver)
138===============================================
139
140The MIPI specification requires each Slave interface to expose a unique
14148-bit identifier, stored in 6 read-only dev_id registers. This dev_id
142identifier contains vendor and part information, as well as a field enabling
143to differentiate between identical components. An additional class field is
144currently unused. Slave driver is written for a specific vendor and part
145identifier, Bus enumerates the Slave device based on these two ids.
146Slave device and driver match is done based on these two ids . Probe
147of the Slave driver is called by Bus on successful match between device and
148driver id. A parent/child relationship is enforced between Master and Slave
149devices (the logical representation is aligned with the physical
150connectivity).
151
152The information on Master/Slave dependencies is stored in platform data,
153board-file, ACPI or DT. The MIPI Software specification defines additional
154link_id parameters for controllers that have multiple Master interfaces. The
155dev_id registers are only unique in the scope of a link, and the link_id
156unique in the scope of a controller. Both dev_id and link_id are not
157necessarily unique at the system level but the parent/child information is
158used to avoid ambiguity.
159
160.. code-block:: c
161
162 static const struct sdw_device_id slave_id[] = {
163 SDW_SLAVE_ENTRY(0x025d, 0x700, 0),
164 {},
165 };
166 MODULE_DEVICE_TABLE(sdw, slave_id);
167
168 static struct sdw_driver slave_sdw_driver = {
169 .driver = {
170 .name = "slave_xxx",
171 .pm = &slave_runtime_pm,
172 },
173 .probe = slave_sdw_probe,
174 .remove = slave_sdw_remove,
175 .ops = &slave_slave_ops,
176 .id_table = slave_id,
177 };
178
179
180For capabilities, Bus implements API to read standard Slave MIPI properties
181and also provides callback in Slave ops for Slave driver to implement own
182function that provides capabilities information. Bus needs to know a set of
183Slave capabilities to program Slave registers and to control the Bus
184reconfigurations.
185
186Future enhancements to be done
187==============================
188
189 (1) Bulk Register Access (BRA) transfers.
190
191
192 (2) Multiple data lane support.
193
194Links
195=====
196
197SoundWire MIPI specification 1.1 is available at:
198https://members.mipi.org/wg/All-Members/document/70290
199
200SoundWire MIPI DisCo (Discovery and Configuration) specification is
201available at:
202https://www.mipi.org/specifications/mipi-disco-soundwire
203
204(publicly accessible with registration or directly accessible to MIPI
205members)
206
207MIPI Alliance Manufacturer ID Page: mid.mipi.org
diff --git a/Documentation/driver-api/uio-howto.rst b/Documentation/driver-api/uio-howto.rst
index f73d660b2956..693e3bd84e79 100644
--- a/Documentation/driver-api/uio-howto.rst
+++ b/Documentation/driver-api/uio-howto.rst
@@ -667,27 +667,28 @@ Making the driver recognize the device
667Since the driver does not declare any device GUID's, it will not get 667Since the driver does not declare any device GUID's, it will not get
668loaded automatically and will not automatically bind to any devices, you 668loaded automatically and will not automatically bind to any devices, you
669must load it and allocate id to the driver yourself. For example, to use 669must load it and allocate id to the driver yourself. For example, to use
670the network device GUID:: 670the network device class GUID::
671 671
672 modprobe uio_hv_generic 672 modprobe uio_hv_generic
673 echo "f8615163-df3e-46c5-913f-f2d2f965ed0e" > /sys/bus/vmbus/drivers/uio_hv_generic/new_id 673 echo "f8615163-df3e-46c5-913f-f2d2f965ed0e" > /sys/bus/vmbus/drivers/uio_hv_generic/new_id
674 674
675If there already is a hardware specific kernel driver for the device, 675If there already is a hardware specific kernel driver for the device,
676the generic driver still won't bind to it, in this case if you want to 676the generic driver still won't bind to it, in this case if you want to
677use the generic driver (why would you?) you'll have to manually unbind 677use the generic driver for a userspace library you'll have to manually unbind
678the hardware specific driver and bind the generic driver, like this:: 678the hardware specific driver and bind the generic driver, using the device specific GUID
679like this::
679 680
680 echo -n vmbus-ed963694-e847-4b2a-85af-bc9cfc11d6f3 > /sys/bus/vmbus/drivers/hv_netvsc/unbind 681 echo -n ed963694-e847-4b2a-85af-bc9cfc11d6f3 > /sys/bus/vmbus/drivers/hv_netvsc/unbind
681 echo -n vmbus-ed963694-e847-4b2a-85af-bc9cfc11d6f3 > /sys/bus/vmbus/drivers/uio_hv_generic/bind 682 echo -n ed963694-e847-4b2a-85af-bc9cfc11d6f3 > /sys/bus/vmbus/drivers/uio_hv_generic/bind
682 683
683You can verify that the device has been bound to the driver by looking 684You can verify that the device has been bound to the driver by looking
684for it in sysfs, for example like the following:: 685for it in sysfs, for example like the following::
685 686
686 ls -l /sys/bus/vmbus/devices/vmbus-ed963694-e847-4b2a-85af-bc9cfc11d6f3/driver 687 ls -l /sys/bus/vmbus/devices/ed963694-e847-4b2a-85af-bc9cfc11d6f3/driver
687 688
688Which if successful should print:: 689Which if successful should print::
689 690
690 .../vmbus-ed963694-e847-4b2a-85af-bc9cfc11d6f3/driver -> ../../../bus/vmbus/drivers/uio_hv_generic 691 .../ed963694-e847-4b2a-85af-bc9cfc11d6f3/driver -> ../../../bus/vmbus/drivers/uio_hv_generic
691 692
692Things to know about uio_hv_generic 693Things to know about uio_hv_generic
693----------------------------------- 694-----------------------------------
@@ -697,6 +698,17 @@ prevents the device from generating further interrupts until the bit is
697cleared. The userspace driver should clear this bit before blocking and 698cleared. The userspace driver should clear this bit before blocking and
698waiting for more interrupts. 699waiting for more interrupts.
699 700
701When host rescinds a device, the interrupt file descriptor is marked down
702and any reads of the interrupt file descriptor will return -EIO. Similar
703to a closed socket or disconnected serial device.
704
705The vmbus device regions are mapped into uio device resources:
706 0) Channel ring buffers: guest to host and host to guest
707 1) Guest to host interrupt signalling pages
708 2) Guest to host monitor page
709 3) Network receive buffer region
710 4) Network send buffer region
711
700Further information 712Further information
701=================== 713===================
702 714