• Pierre-Louis Bossart's avatar
    soundwire: intel: skip suspend/resume/wake when link was not started · e4401abb
    Pierre-Louis Bossart authored
    The SoundWire Linux devices are created purely based on information
    provided by platform firmware (e.g. ACPI DSDT table). When the kernel
    finds a matching driver for the device address (_ADR), the probe will
    initialize required data structures and initialize pm ops.
    
    When the SoundWire link is started at a later point, the physical
    devices will synchronize on the SoundWire frames and report their
    attachment status, thereby triggering the enumeration and
    initialization of device registers.
    
    This two-step solution was a conscious design decision to allow e.g. a
    driver to use sideband mechanisms to turn power rails on. This can
    also allow OEMs to describe multiple platforms with the same DSDT
    table, the devices that are not physically present in hardware.
    
    The drawback of this approach is a bit of confusion, with more devices
    than are actually present in hardware. This results in 'ghost'
    devices, for which the driver successfully probes, but that will not
    generate any traffic on the bus. suspend-resume transitions are
    handled by drivers, and skipped when the devices are not physically
    present.
    
    This patch provides a work-around for a second-level of confusion in
    platform firmware: some platforms only use HDaudio links, but
    nevertheless expose SoundWire 'ghost' devices. This results in error
    messages in the Intel driver while trying to suspend/resume these
    links. The simplest solution is to add a boolean status flag to skip
    all suspend/resume/wake sequences if the link was never started.
    Signed-off-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    Signed-off-by: default avatarBard Liao <yung-chuan.liao@linux.intel.com>
    Link: https://lore.kernel.org/r/20210818024954.16873-3-yung-chuan.liao@linux.intel.comSigned-off-by: default avatarVinod Koul <vkoul@kernel.org>
    e4401abb
intel.h 1.84 KB