|
@@ -15,19 +15,21 @@
|
|
#include <linux/errno.h>
|
|
#include <linux/errno.h>
|
|
#include <linux/module.h>
|
|
#include <linux/module.h>
|
|
#include <linux/io.h>
|
|
#include <linux/io.h>
|
|
-#include <linux/gpio.h>
|
|
|
|
|
|
+#include <linux/gpio/consumer.h>
|
|
#include <linux/of.h>
|
|
#include <linux/of.h>
|
|
#include <linux/of_address.h>
|
|
#include <linux/of_address.h>
|
|
#include <linux/of_gpio.h>
|
|
#include <linux/of_gpio.h>
|
|
#include <linux/pinctrl/pinctrl.h>
|
|
#include <linux/pinctrl/pinctrl.h>
|
|
#include <linux/slab.h>
|
|
#include <linux/slab.h>
|
|
|
|
|
|
|
|
+struct gpio_desc;
|
|
|
|
+
|
|
/* Private data structure for of_gpiochip_find_and_xlate */
|
|
/* Private data structure for of_gpiochip_find_and_xlate */
|
|
struct gg_data {
|
|
struct gg_data {
|
|
enum of_gpio_flags *flags;
|
|
enum of_gpio_flags *flags;
|
|
struct of_phandle_args gpiospec;
|
|
struct of_phandle_args gpiospec;
|
|
|
|
|
|
- int out_gpio;
|
|
|
|
|
|
+ struct gpio_desc *out_gpio;
|
|
};
|
|
};
|
|
|
|
|
|
/* Private function for resolving node pointer to gpio_chip */
|
|
/* Private function for resolving node pointer to gpio_chip */
|
|
@@ -45,28 +47,31 @@ static int of_gpiochip_find_and_xlate(struct gpio_chip *gc, void *data)
|
|
if (ret < 0)
|
|
if (ret < 0)
|
|
return false;
|
|
return false;
|
|
|
|
|
|
- gg_data->out_gpio = ret + gc->base;
|
|
|
|
|
|
+ gg_data->out_gpio = gpio_to_desc(ret + gc->base);
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * of_get_named_gpio_flags() - Get a GPIO number and flags to use with GPIO API
|
|
|
|
|
|
+ * of_get_named_gpiod_flags() - Get a GPIO descriptor and flags for GPIO API
|
|
* @np: device node to get GPIO from
|
|
* @np: device node to get GPIO from
|
|
* @propname: property name containing gpio specifier(s)
|
|
* @propname: property name containing gpio specifier(s)
|
|
* @index: index of the GPIO
|
|
* @index: index of the GPIO
|
|
* @flags: a flags pointer to fill in
|
|
* @flags: a flags pointer to fill in
|
|
*
|
|
*
|
|
- * Returns GPIO number to use with Linux generic GPIO API, or one of the errno
|
|
|
|
|
|
+ * Returns GPIO descriptor to use with Linux GPIO API, or one of the errno
|
|
* value on the error condition. If @flags is not NULL the function also fills
|
|
* value on the error condition. If @flags is not NULL the function also fills
|
|
* in flags for the GPIO.
|
|
* in flags for the GPIO.
|
|
*/
|
|
*/
|
|
-int of_get_named_gpio_flags(struct device_node *np, const char *propname,
|
|
|
|
- int index, enum of_gpio_flags *flags)
|
|
|
|
|
|
+struct gpio_desc *of_get_named_gpiod_flags(struct device_node *np,
|
|
|
|
+ const char *propname, int index, enum of_gpio_flags *flags)
|
|
{
|
|
{
|
|
/* Return -EPROBE_DEFER to support probe() functions to be called
|
|
/* Return -EPROBE_DEFER to support probe() functions to be called
|
|
* later when the GPIO actually becomes available
|
|
* later when the GPIO actually becomes available
|
|
*/
|
|
*/
|
|
- struct gg_data gg_data = { .flags = flags, .out_gpio = -EPROBE_DEFER };
|
|
|
|
|
|
+ struct gg_data gg_data = {
|
|
|
|
+ .flags = flags,
|
|
|
|
+ .out_gpio = ERR_PTR(-EPROBE_DEFER)
|
|
|
|
+ };
|
|
int ret;
|
|
int ret;
|
|
|
|
|
|
/* .of_xlate might decide to not fill in the flags, so clear it. */
|
|
/* .of_xlate might decide to not fill in the flags, so clear it. */
|
|
@@ -78,16 +83,17 @@ int of_get_named_gpio_flags(struct device_node *np, const char *propname,
|
|
if (ret) {
|
|
if (ret) {
|
|
pr_debug("%s: can't parse gpios property of node '%s[%d]'\n",
|
|
pr_debug("%s: can't parse gpios property of node '%s[%d]'\n",
|
|
__func__, np->full_name, index);
|
|
__func__, np->full_name, index);
|
|
- return ret;
|
|
|
|
|
|
+ return ERR_PTR(ret);
|
|
}
|
|
}
|
|
|
|
|
|
gpiochip_find(&gg_data, of_gpiochip_find_and_xlate);
|
|
gpiochip_find(&gg_data, of_gpiochip_find_and_xlate);
|
|
|
|
|
|
of_node_put(gg_data.gpiospec.np);
|
|
of_node_put(gg_data.gpiospec.np);
|
|
- pr_debug("%s exited with status %d\n", __func__, gg_data.out_gpio);
|
|
|
|
|
|
+ pr_debug("%s exited with status %d\n", __func__,
|
|
|
|
+ PTR_RET(gg_data.out_gpio));
|
|
return gg_data.out_gpio;
|
|
return gg_data.out_gpio;
|
|
}
|
|
}
|
|
-EXPORT_SYMBOL(of_get_named_gpio_flags);
|
|
|
|
|
|
+EXPORT_SYMBOL(of_get_named_gpiod_flags);
|
|
|
|
|
|
/**
|
|
/**
|
|
* of_gpio_simple_xlate - translate gpio_spec to the GPIO number and flags
|
|
* of_gpio_simple_xlate - translate gpio_spec to the GPIO number and flags
|