1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#ifndef __PINMUX_H
19#define __PINMUX_H
20
21#include <linux/spinlock.h>
22#include <linux/types.h>
23#include <linux/gpio.h>
24#include <asm-generic/gpio.h>
25
26
27#include "pins.h"
28#include <mach/pins.h>
29
30
31
32
33
34enum pin_fun {
35 PIN_FUN1 = 0,
36 PIN_FUN2,
37 PIN_FUN3,
38 PIN_GPIO,
39};
40
41
42
43
44
45enum pin_strength {
46 PIN_4MA = 0,
47 PIN_8MA,
48 PIN_12MA,
49 PIN_16MA,
50 PIN_20MA,
51};
52
53
54
55
56enum pin_voltage {
57 PIN_1_8V = 0,
58 PIN_3_3V,
59};
60
61
62
63
64struct pin_desc {
65 unsigned id;
66 enum pin_fun fun;
67 enum pin_strength strength;
68 enum pin_voltage voltage;
69 unsigned pullup:1;
70};
71
72struct pin_group {
73 struct pin_desc *pins;
74 int nr_pins;
75};
76
77
78void stmp3xxx_pin_strength(unsigned id, enum pin_strength strength,
79 const char *label);
80
81
82void stmp3xxx_pin_voltage(unsigned id, enum pin_voltage voltage,
83 const char *label);
84
85
86void stmp3xxx_pin_pullup(unsigned id, int enable, const char *label);
87
88
89
90
91
92int stmp3xxx_request_pin(unsigned id, enum pin_fun fun, const char *label);
93
94
95void stmp3xxx_release_pin(unsigned id, const char *label);
96
97void stmp3xxx_set_pin_type(unsigned id, enum pin_fun fun);
98
99
100
101
102
103
104
105#define HW_MUXSEL_NUM 2
106#define HW_MUXSEL_PIN_LEN 2
107#define HW_MUXSEL_PIN_NUM 16
108#define HW_MUXSEL_PINFUN_MASK 0x3
109#define HW_MUXSEL_PINFUN_NUM 4
110
111#define HW_DRIVE_NUM 4
112#define HW_DRIVE_PIN_LEN 4
113#define HW_DRIVE_PIN_NUM 8
114#define HW_DRIVE_PINDRV_MASK 0x3
115#define HW_DRIVE_PINDRV_NUM 5
116#define HW_DRIVE_PINV_MASK 0x4
117
118
119struct stmp3xxx_pinmux_bank {
120 struct gpio_chip chip;
121
122
123 unsigned long pin_map;
124
125
126 const char *pin_labels[32];
127
128
129 void __iomem *hw_muxsel[HW_MUXSEL_NUM];
130 void __iomem *hw_drive[HW_DRIVE_NUM];
131 void __iomem *hw_pull;
132
133 void __iomem *pin2irq,
134 *irqlevel,
135 *irqpolarity,
136 *irqen,
137 *irqstat;
138
139
140 u8 functions[HW_MUXSEL_PINFUN_NUM];
141
142
143
144
145
146 u8 strengths[HW_DRIVE_PINDRV_NUM];
147
148
149 void __iomem *hw_gpio_in,
150 *hw_gpio_out,
151 *hw_gpio_doe;
152 int irq, virq;
153};
154
155int __init stmp3xxx_pinmux_init(int virtual_irq_start);
156
157#endif
158