From: "Daniel Glöckner" <dg@emlix.com>
To: Mika Westerberg <mika.westerberg@linux.intel.com>
Cc: linux-acpi@vger.kernel.org, linux-gpio@vger.kernel.org
Subject: acpi_find_gpio with absent GPIOs
Date: Fri, 23 Oct 2015 16:56:54 +0200 [thread overview]
Message-ID: <562A4AB6.1010805@emlix.com> (raw)
Hi,
I'm currently trying to use rfkill-gpio with a device that has just a
single GPIO assigned by ACPI. rfkill-gpio calls acpi_dev_add_driver_gpios
to assign names to the ACPI GPIOs and then uses devm_gpiod_get_optional
to request both of them. The problem is that on the second call to
devm_gpiod_get_optional acpi_find_gpio falls back to using the GPIO index
0 (from gpiod_get) in _CRS, which leads to the same GPIO being returned
as in the first call. Probing the driver then fails with -EBUSY.
In my opinion it is a bad idea to fall back to indexing the _CRS if the
con_id was found in the _DSD or the GPIOs added by
acpi_dev_add_driver_gpios, but I don't know if there are drivers relying
on this behavior.
Luckily acpi_get_gpiod_by_index returns -ENODATA if the name can't be
found and -ENOENT if the GPIO is absent, so we can distinguish the two
cases. -EPROBE_DEFER also should not make acpi_find_gpio try to use
another GPIO from the _CRS.
There is also the possibility that the GPIO index exceeds the size of
the package found in _DSD or added with acpi_dev_add_driver_gpios.
The former will return -EPROTO, the latter will forward the error
from acpi_dev_get_property_reference (usually -ENODATA). of_find_gpio
returns -ENOENT in this case.
So, what of this should be fixed?
Best regards,
Daniel
--
Dipl.-Math. Daniel Glöckner, emlix GmbH, http://www.emlix.com
Fon +49 551 30664-0, Fax +49 551 30664-11,
Bertha-von-Suttner-Straße 9, 37085 Göttingen, Germany
Sitz der Gesellschaft: Göttingen, Amtsgericht Göttingen HR B 3160
Geschäftsführer: Dr. Uwe Kracke, Ust-IdNr.: DE 205 198 055
emlix - your embedded linux partner
--
To unsubscribe from this list: send the line "unsubscribe linux-gpio" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next reply other threads:[~2015-10-23 14:56 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-23 14:56 Daniel Glöckner [this message]
2015-10-26 10:20 ` acpi_find_gpio with absent GPIOs Mika Westerberg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=562A4AB6.1010805@emlix.com \
--to=dg@emlix.com \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-gpio@vger.kernel.org \
--cc=mika.westerberg@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.