Skip to content
Snippets Groups Projects
Forked from drm / kernel
Source project has a limited visibility.
  • Pierre Bossart's avatar
    3a513da1
    ASoC: SDCA: add initial module · 3a513da1
    Pierre Bossart authored
    Add new module for SDCA (SoundWire Device Class for Audio) support.
    For now just add a parser to identify the SDCA revision and the
    function mask.
    
    Note that the SDCA definitions and related MIPI DisCo properties are
    defined only for ACPI platforms and extracted with _DSD helpers. There
    is currently no support for Device Tree in the specification, the
    'depends on ACPI' reflects this design limitation. This might change
    in a future revision of the specification but for SDCA 1.0 ACPI is the
    only supported type of platform firmware.
    
    The SDCA library is defined with static inline fallbacks, which will
    allow for unconditional addition of SDCA support in common parts of
    the code.
    
    The design follows a four-step process:
    
    1) Basic information related to Functions is extracted from MIPI DisCo
    tables and stored in the 'struct sdw_slave'. Devm_ based memory
    allocation is not allowed at this point prior to a driver probe, so we only
    store the function node, address and type.
    
    2) When a codec driver probes, it will register subdevices for each
    Function identified in phase 1)
    
    3) a driver will probe for each subdevice and addition parsing/memory
    allocation takes place at this level. devm_ based allocation is highly
    encouraged to make error handling manageable.
    
    4) Before the peripheral device becomes physically attached, register
    access is not permitted and the regmaps are cache-only. When
    peripheral device is enumerated, the bus level uses the
    'update_status' notification; after optional device-level
    initialization, the codec driver will notify each of the subdevices so
    that they can start interacting with the hardware.
    
    Note that the context extracted in 1) should be arguably be handled
    completely in the codec driver probe. That would however make it
    difficult to use the ACPI information for machine quirks, and
    e.g. select different machine driver and topologies as done for the
    RT712_VB handling later in the series. To make the implementation of
    quirks simpler, this patchset extracts a minimal amount of context
    (interface revision and number/type of Functions) before the codec
    driver probe, and stores this context in the scope of the 'struct
    sdw_slave'.
    
    The SDCA library can also be used in a vendor-specific driver without
    creating subdevices, e.g. to retrieve the 'initialization-table'
    values to write platform-specific values as needed.
    
    For more technical details, the SDCA specification is available for
    public downloads at https://www.mipi.org/mipi-sdca-v1-0-download
    
    
    
    Signed-off-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    Reviewed-by: default avatarPéter Ujfalusi <peter.ujfalusi@linux.intel.com>
    Signed-off-by: default avatarBard Liao <yung-chuan.liao@linux.intel.com>
    Link: https://patch.msgid.link/20241016102333.294448-4-yung-chuan.liao@linux.intel.com
    
    
    Signed-off-by: default avatarMark Brown <broonie@kernel.org>
    3a513da1
    History
    ASoC: SDCA: add initial module
    Pierre Bossart authored
    Add new module for SDCA (SoundWire Device Class for Audio) support.
    For now just add a parser to identify the SDCA revision and the
    function mask.
    
    Note that the SDCA definitions and related MIPI DisCo properties are
    defined only for ACPI platforms and extracted with _DSD helpers. There
    is currently no support for Device Tree in the specification, the
    'depends on ACPI' reflects this design limitation. This might change
    in a future revision of the specification but for SDCA 1.0 ACPI is the
    only supported type of platform firmware.
    
    The SDCA library is defined with static inline fallbacks, which will
    allow for unconditional addition of SDCA support in common parts of
    the code.
    
    The design follows a four-step process:
    
    1) Basic information related to Functions is extracted from MIPI DisCo
    tables and stored in the 'struct sdw_slave'. Devm_ based memory
    allocation is not allowed at this point prior to a driver probe, so we only
    store the function node, address and type.
    
    2) When a codec driver probes, it will register subdevices for each
    Function identified in phase 1)
    
    3) a driver will probe for each subdevice and addition parsing/memory
    allocation takes place at this level. devm_ based allocation is highly
    encouraged to make error handling manageable.
    
    4) Before the peripheral device becomes physically attached, register
    access is not permitted and the regmaps are cache-only. When
    peripheral device is enumerated, the bus level uses the
    'update_status' notification; after optional device-level
    initialization, the codec driver will notify each of the subdevices so
    that they can start interacting with the hardware.
    
    Note that the context extracted in 1) should be arguably be handled
    completely in the codec driver probe. That would however make it
    difficult to use the ACPI information for machine quirks, and
    e.g. select different machine driver and topologies as done for the
    RT712_VB handling later in the series. To make the implementation of
    quirks simpler, this patchset extracts a minimal amount of context
    (interface revision and number/type of Functions) before the codec
    driver probe, and stores this context in the scope of the 'struct
    sdw_slave'.
    
    The SDCA library can also be used in a vendor-specific driver without
    creating subdevices, e.g. to retrieve the 'initialization-table'
    values to write platform-specific values as needed.
    
    For more technical details, the SDCA specification is available for
    public downloads at https://www.mipi.org/mipi-sdca-v1-0-download
    
    
    
    Signed-off-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    Reviewed-by: default avatarPéter Ujfalusi <peter.ujfalusi@linux.intel.com>
    Signed-off-by: default avatarBard Liao <yung-chuan.liao@linux.intel.com>
    Link: https://patch.msgid.link/20241016102333.294448-4-yung-chuan.liao@linux.intel.com
    
    
    Signed-off-by: default avatarMark Brown <broonie@kernel.org>