at v3.0-rc2 76 lines 1.9 kB view raw
1/* 2 * Basic memory-mapped GPIO controllers. 3 * 4 * Copyright 2008 MontaVista Software, Inc. 5 * Copyright 2008,2010 Anton Vorontsov <cbouatmailru@gmail.com> 6 * 7 * This program is free software; you can redistribute it and/or modify it 8 * under the terms of the GNU General Public License as published by the 9 * Free Software Foundation; either version 2 of the License, or (at your 10 * option) any later version. 11 */ 12 13#ifndef __BASIC_MMIO_GPIO_H 14#define __BASIC_MMIO_GPIO_H 15 16#include <linux/gpio.h> 17#include <linux/types.h> 18#include <linux/compiler.h> 19 20struct bgpio_pdata { 21 int base; 22 int ngpio; 23}; 24 25struct device; 26 27struct bgpio_chip { 28 struct gpio_chip gc; 29 30 unsigned long (*read_reg)(void __iomem *reg); 31 void (*write_reg)(void __iomem *reg, unsigned long data); 32 33 void __iomem *reg_dat; 34 void __iomem *reg_set; 35 void __iomem *reg_clr; 36 void __iomem *reg_dir; 37 38 /* Number of bits (GPIOs): <register width> * 8. */ 39 int bits; 40 41 /* 42 * Some GPIO controllers work with the big-endian bits notation, 43 * e.g. in a 8-bits register, GPIO7 is the least significant bit. 44 */ 45 unsigned long (*pin2mask)(struct bgpio_chip *bgc, unsigned int pin); 46 47 /* 48 * Used to lock bgpio_chip->data. Also, this is needed to keep 49 * shadowed and real data registers writes together. 50 */ 51 spinlock_t lock; 52 53 /* Shadowed data register to clear/set bits safely. */ 54 unsigned long data; 55 56 /* Shadowed direction registers to clear/set direction safely. */ 57 unsigned long dir; 58}; 59 60static inline struct bgpio_chip *to_bgpio_chip(struct gpio_chip *gc) 61{ 62 return container_of(gc, struct bgpio_chip, gc); 63} 64 65int __devexit bgpio_remove(struct bgpio_chip *bgc); 66int __devinit bgpio_init(struct bgpio_chip *bgc, 67 struct device *dev, 68 unsigned long sz, 69 void __iomem *dat, 70 void __iomem *set, 71 void __iomem *clr, 72 void __iomem *dirout, 73 void __iomem *dirin, 74 bool big_endian); 75 76#endif /* __BASIC_MMIO_GPIO_H */