6d2c66695b
Rather than a plain-vanilla init/exit, this patch provides 3 steps in the initialization needed for driver selection, machine driver selection and deal with power rail dependencies. - ACPI scan: this step is done at a very early stage to detect the presence of a SoundWire Controller and enabled links at the BIOS level. This step may be called from the legacy HDaudio driver, which will abort its probe to let the Sound Open Firmware (SOF) handle the hardware. - probe: this step allocates all the required memory and will add a sdw_bus, which in turn will result in identifying all possible Slaves listed below the Controller ACPI companion device. All the information is reported to the parent PCI driver which will select the relevant machine driver. - startup: this last step starts the bus reset, which results in Slave devices reporting as ATTACHED and being enumerated. This step is only done during the card creation stage, after the DSP is powered to account for internal power rail dependencies. These 3 steps are already supported in the Sound Open firmware drivers and upstream. Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com> Link: https://lore.kernel.org/r/20200531182102.27840-7-yung-chuan.liao@linux.intel.com Signed-off-by: Vinod Koul <vkoul@kernel.org>
44 lines
1.1 KiB
C
44 lines
1.1 KiB
C
/* SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) */
|
|
/* Copyright(c) 2015-17 Intel Corporation. */
|
|
|
|
#ifndef __SDW_INTEL_LOCAL_H
|
|
#define __SDW_INTEL_LOCAL_H
|
|
|
|
/**
|
|
* struct sdw_intel_link_res - Soundwire Intel link resource structure,
|
|
* typically populated by the controller driver.
|
|
* @pdev: platform_device
|
|
* @mmio_base: mmio base of SoundWire registers
|
|
* @registers: Link IO registers base
|
|
* @shim: Audio shim pointer
|
|
* @alh: ALH (Audio Link Hub) pointer
|
|
* @irq: Interrupt line
|
|
* @ops: Shim callback ops
|
|
* @dev: device implementing hw_params and free callbacks
|
|
*/
|
|
struct sdw_intel_link_res {
|
|
struct platform_device *pdev;
|
|
void __iomem *mmio_base; /* not strictly needed, useful for debug */
|
|
void __iomem *registers;
|
|
void __iomem *shim;
|
|
void __iomem *alh;
|
|
int irq;
|
|
const struct sdw_intel_ops *ops;
|
|
struct device *dev;
|
|
};
|
|
|
|
struct sdw_intel {
|
|
struct sdw_cdns cdns;
|
|
int instance;
|
|
struct sdw_intel_link_res *link_res;
|
|
#ifdef CONFIG_DEBUG_FS
|
|
struct dentry *debugfs;
|
|
#endif
|
|
};
|
|
|
|
#define SDW_INTEL_QUIRK_MASK_BUS_DISABLE BIT(1)
|
|
|
|
int intel_master_startup(struct platform_device *pdev);
|
|
|
|
#endif /* __SDW_INTEL_LOCAL_H */
|