lkml.org 
[lkml]   [2019]   [Oct]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/3] soundwire: slave: add helper to extract slave ID
    Date
    Simplify the loop with a helper. The only functionality change is that
    we continue the loop even with an ACPI error.

    Follow-up patches will build on this change.

    Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    ---
    drivers/soundwire/slave.c | 50 ++++++++++++++++++++++++---------------
    1 file changed, 31 insertions(+), 19 deletions(-)

    diff --git a/drivers/soundwire/slave.c b/drivers/soundwire/slave.c
    index 6473fa602f82..5dbc76772d21 100644
    --- a/drivers/soundwire/slave.c
    +++ b/drivers/soundwire/slave.c
    @@ -64,6 +64,36 @@ static int sdw_slave_add(struct sdw_bus *bus,
    }

    #if IS_ENABLED(CONFIG_ACPI)
    +
    +static bool find_slave(struct sdw_bus *bus,
    + struct acpi_device *adev,
    + struct sdw_slave_id *id)
    +{
    + unsigned long long addr;
    + unsigned int link_id;
    + acpi_status status;
    +
    + status = acpi_evaluate_integer(adev->handle,
    + METHOD_NAME__ADR, NULL, &addr);
    +
    + if (ACPI_FAILURE(status)) {
    + dev_err(bus->dev, "_ADR resolution failed: %x\n",
    + status);
    + return false;
    + }
    +
    + /* Extract link id from ADR, Bit 51 to 48 (included) */
    + link_id = (addr >> 48) & GENMASK(3, 0);
    +
    + /* Check for link_id match */
    + if (link_id != bus->link_id)
    + return false;
    +
    + sdw_extract_slave_id(bus, addr, id);
    +
    + return true;
    +}
    +
    /*
    * sdw_acpi_find_slaves() - Find Slave devices in Master ACPI node
    * @bus: SDW bus instance
    @@ -81,29 +111,11 @@ int sdw_acpi_find_slaves(struct sdw_bus *bus)
    }

    list_for_each_entry(adev, &parent->children, node) {
    - unsigned long long addr;
    struct sdw_slave_id id;
    - unsigned int link_id;
    - acpi_status status;
    -
    - status = acpi_evaluate_integer(adev->handle,
    - METHOD_NAME__ADR, NULL, &addr);
    -
    - if (ACPI_FAILURE(status)) {
    - dev_err(bus->dev, "_ADR resolution failed: %x\n",
    - status);
    - return status;
    - }

    - /* Extract link id from ADR, Bit 51 to 48 (included) */
    - link_id = (addr >> 48) & GENMASK(3, 0);
    -
    - /* Check for link_id match */
    - if (link_id != bus->link_id)
    + if (!find_slave(bus, adev, &id))
    continue;

    - sdw_extract_slave_id(bus, addr, &id);
    -
    /*
    * don't error check for sdw_slave_add as we want to continue
    * adding Slaves
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-10-23 01:49    [W:2.368 / U:0.236 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site