• Kai Vehmanen's avatar
    ASoC: SOF: Intel: fix HDA codec driver probe with multiple controllers · 2c63bea7
    Kai Vehmanen authored
    In case system has multiple HDA controllers, it can happen that
    same HDA codec driver is used for codecs of multiple controllers.
    In this case, SOF may fail to probe the HDA driver and SOF
    initialization fails.
    
    SOF HDA code currently relies that a call to request_module() will
    also run device matching logic to attach driver to the codec instance.
    However if driver for another HDA controller was already loaded and it
    already loaded the HDA codec driver, this breaks current logic in SOF.
    In this case the request_module() SOF does becomes a no-op and HDA
    Codec driver is not attached to the codec instance sitting on the HDA
    bus SOF is controlling. Typical scenario would be a system with both
    external and internal GPUs, with driver of the external GPU loaded
    first.
    
    Fix this by adding similar logic as is used in legacy HDA driver
    where an explicit device_attach() call is done after request_module().
    
    Also add logic to propagate errors reported by device_attach() back
    to caller. This also works in the case where drivers are not built
    as modules.
    Signed-off-by: default avatarKai Vehmanen <kai.vehmanen@linux.intel.com>
    Signed-off-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    Link: https://lore.kernel.org/r/20200110235751.3404-8-pierre-louis.bossart@linux.intel.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
    2c63bea7
hda-codec.c 5.78 KB