of_gpio.h revision 18ad7a61e1b700dfe177fabf1c350b4f5d4da8ac
1863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov/*
2863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov * OF helpers for the GPIO API
3863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov *
4863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov * Copyright (c) 2007-2008  MontaVista Software, Inc.
5863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov *
6863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov * Author: Anton Vorontsov <avorontsov@ru.mvista.com>
7863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov *
8863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov * This program is free software; you can redistribute it and/or modify
9863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov * it under the terms of the GNU General Public License as published by
10863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov * the Free Software Foundation; either version 2 of the License, or
11863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov * (at your option) any later version.
12863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov */
13863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov
14863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov#ifndef __LINUX_OF_GPIO_H
15863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov#define __LINUX_OF_GPIO_H
16863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov
17863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov#include <linux/errno.h>
1818ad7a61e1b700dfe177fabf1c350b4f5d4da8acWolfgang Grandegger#include <linux/gpio.h>
19863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov
20863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov#ifdef CONFIG_OF_GPIO
21863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov
22863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov/*
23863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov * Generic OF GPIO chip
24863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov */
25863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsovstruct of_gpio_chip {
26863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov	struct gpio_chip gc;
27863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov	int gpio_cells;
28863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov	int (*xlate)(struct of_gpio_chip *of_gc, struct device_node *np,
29863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov		     const void *gpio_spec);
30863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov};
31863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov
32863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsovstatic inline struct of_gpio_chip *to_of_gpio_chip(struct gpio_chip *gc)
33863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov{
34863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov	return container_of(gc, struct of_gpio_chip, gc);
35863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov}
36863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov
37863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov/*
38863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov * OF GPIO chip for memory mapped banks
39863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov */
40863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsovstruct of_mm_gpio_chip {
41863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov	struct of_gpio_chip of_gc;
42863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov	void (*save_regs)(struct of_mm_gpio_chip *mm_gc);
43863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov	void __iomem *regs;
44863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov};
45863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov
46863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsovstatic inline struct of_mm_gpio_chip *to_of_mm_gpio_chip(struct gpio_chip *gc)
47863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov{
48863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov	struct of_gpio_chip *of_gc = to_of_gpio_chip(gc);
49863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov
50863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov	return container_of(of_gc, struct of_mm_gpio_chip, of_gc);
51863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov}
52863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov
53863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsovextern int of_get_gpio(struct device_node *np, int index);
54863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsovextern int of_mm_gpiochip_add(struct device_node *np,
55863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov			      struct of_mm_gpio_chip *mm_gc);
56863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsovextern int of_gpio_simple_xlate(struct of_gpio_chip *of_gc,
57863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov				struct device_node *np,
58863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov				const void *gpio_spec);
59863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov#else
60863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov
61863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov/* Drivers may not strictly depend on the GPIO support, so let them link. */
62863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsovstatic inline int of_get_gpio(struct device_node *np, int index)
63863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov{
64863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov	return -ENOSYS;
65863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov}
66863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov
67863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov#endif /* CONFIG_OF_GPIO */
68863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov
69863fbf4966a7ac301a4077e4a04d73e8abfdd7b2Anton Vorontsov#endif /* __LINUX_OF_GPIO_H */
70