[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20201130182354.GW4077@smile.fi.intel.com>
Date: Mon, 30 Nov 2020 20:23:54 +0200
From: Andy Shevchenko <andriy.shevchenko@...ux.intel.com>
To: Daniel Scally <djrscally@...il.com>
Cc: linux-kernel@...r.kernel.org, linux-acpi@...r.kernel.org,
linux-gpio@...r.kernel.org, linux-i2c@...r.kernel.org,
linux-media@...r.kernel.org, devel@...ica.org, rjw@...ysocki.net,
lenb@...nel.org, gregkh@...uxfoundation.org,
mika.westerberg@...ux.intel.com, linus.walleij@...aro.org,
bgolaszewski@...libre.com, wsa@...nel.org, yong.zhi@...el.com,
sakari.ailus@...ux.intel.com, bingbu.cao@...el.com,
tian.shu.qiu@...el.com, mchehab@...nel.org, robert.moore@...el.com,
erik.kaneda@...el.com, pmladek@...e.com, rostedt@...dmis.org,
sergey.senozhatsky@...il.com, linux@...musvillemoes.dk,
kieran.bingham+renesas@...asonboard.com, jacopo+renesas@...ndi.org,
laurent.pinchart+renesas@...asonboard.com,
jorhand@...ux.microsoft.com, kitakar@...il.com,
heikki.krogerus@...ux.intel.com
Subject: Re: [PATCH 14/18] acpi: utils: Add function to fetch dependent
acpi_devices
On Mon, Nov 30, 2020 at 01:31:25PM +0000, Daniel Scally wrote:
> ACPI devices declare themselves dependent on other devices via the _DEP
> buffer. Fetching the dependee from dependent is a matter of parsing
> _DEP, but currently there's no method to fetch dependent from dependee.
> Add one, so we can parse sensors dependent on a PMIC from the PMIC's
> acpi_driver.
Do I understand correctly that it's an existing table provided by firmware that
(ab)uses _DEP in such way? Note, the specification doesn't tell we may use it
in this way, OTOH I don't remember if it strictly forbids such use.
So, please elaborate in the commit message why you need this and pint out to
the 6.5.8 "_DEP (Operation Region Dependencies)" which clearly says about
OpRegions and that part already supported by ACPI in the Linux, if I'm not
mistaken, need to refresh my memory.
...
> + handle = adev->handle;
> +
> + if (!acpi_has_method(handle, "_DEP"))
> + return 0;
> +
> + status = acpi_evaluate_reference(handle, "_DEP", NULL, &dep_handles);
> + if (ACPI_FAILURE(status))
> + return 0;
> +
> + for (i = 0; i < dep_handles.count; i++) {
> + struct acpi_device_info *info;
> +
> + status = acpi_get_object_info(dep_handles.handles[i], &info);
> + if (ACPI_FAILURE(status))
> + continue;
> +
> + if (info->valid & ACPI_VALID_HID) {
> + ret = acpi_bus_get_device(dep_handles.handles[i], &candidate);
> + if (ret || !candidate) {
> + kfree(info);
> + continue;
> + }
> +
> + if (candidate == dependee) {
> + acpi_dev_put(candidate);
> + kfree(info);
> + return 1;
> + }
> +
> + kfree(info);
> + }
> + }
Can you utilize (by moving to here and export for ACPI layer the
acpi_lpss_dep()?
--
With Best Regards,
Andy Shevchenko
Powered by blists - more mailing lists