Merge tag 'char-misc-5.8-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 large set of char/misc driver patches for 5.8-rc1 Included in here are: - habanalabs driver updates, loads - mhi bus driver updates - extcon driver updates - clk driver updates (approved by the clock maintainer) - firmware driver updates - fpga driver updates - gnss driver updates - coresight driver updates - interconnect driver updates - parport driver updates (it's still alive!) - nvmem driver updates - soundwire driver updates - visorbus driver updates - w1 driver updates - various misc driver updates In short, loads of different driver subsystem updates along with the drivers as well. All have been in linux-next for a while with no reported issues" * tag 'char-misc-5.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc: (233 commits) habanalabs: correctly cast u64 to void* habanalabs: initialize variable to default value extcon: arizona: Fix runtime PM imbalance on error extcon: max14577: Add proper dt-compatible strings extcon: adc-jack: Fix an error handling path in 'adc_jack_probe()' extcon: remove redundant assignment to variable idx w1: omap-hdq: print dev_err if irq flags are not cleared w1: omap-hdq: fix interrupt handling which did show spurious timeouts w1: omap-hdq: fix return value to be -1 if there is a timeout w1: omap-hdq: cleanup to add missing newline for some dev_dbg /dev/mem: Revoke mappings when a driver claims the region misc: xilinx-sdfec: convert get_user_pages() --> pin_user_pages() misc: xilinx-sdfec: cleanup return value in xsdfec_table_write() misc: xilinx-sdfec: improve get_user_pages_fast() error handling nvmem: qfprom: remove incorrect write support habanalabs: handle MMU cache invalidation timeout habanalabs: don't allow hard reset with open processes habanalabs: GAUDI does not support soft-reset habanalabs: add print for soft reset due to event habanalabs: improve MMU cache invalidation code ...
This commit is contained in:
@@ -75,8 +75,33 @@ Slaves are using single port. ::
|
||||
| (Data) |
|
||||
+---------------+
|
||||
|
||||
Example 4: Stereo Stream with L and R channels is rendered by
|
||||
Master. Both of the L and R channels are received by two different
|
||||
Slaves. Master and both Slaves are using single port handling
|
||||
L+R. Each Slave device processes the L + R data locally, typically
|
||||
based on static configuration or dynamic orientation, and may drive
|
||||
one or more speakers. ::
|
||||
|
||||
Example 4: Stereo Stream with L and R channel is rendered by two different
|
||||
+---------------+ Clock Signal +---------------+
|
||||
| Master +---------+------------------------+ Slave |
|
||||
| Interface | | | Interface |
|
||||
| | | | 1 |
|
||||
| | | Data Signal | |
|
||||
| L + R +---+------------------------------+ L + R |
|
||||
| (Data) | | | Data Direction | (Data) |
|
||||
+---------------+ | | +-------------> +---------------+
|
||||
| |
|
||||
| |
|
||||
| | +---------------+
|
||||
| +----------------------> | Slave |
|
||||
| | Interface |
|
||||
| | 2 |
|
||||
| | |
|
||||
+----------------------------> | L + R |
|
||||
| (Data) |
|
||||
+---------------+
|
||||
|
||||
Example 5: Stereo Stream with L and R channel is rendered by two different
|
||||
Ports of the Master and is received by only single Port of the Slave
|
||||
interface. ::
|
||||
|
||||
@@ -101,7 +126,7 @@ interface. ::
|
||||
+--------------------+ | |
|
||||
+----------------+
|
||||
|
||||
Example 5: Stereo Stream with L and R channel is rendered by 2 Masters, each
|
||||
Example 6: Stereo Stream with L and R channel is rendered by 2 Masters, each
|
||||
rendering one channel, and is received by two different Slaves, each
|
||||
receiving one channel. Both Masters and both Slaves are using single port. ::
|
||||
|
||||
@@ -123,12 +148,70 @@ receiving one channel. Both Masters and both Slaves are using single port. ::
|
||||
| (Data) | Data Direction | (Data) |
|
||||
+---------------+ +-----------------------> +---------------+
|
||||
|
||||
Note: In multi-link cases like above, to lock, one would acquire a global
|
||||
Example 7: Stereo Stream with L and R channel is rendered by 2
|
||||
Masters, each rendering both channels. Each Slave receives L + R. This
|
||||
is the same application as Example 4 but with Slaves placed on
|
||||
separate links. ::
|
||||
|
||||
+---------------+ Clock Signal +---------------+
|
||||
| Master +----------------------------------+ Slave |
|
||||
| Interface | | Interface |
|
||||
| 1 | | 1 |
|
||||
| | Data Signal | |
|
||||
| L + R +----------------------------------+ L + R |
|
||||
| (Data) | Data Direction | (Data) |
|
||||
+---------------+ +-----------------------> +---------------+
|
||||
|
||||
+---------------+ Clock Signal +---------------+
|
||||
| Master +----------------------------------+ Slave |
|
||||
| Interface | | Interface |
|
||||
| 2 | | 2 |
|
||||
| | Data Signal | |
|
||||
| L + R +----------------------------------+ L + R |
|
||||
| (Data) | Data Direction | (Data) |
|
||||
+---------------+ +-----------------------> +---------------+
|
||||
|
||||
Example 8: 4-channel Stream is rendered by 2 Masters, each rendering a
|
||||
2 channels. Each Slave receives 2 channels. ::
|
||||
|
||||
+---------------+ Clock Signal +---------------+
|
||||
| Master +----------------------------------+ Slave |
|
||||
| Interface | | Interface |
|
||||
| 1 | | 1 |
|
||||
| | Data Signal | |
|
||||
| L1 + R1 +----------------------------------+ L1 + R1 |
|
||||
| (Data) | Data Direction | (Data) |
|
||||
+---------------+ +-----------------------> +---------------+
|
||||
|
||||
+---------------+ Clock Signal +---------------+
|
||||
| Master +----------------------------------+ Slave |
|
||||
| Interface | | Interface |
|
||||
| 2 | | 2 |
|
||||
| | Data Signal | |
|
||||
| L2 + R2 +----------------------------------+ L2 + R2 |
|
||||
| (Data) | Data Direction | (Data) |
|
||||
+---------------+ +-----------------------> +---------------+
|
||||
|
||||
Note1: In multi-link cases like above, to lock, one would acquire a global
|
||||
lock and then go on locking bus instances. But, in this case the caller
|
||||
framework(ASoC DPCM) guarantees that stream operations on a card are
|
||||
always serialized. So, there is no race condition and hence no need for
|
||||
global lock.
|
||||
|
||||
Note2: A Slave device may be configured to receive all channels
|
||||
transmitted on a link for a given Stream (Example 4) or just a subset
|
||||
of the data (Example 3). The configuration of the Slave device is not
|
||||
handled by a SoundWire subsystem API, but instead by the
|
||||
snd_soc_dai_set_tdm_slot() API. The platform or machine driver will
|
||||
typically configure which of the slots are used. For Example 4, the
|
||||
same slots would be used by all Devices, while for Example 3 the Slave
|
||||
Device1 would use e.g. Slot 0 and Slave device2 slot 1.
|
||||
|
||||
Note3: Multiple Sink ports can extract the same information for the
|
||||
same bitSlots in the SoundWire frame, however multiple Source ports
|
||||
shall be configured with different bitSlot configurations. This is the
|
||||
same limitation as with I2S/PCM TDM usages.
|
||||
|
||||
SoundWire Stream Management flow
|
||||
================================
|
||||
|
||||
|
@@ -101,10 +101,11 @@ Following is the Bus API to register the SoundWire Bus:
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
int sdw_add_bus_master(struct sdw_bus *bus)
|
||||
int sdw_bus_master_add(struct sdw_bus *bus,
|
||||
struct device *parent,
|
||||
struct fwnode_handle)
|
||||
{
|
||||
if (!bus->dev)
|
||||
return -ENODEV;
|
||||
sdw_master_device_add(bus, parent, fwnode);
|
||||
|
||||
mutex_init(&bus->lock);
|
||||
INIT_LIST_HEAD(&bus->slaves);
|
||||
|
Reference in New Issue
Block a user