-
Notifications
You must be signed in to change notification settings - Fork 132
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add SDCA DisCo Parsing #5302
base: topic/sof-dev
Are you sure you want to change the base?
Add SDCA DisCo Parsing #5302
Conversation
Fix up some variable/struct member naming, add some missing kerneldoc and fix some minor formatting/whitespace issues. Signed-off-by: Charles Keepax <[email protected]>
Add a helper function to parse all the Function and Entity information from ACPI. In SDCA each device may have several Functions and each corresponds to a specific audio capability such as say amplifier playback or microphone capture. Each Function then contains a number of Entities that represent individual parts of the audio signal chain and are linked together in a graph similar to DAPM. Signed-off-by: Pierre-Louis Bossart <[email protected]> Signed-off-by: Charles Keepax <[email protected]>
Within SDCA there is a special Entity called Entity 0 which is used to hold Function level controls. Whilst Entity 0 isn't a full SDCA entity, it is helpful to add an sdca_entity structure for it. This will allow it to be treated identically when the code to add control handling is added. Signed-off-by: Charles Keepax <[email protected]>
Each SDCA Function may contain a table of register writes that should be written out when the Function is first probed. Add code to parse this table from the DisCo tables in ACPI. Signed-off-by: Charles Keepax <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice work @charleskeepax ! LGTM
@bardliao @ujfalusi pls review
SDCA_FUNCTION_TYPE_SMART_AMP = 0x01, /* Amplifier with protection features */ | ||
SDCA_FUNCTION_TYPE_SIMPLE_AMP = 0x02, /* subset of SmartAmp */ | ||
SDCA_FUNCTION_TYPE_SMART_MIC = 0x03, /* Smart microphone with acoustic triggers */ | ||
SDCA_FUNCTION_TYPE_SIMPLE_MIC = 0x04, /* subset of SmartMic */ | ||
SDCA_FUNCTION_TYPE_SPEAKER_MIC = 0x05, /* Combination of SmartMic and SmartAmp */ | ||
SDCA_FUNCTION_TYPE_UAJ = 0x06, /* 3.5mm Universal Audio jack */ | ||
SDCA_FUNCTION_TYPE_RJ = 0x07, /* Retaskable jack */ | ||
SDCA_FUNCTION_TYPE_SIMPLE_JACK = 0x08, /* Subset of UAJ */ | ||
SDCA_FUNCTION_TYPE_HID = 0x0A, /* Human Interface Device, for e.g. buttons */ | ||
SDCA_FUNCTION_TYPE_IMP_DEF = 0x1F, /* Implementation-defined function */ | ||
SDCA_FUNCTION_TYPE_SMART_AMP = 0x01, | ||
SDCA_FUNCTION_TYPE_SIMPLE_AMP = 0x02, | ||
SDCA_FUNCTION_TYPE_SMART_MIC = 0x03, | ||
SDCA_FUNCTION_TYPE_SIMPLE_MIC = 0x04, | ||
SDCA_FUNCTION_TYPE_SPEAKER_MIC = 0x05, | ||
SDCA_FUNCTION_TYPE_UAJ = 0x06, | ||
SDCA_FUNCTION_TYPE_RJ = 0x07, | ||
SDCA_FUNCTION_TYPE_SIMPLE_JACK = 0x08, | ||
SDCA_FUNCTION_TYPE_HID = 0x0A, | ||
SDCA_FUNCTION_TYPE_IMP_DEF = 0x1F, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
any reason to remove all the comments ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Moved them into kerneldoc, just above.
Each SDCA Entity will contain a number of Controls, these are basically equivalent to registers. Although a single Control will only ever contain a single field. Some of these would map directly to ALSA controls once more of the SDCA class driver is implemented. These controls are parsed out of the DisCo ACPI tables. One small todo here is that each Control can have multiple sub-entries (Control Numbers), these are typically used to represent channels. Whilst support is present for these, currently the ACPI properties that would allow differing defaults for each channel are not parsed. But there is nothing here that should prevent that being added in the future. Signed-off-by: Charles Keepax <[email protected]>
DisCo/SDCA contains small buffers of data that hold ranges of valid values for the various SDCA Controls. Add support for parsing these from ACPI. Signed-off-by: Charles Keepax <[email protected]>
Within SDCA collections of Channels are referred to as Clusters, each Channel within a Cluster can have various properties attached to it. For example a stereo audio stream, would have a Cluster with 2 Channels one marked as left and the other as right. Various Clusters are specified in DisCo/ACPI and controls then allow the class driver to select between these channel configurations. Add support for parsing these Cluster definitions. Signed-off-by: Charles Keepax <[email protected]>
Add support for parsing the Input/Output Terminal Entity properties from DisCo/ACPI. Signed-off-by: Charles Keepax <[email protected]>
Add supprot for parsing the Clock Source Entity properties from DisCo/ACPI. Signed-off-by: Charles Keepax <[email protected]>
Add support for parsing the Power Domain Entity properties from DisCo/ACPI. Signed-off-by: Charles Keepax <[email protected]>
ad1cf56
to
440c58f
Compare
void sdca_lookup_functions(struct sdw_slave *slave) | ||
{ | ||
struct device *dev = &slave->dev; | ||
struct acpi_device *adev = to_acpi_device_node(dev->fwnode); | ||
|
||
if (!adev) { | ||
dev_info(dev, "No matching ACPI device found, ignoring peripheral\n"); | ||
dev_info(dev, "no matching ACPI device found, ignoring peripheral\n"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't have objection. But may I know the reason of the change?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Was just consistency all the other error messages in the file didn't capitalize so I made this one match them.
const char *label; | ||
int id; | ||
enum sdca_entity_type type; | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nitpick: No new line is required.
|
||
struct sdca_entity *entities; | ||
int num_entities; | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nitpick: No new line is required.
Having just missed the merge window with this series I will push it here first and then start upstream review once the merge window closes. The series adds support for parsing most of the relevant information from ACPI/DisCo. The next steps I am looking at after this are adding helper functions (part of the library concept) for creating regmaps, lists of controls and DAPM graphs.