ASoC: get sdw dmic number for Intel platforms#5843
Conversation
There was a problem hiding this comment.
Pull request overview
This PR adds support for deriving the SoundWire DMIC channel/transducer count from SDCA firmware-described entities and appending that count to Intel SOF SoundWire DAI link names, enabling more precise topology selection based on connected microphone transducers.
Changes:
- Add
sdca_get_mic_count()to parse SDCA Function entity metadata and return a microphone transducer count. - Update Intel SOF SoundWire machine driver to query SDCA SmartMic functions and suffix the DAI link name with
-<N>ch. - Expose the new helper via
include/sound/sdca.hand import the SDCA symbol namespace in the machine driver.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 5 comments.
| File | Description |
|---|---|
| sound/soc/sdca/sdca_functions.c | Adds sdca_get_mic_count() to parse SDCA entity properties and extract microphone transducer count. |
| sound/soc/intel/boards/sof_sdw.c | Appends SDCA-derived mic channel count to SoundWire capture link name for topology matching; adds SDCA namespace import. |
| include/sound/sdca.h | Exposes sdca_get_mic_count() in the public SDCA header. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.
Comments suppressed due to low confidence (1)
sound/soc/sdca/sdca_functions.c:225
- When the entity-id-list property is missing, fwnode_property_count_u32() returns a negative errno (typically -EINVAL), and the current log prints it as an "entity number" (e.g. -22), which is misleading. This can be made consistent with existing sdca parsing code (find_sdca_entities()) by distinguishing missing list vs exceeding SDCA_MAX_ENTITY_COUNT.
num_entities = fwnode_property_count_u32(function_node,
"mipi-sdca-entity-id-list");
if (num_entities <= 0 || num_entities > SDCA_MAX_ENTITY_COUNT) {
dev_err(&slave->dev,
"%pfwP: entity number %d is invalid for function type %u\n",
function_node, num_entities, function->type);
return -EINVAL;
}
| if (sdw_mic_num <= 0 || strstr(name, "ch")) | ||
| continue; | ||
|
|
||
| name = devm_kasprintf(dev, GFP_KERNEL, "%s-%dch", | ||
| name, sdw_mic_num); | ||
| if (!name) | ||
| return -ENOMEM; | ||
|
|
||
| devm_kfree(dev, tmp); | ||
| break; |
|
This depends on thesofproject/sof#11013. |
We can get how many mic transducers are connected to the codec. The information will be used for selecting the topology with proper dmic channel number. Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
The commit get the sdca sdw dmic number form the mipi-sdca-cluster-channel-id property. The dai link name will be used to select the function topology with a proper dmic channel number. Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
dmic support Now the machine driver provides the sdca dmic channel number information in the dai link name. We can use the information to select different topologies for different dmic channels. To be backward compatible, the 2ch sdca dmic topology will still use the "sdca-mic" topology. Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Topology LGTM @bardliao |
The topology needs to set the DMIC channel number according to the number of transducers connected to the codec. This information can be provided via the DAI link name for proper topology selection.