Blame view

include/linux/basic_mmio_gpio.h 1.89 KB
aeec56e33   Anton Vorontsov   gpio: add driver ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  /*
   * Basic memory-mapped GPIO controllers.
   *
   * Copyright 2008 MontaVista Software, Inc.
   * Copyright 2008,2010 Anton Vorontsov <cbouatmailru@gmail.com>
   *
   * This program is free software; you can redistribute  it and/or modify it
   * under  the terms of  the GNU General  Public License as published by the
   * Free Software Foundation;  either version 2 of the  License, or (at your
   * option) any later version.
   */
  
  #ifndef __BASIC_MMIO_GPIO_H
  #define __BASIC_MMIO_GPIO_H
280df6b3c   Jamie Iles   basic_mmio_gpio: ...
15
16
17
  #include <linux/gpio.h>
  #include <linux/types.h>
  #include <linux/compiler.h>
e5ea3f12d   Jamie Iles   gpio/basic_mmio: ...
18
  #include <linux/spinlock_types.h>
280df6b3c   Jamie Iles   basic_mmio_gpio: ...
19

aeec56e33   Anton Vorontsov   gpio: add driver ...
20
21
  struct bgpio_pdata {
  	int base;
924e7a9fc   Jamie Iles   basic_mmio_gpio: ...
22
  	int ngpio;
aeec56e33   Anton Vorontsov   gpio: add driver ...
23
  };
280df6b3c   Jamie Iles   basic_mmio_gpio: ...
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
  struct device;
  
  struct bgpio_chip {
  	struct gpio_chip gc;
  
  	unsigned long (*read_reg)(void __iomem *reg);
  	void (*write_reg)(void __iomem *reg, unsigned long data);
  
  	void __iomem *reg_dat;
  	void __iomem *reg_set;
  	void __iomem *reg_clr;
  	void __iomem *reg_dir;
  
  	/* Number of bits (GPIOs): <register width> * 8. */
  	int bits;
  
  	/*
  	 * Some GPIO controllers work with the big-endian bits notation,
  	 * e.g. in a 8-bits register, GPIO7 is the least significant bit.
  	 */
  	unsigned long (*pin2mask)(struct bgpio_chip *bgc, unsigned int pin);
  
  	/*
  	 * Used to lock bgpio_chip->data. Also, this is needed to keep
  	 * shadowed and real data registers writes together.
  	 */
  	spinlock_t lock;
  
  	/* Shadowed data register to clear/set bits safely. */
  	unsigned long data;
  
  	/* Shadowed direction registers to clear/set direction safely. */
  	unsigned long dir;
  };
  
  static inline struct bgpio_chip *to_bgpio_chip(struct gpio_chip *gc)
  {
  	return container_of(gc, struct bgpio_chip, gc);
  }
  
  int __devexit bgpio_remove(struct bgpio_chip *bgc);
  int __devinit bgpio_init(struct bgpio_chip *bgc,
  			 struct device *dev,
  			 unsigned long sz,
  			 void __iomem *dat,
  			 void __iomem *set,
  			 void __iomem *clr,
  			 void __iomem *dirout,
  			 void __iomem *dirin,
  			 bool big_endian);
aeec56e33   Anton Vorontsov   gpio: add driver ...
74
  #endif /* __BASIC_MMIO_GPIO_H */