/* * ACPI helpers for GPIO API * * Copyright (C) 2012, Intel Corporation * Authors: Mathias Nyman * Mika Westerberg * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ #include #include #include #include #include static int acpi_gpiochip_find(struct gpio_chip *gc, void *data) { if (!gc->dev) return false; return ACPI_HANDLE(gc->dev) == data; } /** * acpi_get_gpio() - Translate ACPI GPIO pin to GPIO number usable with GPIO API * @path: ACPI GPIO controller full path name, (e.g. "\\_SB.GPO1") * @pin: ACPI GPIO pin number (0-based, controller-relative) * * Returns GPIO number to use with Linux generic GPIO API, or errno error value */ int acpi_get_gpio(char *path, int pin) { struct gpio_chip *chip; acpi_handle handle; acpi_status status; status = acpi_get_handle(NULL, path, &handle); if (ACPI_FAILURE(status)) return -ENODEV; chip = gpiochip_find(handle, acpi_gpiochip_find); if (!chip) return -ENODEV; if (!gpio_is_valid(chip->base + pin)) return -EINVAL; return chip->base + pin; } EXPORT_SYMBOL_GPL(acpi_get_gpio);