• Pierre-Louis Bossart's avatar
    soundwire: intel_auxdevice: add hybrid IDA-based device_number allocation · e66f91a2
    Pierre-Louis Bossart authored
    The IDA-based allocation is useful to simplify debug, but it was also
    introduced as a prerequisite to deal with the Intel Lunar Lake
    hardware programming sequences: the wake-ups have to be handled with a
    system-unique SDI address at the HDaudio controller level.
    
    At the time, the restriction introduced by the IDA to 8 devices total
    seemed perfectly fine, but recently hardware vendors created
    configurations with more than 8 devices.
    
    Add a new allocation strategy to allow for more than 8 devices using
    information on the type of devices, and only use the IDA-based
    allocation for devices capable of generating a wake.
    
    In theory the information on wake capabilities should come from
    firmware, but none of the existing ACPI tables provide it. The drivers
    set the 'wake_capable' property, but this cannot be used reliably: if
    the driver probe happens *after* the enumeration, then that property
    is not initialized yet. Trying to modify the device_number on-the-fly
    proved to be an impossible task generating race conditions left and
    right.
    
    The only reliable work-around to control the enumeration is to add a
    quirk table. It's ugly but until platform firmware improves, hopefully as a
    result of MIPI/SDCA stardization, we can expect that quirk table to
    grow for each new headset or microphone codec.
    Signed-off-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    Reviewed-by: default avatarRander Wang <rander.wang@intel.com>
    Signed-off-by: default avatarBard Liao <yung-chuan.liao@linux.intel.com>
    Link: https://lore.kernel.org/r/20230731091333.3593132-4-yung-chuan.liao@linux.intel.comSigned-off-by: default avatarVinod Koul <vkoul@kernel.org>
    e66f91a2
intel_auxdevice.c 20.2 KB