Linux Audio

Check our new training course

Loading...
v5.9
  1/* SPDX-License-Identifier: GPL-2.0+ */
  2/*
  3 * OF helpers for the GPIO API
  4 *
  5 * Copyright (c) 2007-2008  MontaVista Software, Inc.
  6 *
  7 * Author: Anton Vorontsov <avorontsov@ru.mvista.com>
 
 
 
 
 
  8 */
  9
 10#ifndef __LINUX_OF_GPIO_H
 11#define __LINUX_OF_GPIO_H
 12
 13#include <linux/compiler.h>
 14#include <linux/gpio/driver.h>
 15#include <linux/gpio.h>		/* FIXME: Shouldn't be here */
 
 16#include <linux/of.h>
 17
 18struct device_node;
 19
 20/*
 21 * This is Linux-specific flags. By default controllers' and Linux' mapping
 22 * match, but GPIO controllers are free to translate their own flags to
 23 * Linux-specific in their .xlate callback. Though, 1:1 mapping is recommended.
 24 */
 25enum of_gpio_flags {
 26	OF_GPIO_ACTIVE_LOW = 0x1,
 27	OF_GPIO_SINGLE_ENDED = 0x2,
 28	OF_GPIO_OPEN_DRAIN = 0x4,
 29	OF_GPIO_TRANSITORY = 0x8,
 30	OF_GPIO_PULL_UP = 0x10,
 31	OF_GPIO_PULL_DOWN = 0x20,
 32};
 33
 34#ifdef CONFIG_OF_GPIO
 35
 36#include <linux/kernel.h>
 37
 38/*
 39 * OF GPIO chip for memory mapped banks
 40 */
 41struct of_mm_gpio_chip {
 42	struct gpio_chip gc;
 43	void (*save_regs)(struct of_mm_gpio_chip *mm_gc);
 44	void __iomem *regs;
 45};
 46
 47static inline struct of_mm_gpio_chip *to_of_mm_gpio_chip(struct gpio_chip *gc)
 48{
 49	return container_of(gc, struct of_mm_gpio_chip, gc);
 50}
 51
 52extern int of_get_named_gpio_flags(struct device_node *np,
 53		const char *list_name, int index, enum of_gpio_flags *flags);
 54
 55extern int of_mm_gpiochip_add_data(struct device_node *np,
 56				   struct of_mm_gpio_chip *mm_gc,
 57				   void *data);
 58static inline int of_mm_gpiochip_add(struct device_node *np,
 59				     struct of_mm_gpio_chip *mm_gc)
 60{
 61	return of_mm_gpiochip_add_data(np, mm_gc, NULL);
 62}
 63extern void of_mm_gpiochip_remove(struct of_mm_gpio_chip *mm_gc);
 64
 65#else /* CONFIG_OF_GPIO */
 
 66
 67#include <linux/errno.h>
 
 
 
 
 
 
 68
 69/* Drivers may not strictly depend on the GPIO support, so let them link. */
 70static inline int of_get_named_gpio_flags(struct device_node *np,
 71		const char *list_name, int index, enum of_gpio_flags *flags)
 72{
 73	if (flags)
 74		*flags = 0;
 
 
 
 
 
 
 75
 
 
 
 
 76	return -ENOSYS;
 77}
 78
 
 
 
 79#endif /* CONFIG_OF_GPIO */
 80
 81/**
 82 * of_gpio_named_count() - Count GPIOs for a device
 83 * @np:		device node to count GPIOs for
 84 * @propname:	property name containing gpio specifier(s)
 85 *
 86 * The function returns the count of GPIOs specified for a node.
 87 * Note that the empty GPIO specifiers count too. Returns either
 88 *   Number of gpios defined in property,
 89 *   -EINVAL for an incorrectly formed gpios property, or
 90 *   -ENOENT for a missing gpios property
 91 *
 92 * Example:
 
 93 * gpios = <0
 94 *          &gpio1 1 2
 95 *          0
 96 *          &gpio2 3 4>;
 97 *
 98 * The above example defines four GPIOs, two of which are not specified.
 99 * This function will return '4'
100 */
101static inline int of_gpio_named_count(struct device_node *np, const char* propname)
102{
103	return of_count_phandle_with_args(np, propname, "#gpio-cells");
104}
105
106/**
107 * of_gpio_count() - Count GPIOs for a device
108 * @np:		device node to count GPIOs for
109 *
110 * Same as of_gpio_named_count, but hard coded to use the 'gpios' property
 
 
 
 
111 */
112static inline int of_gpio_count(struct device_node *np)
113{
114	return of_gpio_named_count(np, "gpios");
115}
116
117static inline int of_get_gpio_flags(struct device_node *np, int index,
118		      enum of_gpio_flags *flags)
119{
120	return of_get_named_gpio_flags(np, "gpios", index, flags);
121}
122
123/**
124 * of_get_named_gpio() - Get a GPIO number to use with GPIO API
125 * @np:		device node to get GPIO from
126 * @propname:	Name of property containing gpio specifier(s)
127 * @index:	index of the GPIO
128 *
129 * Returns GPIO number to use with Linux generic GPIO API, or one of the errno
130 * value on the error condition.
131 */
132static inline int of_get_named_gpio(struct device_node *np,
133                                   const char *propname, int index)
134{
135	return of_get_named_gpio_flags(np, propname, index, NULL);
136}
137
138/**
139 * of_get_gpio() - Get a GPIO number to use with GPIO API
140 * @np:		device node to get GPIO from
141 * @index:	index of the GPIO
142 *
143 * Returns GPIO number to use with Linux generic GPIO API, or one of the errno
144 * value on the error condition.
145 */
146static inline int of_get_gpio(struct device_node *np, int index)
147{
148	return of_get_gpio_flags(np, index, NULL);
149}
150
151#endif /* __LINUX_OF_GPIO_H */
v3.5.6
 
  1/*
  2 * OF helpers for the GPIO API
  3 *
  4 * Copyright (c) 2007-2008  MontaVista Software, Inc.
  5 *
  6 * Author: Anton Vorontsov <avorontsov@ru.mvista.com>
  7 *
  8 * This program is free software; you can redistribute it and/or modify
  9 * it under the terms of the GNU General Public License as published by
 10 * the Free Software Foundation; either version 2 of the License, or
 11 * (at your option) any later version.
 12 */
 13
 14#ifndef __LINUX_OF_GPIO_H
 15#define __LINUX_OF_GPIO_H
 16
 17#include <linux/compiler.h>
 18#include <linux/kernel.h>
 19#include <linux/errno.h>
 20#include <linux/gpio.h>
 21#include <linux/of.h>
 22
 23struct device_node;
 24
 25/*
 26 * This is Linux-specific flags. By default controllers' and Linux' mapping
 27 * match, but GPIO controllers are free to translate their own flags to
 28 * Linux-specific in their .xlate callback. Though, 1:1 mapping is recommended.
 29 */
 30enum of_gpio_flags {
 31	OF_GPIO_ACTIVE_LOW = 0x1,
 
 
 
 
 
 32};
 33
 34#ifdef CONFIG_OF_GPIO
 35
 
 
 36/*
 37 * OF GPIO chip for memory mapped banks
 38 */
 39struct of_mm_gpio_chip {
 40	struct gpio_chip gc;
 41	void (*save_regs)(struct of_mm_gpio_chip *mm_gc);
 42	void __iomem *regs;
 43};
 44
 45static inline struct of_mm_gpio_chip *to_of_mm_gpio_chip(struct gpio_chip *gc)
 46{
 47	return container_of(gc, struct of_mm_gpio_chip, gc);
 48}
 49
 50extern int of_get_named_gpio_flags(struct device_node *np,
 51		const char *list_name, int index, enum of_gpio_flags *flags);
 52
 53extern unsigned int of_gpio_named_count(struct device_node *np,
 54					const char* propname);
 
 
 
 
 
 
 
 55
 56extern int of_mm_gpiochip_add(struct device_node *np,
 57			      struct of_mm_gpio_chip *mm_gc);
 58
 59extern void of_gpiochip_add(struct gpio_chip *gc);
 60extern void of_gpiochip_remove(struct gpio_chip *gc);
 61extern int of_gpio_simple_xlate(struct gpio_chip *gc,
 62				const struct of_phandle_args *gpiospec,
 63				u32 *flags);
 64
 65#else /* CONFIG_OF_GPIO */
 66
 67/* Drivers may not strictly depend on the GPIO support, so let them link. */
 68static inline int of_get_named_gpio_flags(struct device_node *np,
 69		const char *list_name, int index, enum of_gpio_flags *flags)
 70{
 71	return -ENOSYS;
 72}
 73
 74static inline unsigned int of_gpio_named_count(struct device_node *np,
 75					const char* propname)
 76{
 77	return 0;
 78}
 79
 80static inline int of_gpio_simple_xlate(struct gpio_chip *gc,
 81				       const struct of_phandle_args *gpiospec,
 82				       u32 *flags)
 83{
 84	return -ENOSYS;
 85}
 86
 87static inline void of_gpiochip_add(struct gpio_chip *gc) { }
 88static inline void of_gpiochip_remove(struct gpio_chip *gc) { }
 89
 90#endif /* CONFIG_OF_GPIO */
 91
 92/**
 93 * of_gpio_count - Count GPIOs for a device
 94 * @np:		device node to count GPIOs for
 
 95 *
 96 * The function returns the count of GPIOs specified for a node.
 
 
 
 
 97 *
 98 * Note that the empty GPIO specifiers counts too. For example,
 99 *
100 * gpios = <0
101 *          &pio1 1 2
102 *          0
103 *          &pio2 3 4>;
104 *
105 * defines four GPIOs (so this function will return 4), two of which
106 * are not specified.
107 */
108static inline unsigned int of_gpio_count(struct device_node *np)
109{
110	return of_gpio_named_count(np, "gpios");
111}
112
113/**
114 * of_get_gpio_flags() - Get a GPIO number and flags to use with GPIO API
115 * @np:		device node to get GPIO from
116 * @index:	index of the GPIO
117 * @flags:	a flags pointer to fill in
118 *
119 * Returns GPIO number to use with Linux generic GPIO API, or one of the errno
120 * value on the error condition. If @flags is not NULL the function also fills
121 * in flags for the GPIO.
122 */
 
 
 
 
 
123static inline int of_get_gpio_flags(struct device_node *np, int index,
124		      enum of_gpio_flags *flags)
125{
126	return of_get_named_gpio_flags(np, "gpios", index, flags);
127}
128
129/**
130 * of_get_named_gpio() - Get a GPIO number to use with GPIO API
131 * @np:		device node to get GPIO from
132 * @propname:	Name of property containing gpio specifier(s)
133 * @index:	index of the GPIO
134 *
135 * Returns GPIO number to use with Linux generic GPIO API, or one of the errno
136 * value on the error condition.
137 */
138static inline int of_get_named_gpio(struct device_node *np,
139                                   const char *propname, int index)
140{
141	return of_get_named_gpio_flags(np, propname, index, NULL);
142}
143
144/**
145 * of_get_gpio() - Get a GPIO number to use with GPIO API
146 * @np:		device node to get GPIO from
147 * @index:	index of the GPIO
148 *
149 * Returns GPIO number to use with Linux generic GPIO API, or one of the errno
150 * value on the error condition.
151 */
152static inline int of_get_gpio(struct device_node *np, int index)
153{
154	return of_get_gpio_flags(np, index, NULL);
155}
156
157#endif /* __LINUX_OF_GPIO_H */