Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

ACPI/ALSA/soundwire: add acpi_get_local_u64_address()

Merge series from Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>:

The acpi_get_local_address() helper assumes a 32-bit ADR is used. If
we want to use this helper for SoundWire/SDCA ASoC codecs, we need an
extension where the native 64-bits are used. This patchset suggests a
new helper, acpi_get_local_address() may be renamed if desired in a
folow-up patch.

The path of least resistance would be to merge this patchset in the
ASoC tree, since I have additional changes for ASoC/SDCA (SoundWire
Device Class) that depend on the new helper.

Pierre-Louis Bossart (3):
ACPI: utils: introduce acpi_get_local_u64_address()
soundwire: slave: simplify code with acpi_get_local_u64_address()
ALSA: hda: intel-sdw-acpi: use acpi_get_local_u64_address()

drivers/acpi/utils.c | 22 ++++++++++++++++------
drivers/soundwire/slave.c | 13 ++++---------
include/linux/acpi.h | 1 +
sound/hda/intel-sdw-acpi.c | 6 +++---
4 files changed, 24 insertions(+), 18 deletions(-)

--
2.43.0

+21 -15
+13 -3
drivers/acpi/utils.c
··· 277 277 278 278 EXPORT_SYMBOL(acpi_evaluate_integer); 279 279 280 - int acpi_get_local_address(acpi_handle handle, u32 *addr) 280 + int acpi_get_local_u64_address(acpi_handle handle, u64 *addr) 281 281 { 282 - unsigned long long adr; 283 282 acpi_status status; 284 283 285 - status = acpi_evaluate_integer(handle, METHOD_NAME__ADR, NULL, &adr); 284 + status = acpi_evaluate_integer(handle, METHOD_NAME__ADR, NULL, addr); 286 285 if (ACPI_FAILURE(status)) 287 286 return -ENODATA; 287 + return 0; 288 + } 289 + EXPORT_SYMBOL(acpi_get_local_u64_address); 288 290 291 + int acpi_get_local_address(acpi_handle handle, u32 *addr) 292 + { 293 + u64 adr; 294 + int ret; 295 + 296 + ret = acpi_get_local_u64_address(handle, &adr); 297 + if (ret < 0) 298 + return ret; 289 299 *addr = (u32)adr; 290 300 return 0; 291 301 }
+4 -9
drivers/soundwire/slave.c
··· 97 97 struct acpi_device *adev, 98 98 struct sdw_slave_id *id) 99 99 { 100 - u64 addr; 101 100 unsigned int link_id; 102 - acpi_status status; 101 + u64 addr; 102 + int ret; 103 103 104 - status = acpi_evaluate_integer(adev->handle, 105 - METHOD_NAME__ADR, NULL, &addr); 106 - 107 - if (ACPI_FAILURE(status)) { 108 - dev_err(bus->dev, "_ADR resolution failed: %x\n", 109 - status); 104 + ret = acpi_get_local_u64_address(adev->handle, &addr); 105 + if (ret < 0) 110 106 return false; 111 - } 112 107 113 108 if (bus->ops->override_adr) 114 109 addr = bus->ops->override_adr(bus, addr);
+1
include/linux/acpi.h
··· 761 761 } 762 762 #endif 763 763 764 + int acpi_get_local_u64_address(acpi_handle handle, u64 *addr); 764 765 int acpi_get_local_address(acpi_handle handle, u32 *addr); 765 766 const char *acpi_get_subsystem_id(acpi_handle handle); 766 767
+3 -3
sound/hda/intel-sdw-acpi.c
··· 125 125 void *cdata, void **return_value) 126 126 { 127 127 struct sdw_intel_acpi_info *info = cdata; 128 - acpi_status status; 129 128 u64 adr; 129 + int ret; 130 130 131 - status = acpi_evaluate_integer(handle, METHOD_NAME__ADR, NULL, &adr); 132 - if (ACPI_FAILURE(status)) 131 + ret = acpi_get_local_u64_address(handle, &adr); 132 + if (ret < 0) 133 133 return AE_OK; /* keep going */ 134 134 135 135 if (!acpi_fetch_acpi_dev(handle)) {