1
2
3
4
5
6
7
8
9
10
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#include <linux/spinlock_types.h>
20
21struct bgpio_pdata {
22 int base;
23 int ngpio;
24};
25
26struct device;
27
28struct bgpio_chip {
29 struct gpio_chip gc;
30
31 unsigned long (*read_reg)(void __iomem *reg);
32 void (*write_reg)(void __iomem *reg, unsigned long data);
33
34 void __iomem *reg_dat;
35 void __iomem *reg_set;
36 void __iomem *reg_clr;
37 void __iomem *reg_dir;
38
39
40 int bits;
41
42
43
44
45
46 unsigned long (*pin2mask)(struct bgpio_chip *bgc, unsigned int pin);
47
48
49
50
51
52 spinlock_t lock;
53
54
55 unsigned long data;
56
57
58 unsigned long dir;
59};
60
61static inline struct bgpio_chip *to_bgpio_chip(struct gpio_chip *gc)
62{
63 return container_of(gc, struct bgpio_chip, gc);
64}
65
66int bgpio_remove(struct bgpio_chip *bgc);
67int bgpio_init(struct bgpio_chip *bgc, struct device *dev,
68 unsigned long sz, void __iomem *dat, void __iomem *set,
69 void __iomem *clr, void __iomem *dirout, void __iomem *dirin,
70 unsigned long flags);
71
72#define BGPIOF_BIG_ENDIAN BIT(0)
73#define BGPIOF_UNREADABLE_REG_SET BIT(1)
74#define BGPIOF_UNREADABLE_REG_DIR BIT(2)
75
76#endif
77