
Hi Bin,
On Tue, 30 Jun 2020 at 01:47, Bin Meng bmeng.cn@gmail.com wrote:
Hi Simon,
On Mon, Jun 15, 2020 at 11:58 AM Simon Glass sjg@chromium.org wrote:
Implement the method that converts a GPIO into the form used by ACPI, so that GPIOs can be added to ACPI tables.
Signed-off-by: Simon Glass sjg@chromium.org
Changes in v1:
- Use acpi_get_path() to get device path
drivers/gpio/intel_gpio.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+)
diff --git a/drivers/gpio/intel_gpio.c b/drivers/gpio/intel_gpio.c index b4d5be97da..6a3a8c4cfa 100644 --- a/drivers/gpio/intel_gpio.c +++ b/drivers/gpio/intel_gpio.c @@ -12,6 +12,7 @@ #include <pch.h> #include <pci.h> #include <syscon.h> +#include <acpi/acpi_device.h> #include <asm/cpu.h> #include <asm/gpio.h> #include <asm/intel_pinctrl.h> @@ -19,6 +20,7 @@ #include <asm/io.h> #include <asm/pci.h> #include <asm/arch/gpio.h> +#include <dm/acpi.h> #include <dt-bindings/gpio/x86-gpio.h>
static int intel_gpio_direction_input(struct udevice *dev, uint offset) @@ -128,6 +130,35 @@ static int intel_gpio_xlate(struct udevice *orig_dev, struct gpio_desc *desc, return 0; }
+#if CONFIG_IS_ENABLED(ACPIGEN) +static int intel_gpio_get_acpi(const struct gpio_desc *desc,
struct acpi_gpio *gpio)
+{
struct udevice *pinctrl;
int ret;
if (!dm_gpio_is_valid(desc))
return -ENOENT;
pinctrl = dev_get_parent(desc->dev);
memset(gpio, '\0', sizeof(*gpio));
gpio->type = ACPI_GPIO_TYPE_IO;
gpio->pull = ACPI_GPIO_PULL_DEFAULT;
gpio->io_restrict = ACPI_GPIO_IO_RESTRICT_OUTPUT;
gpio->polarity = ACPI_GPIO_ACTIVE_HIGH;
Is there a way to figure out these properties from DT, instead of hardcoding?
The answer is similar to your previous comment. But also, each pinctrl driver has its own settings and limitations. If we want to support different config for the pinctrl we would likely add it to the DT binding for the pinctrl driver. So far I haven't seen a need but it might happen with a future arch.
[..]
Regards, Simon