diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-05-26 15:14:41 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-05-26 15:14:41 -0400 |
commit | 8b29336fe01dab3541ebb283daddf9d0168c3f05 (patch) | |
tree | d64c1a3e00bf66c9ea9b50085f22662871cb5696 /include | |
parent | 9f1912c48ce829d24789e3e5d499de0d44d3306a (diff) | |
parent | 1adb656e52e1159b0187bf6590df94c7ff44d389 (diff) |
Merge branch 'gpio/next' of git://git.secretlab.ca/git/linux-2.6
* 'gpio/next' of git://git.secretlab.ca/git/linux-2.6:
gpio/via: rename VIA local config struct
basic_mmio_gpio: split into a gpio library and platform device
gpio: remove some legacy comments in build files
gpio: add trace events for setting direction and value
gpio/pca953x: Use handle_simple_irq instead of handle_edge_irq
gpiolib: export gpiochip_find
gpio: remove redundant Kconfig depends on GPIOLIB
basic_mmio_gpio: convert to non-__raw* accessors
basic_mmio_gpio: support direction registers
basic_mmio_gpio: support different input/output registers
basic_mmio_gpio: detect output method at probe time
basic_mmio_gpio: request register regions
basic_mmio_gpio: allow overriding number of gpio
basic_mmio_gpio: convert to platform_{get,set}_drvdata()
basic_mmio_gpio: remove runtime width/endianness evaluation
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/basic_mmio_gpio.h | 56 | ||||
-rw-r--r-- | include/trace/events/gpio.h | 56 |
2 files changed, 112 insertions, 0 deletions
diff --git a/include/linux/basic_mmio_gpio.h b/include/linux/basic_mmio_gpio.h index 198087a16fc4..1ae12710d732 100644 --- a/include/linux/basic_mmio_gpio.h +++ b/include/linux/basic_mmio_gpio.h | |||
@@ -13,8 +13,64 @@ | |||
13 | #ifndef __BASIC_MMIO_GPIO_H | 13 | #ifndef __BASIC_MMIO_GPIO_H |
14 | #define __BASIC_MMIO_GPIO_H | 14 | #define __BASIC_MMIO_GPIO_H |
15 | 15 | ||
16 | #include <linux/gpio.h> | ||
17 | #include <linux/types.h> | ||
18 | #include <linux/compiler.h> | ||
19 | |||
16 | struct bgpio_pdata { | 20 | struct bgpio_pdata { |
17 | int base; | 21 | int base; |
22 | int ngpio; | ||
18 | }; | 23 | }; |
19 | 24 | ||
25 | struct device; | ||
26 | |||
27 | struct 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 | |||
60 | static inline struct bgpio_chip *to_bgpio_chip(struct gpio_chip *gc) | ||
61 | { | ||
62 | return container_of(gc, struct bgpio_chip, gc); | ||
63 | } | ||
64 | |||
65 | int __devexit bgpio_remove(struct bgpio_chip *bgc); | ||
66 | int __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 | |||
20 | #endif /* __BASIC_MMIO_GPIO_H */ | 76 | #endif /* __BASIC_MMIO_GPIO_H */ |
diff --git a/include/trace/events/gpio.h b/include/trace/events/gpio.h new file mode 100644 index 000000000000..927a8ad9e51b --- /dev/null +++ b/include/trace/events/gpio.h | |||
@@ -0,0 +1,56 @@ | |||
1 | #undef TRACE_SYSTEM | ||
2 | #define TRACE_SYSTEM gpio | ||
3 | |||
4 | #if !defined(_TRACE_GPIO_H) || defined(TRACE_HEADER_MULTI_READ) | ||
5 | #define _TRACE_GPIO_H | ||
6 | |||
7 | #include <linux/tracepoint.h> | ||
8 | |||
9 | TRACE_EVENT(gpio_direction, | ||
10 | |||
11 | TP_PROTO(unsigned gpio, int in, int err), | ||
12 | |||
13 | TP_ARGS(gpio, in, err), | ||
14 | |||
15 | TP_STRUCT__entry( | ||
16 | __field(unsigned, gpio) | ||
17 | __field(int, in) | ||
18 | __field(int, err) | ||
19 | ), | ||
20 | |||
21 | TP_fast_assign( | ||
22 | __entry->gpio = gpio; | ||
23 | __entry->in = in; | ||
24 | __entry->err = err; | ||
25 | ), | ||
26 | |||
27 | TP_printk("%u %3s (%d)", __entry->gpio, | ||
28 | __entry->in ? "in" : "out", __entry->err) | ||
29 | ); | ||
30 | |||
31 | TRACE_EVENT(gpio_value, | ||
32 | |||
33 | TP_PROTO(unsigned gpio, int get, int value), | ||
34 | |||
35 | TP_ARGS(gpio, get, value), | ||
36 | |||
37 | TP_STRUCT__entry( | ||
38 | __field(unsigned, gpio) | ||
39 | __field(int, get) | ||
40 | __field(int, value) | ||
41 | ), | ||
42 | |||
43 | TP_fast_assign( | ||
44 | __entry->gpio = gpio; | ||
45 | __entry->get = get; | ||
46 | __entry->value = value; | ||
47 | ), | ||
48 | |||
49 | TP_printk("%u %3s %d", __entry->gpio, | ||
50 | __entry->get ? "get" : "set", __entry->value) | ||
51 | ); | ||
52 | |||
53 | #endif /* if !defined(_TRACE_GPIO_H) || defined(TRACE_HEADER_MULTI_READ) */ | ||
54 | |||
55 | /* This part must be outside protection */ | ||
56 | #include <trace/define_trace.h> | ||