summary refs log tree commit diff
path: root/drivers/soundwire/slave.c
diff options
context:
space:
mode:
authorVinod Koul <vkoul@kernel.org>2021-03-02 15:51:03 +0800
committerVinod Koul <vkoul@kernel.org>2021-03-22 17:33:10 +0530
commit6558b667a7297418b8951ba54da68d551035ecc5 (patch)
tree0f581357f60c1294ff7a5f9ea3c2f2c375376918 /drivers/soundwire/slave.c
parenta38fd8748464831584a19438cbb3082b5a2dab15 (diff)
downloadlinux-6558b667a7297418b8951ba54da68d551035ecc5.tar.gz
soundwire: add override addr ops
Platform firmware may have incorrect _ADR values causing the driver
probes to fail. Add the override_ops, which when configured will allow
for quirks based on DMI etc to override the addr values.

Co-developed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Signed-off-by: Vinod Koul <vkoul@kernel.org>
Reviewed-by: Rander Wang <rander.wang@intel.com>
Reviewed-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
Link: https://lore.kernel.org/r/20210302075105.11515-2-yung-chuan.liao@linux.intel.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
Diffstat (limited to 'drivers/soundwire/slave.c')
-rw-r--r--drivers/soundwire/slave.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/soundwire/slave.c b/drivers/soundwire/slave.c
index 180f38bd003b..112b21967c7a 100644
--- a/drivers/soundwire/slave.c
+++ b/drivers/soundwire/slave.c
@@ -95,7 +95,7 @@ static bool find_slave(struct sdw_bus *bus,
 		       struct acpi_device *adev,
 		       struct sdw_slave_id *id)
 {
-	unsigned long long addr;
+	u64 addr;
 	unsigned int link_id;
 	acpi_status status;
 
@@ -108,6 +108,12 @@ static bool find_slave(struct sdw_bus *bus,
 		return false;
 	}
 
+	if (bus->ops->override_adr)
+		addr = bus->ops->override_adr(bus, addr);
+
+	if (!addr)
+		return false;
+
 	/* Extract link id from ADR, Bit 51 to 48 (included) */
 	link_id = SDW_DISCO_LINK_ID(addr);