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