]> git.ipfire.org Git - thirdparty/linux.git/commit
soundwire: bus: add send_async/wait APIs for BPT protocol
authorPierre-Louis Bossart <pierre-louis.bossart@linux.dev>
Thu, 27 Feb 2025 14:06:06 +0000 (22:06 +0800)
committerVinod Koul <vkoul@kernel.org>
Mon, 10 Mar 2025 07:01:18 +0000 (12:31 +0530)
commit9a756289ac5a8517dc643555d784d830b61576ad
treef1db4ae1082d535fab171ab009ca689a1699af04
parentb422b7237ead30bfb90f52c7563ef518a5849cd9
soundwire: bus: add send_async/wait APIs for BPT protocol

Add definitions and helpers for the BPT/BRA protocol. Peripheral
drivers (aka ASoC codec drivers) can use this API to send bulk data
such as firmware or tables. The design intent is however NOT to
directly use this API but to rely on an intermediate regmap layer.

The API is only available when no other audio streams have been
allocated, and only one BTP/BRA stream is allowed per link. To avoid
the addition of yet another lock, the refcount tests are handled in
the stream master_runtime alloc/free routines where the bus_lock is
already held. Another benefit of this approach is that the same
bus_lock is used to handle runtime and port linked lists, which
reduces the potential for misaligned configurations.

In addition to exclusion with audio streams, BPT transfers have a lot
of overhead, specifically registers writes are needed to enable
transport in DP0. Most DMAs don't handle too well very small data sets
and they may have alignment limitations.

The size and alignment requirements are for now not handled by the
core but must be checked by platform-specific drivers.

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.dev>
Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: Liam Girdwood <liam.r.girdwood@intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Tested-by: shumingf@realtek.com
Link: https://lore.kernel.org/r/20250227140615.8147-8-yung-chuan.liao@linux.intel.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/soundwire/bus.c
drivers/soundwire/bus.h
drivers/soundwire/stream.c
include/linux/soundwire/sdw.h