diff options
author | Sundar Iyer <sundar.iyer@stericsson.com> | 2010-12-12 23:03:14 -0500 |
---|---|---|
committer | Linus Walleij <linus.walleij@stericsson.com> | 2010-12-19 13:27:46 -0500 |
commit | 20406ebff4a298e6e3abbc1717a90bb3e55dc820 (patch) | |
tree | 7a9c79f4e1310e3a2ef3f50fd98c41e453999414 /drivers/gpio/tc3589x-gpio.c | |
parent | f4e8afdc7ab1b5a0962be02a9dd15d29a81f4c53 (diff) |
mfd/tc3589x: rename tc35892 structs/registers to tc359x
Most of the register layout, client IRQ numbers on the TC35892 is shared also
by other variants. Make this generic as tc3589x
Acked-by: Samuel Ortiz <sameo@linux.intel.com>
Signed-off-by: Sundar Iyer <sundar.iyer@stericsson.com>
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com>
Diffstat (limited to 'drivers/gpio/tc3589x-gpio.c')
-rw-r--r-- | drivers/gpio/tc3589x-gpio.c | 268 |
1 files changed, 134 insertions, 134 deletions
diff --git a/drivers/gpio/tc3589x-gpio.c b/drivers/gpio/tc3589x-gpio.c index 027b857c18ff..180d584454fb 100644 --- a/drivers/gpio/tc3589x-gpio.c +++ b/drivers/gpio/tc3589x-gpio.c | |||
@@ -24,9 +24,9 @@ enum { REG_IBE, REG_IEV, REG_IS, REG_IE }; | |||
24 | #define CACHE_NR_REGS 4 | 24 | #define CACHE_NR_REGS 4 |
25 | #define CACHE_NR_BANKS 3 | 25 | #define CACHE_NR_BANKS 3 |
26 | 26 | ||
27 | struct tc35892_gpio { | 27 | struct tc3589x_gpio { |
28 | struct gpio_chip chip; | 28 | struct gpio_chip chip; |
29 | struct tc35892 *tc35892; | 29 | struct tc3589x *tc3589x; |
30 | struct device *dev; | 30 | struct device *dev; |
31 | struct mutex irq_lock; | 31 | struct mutex irq_lock; |
32 | 32 | ||
@@ -37,179 +37,179 @@ struct tc35892_gpio { | |||
37 | u8 oldregs[CACHE_NR_REGS][CACHE_NR_BANKS]; | 37 | u8 oldregs[CACHE_NR_REGS][CACHE_NR_BANKS]; |
38 | }; | 38 | }; |
39 | 39 | ||
40 | static inline struct tc35892_gpio *to_tc35892_gpio(struct gpio_chip *chip) | 40 | static inline struct tc3589x_gpio *to_tc3589x_gpio(struct gpio_chip *chip) |
41 | { | 41 | { |
42 | return container_of(chip, struct tc35892_gpio, chip); | 42 | return container_of(chip, struct tc3589x_gpio, chip); |
43 | } | 43 | } |
44 | 44 | ||
45 | static int tc35892_gpio_get(struct gpio_chip *chip, unsigned offset) | 45 | static int tc3589x_gpio_get(struct gpio_chip *chip, unsigned offset) |
46 | { | 46 | { |
47 | struct tc35892_gpio *tc35892_gpio = to_tc35892_gpio(chip); | 47 | struct tc3589x_gpio *tc3589x_gpio = to_tc3589x_gpio(chip); |
48 | struct tc35892 *tc35892 = tc35892_gpio->tc35892; | 48 | struct tc3589x *tc3589x = tc3589x_gpio->tc3589x; |
49 | u8 reg = TC35892_GPIODATA0 + (offset / 8) * 2; | 49 | u8 reg = TC3589x_GPIODATA0 + (offset / 8) * 2; |
50 | u8 mask = 1 << (offset % 8); | 50 | u8 mask = 1 << (offset % 8); |
51 | int ret; | 51 | int ret; |
52 | 52 | ||
53 | ret = tc35892_reg_read(tc35892, reg); | 53 | ret = tc3589x_reg_read(tc3589x, reg); |
54 | if (ret < 0) | 54 | if (ret < 0) |
55 | return ret; | 55 | return ret; |
56 | 56 | ||
57 | return ret & mask; | 57 | return ret & mask; |
58 | } | 58 | } |
59 | 59 | ||
60 | static void tc35892_gpio_set(struct gpio_chip *chip, unsigned offset, int val) | 60 | static void tc3589x_gpio_set(struct gpio_chip *chip, unsigned offset, int val) |
61 | { | 61 | { |
62 | struct tc35892_gpio *tc35892_gpio = to_tc35892_gpio(chip); | 62 | struct tc3589x_gpio *tc3589x_gpio = to_tc3589x_gpio(chip); |
63 | struct tc35892 *tc35892 = tc35892_gpio->tc35892; | 63 | struct tc3589x *tc3589x = tc3589x_gpio->tc3589x; |
64 | u8 reg = TC35892_GPIODATA0 + (offset / 8) * 2; | 64 | u8 reg = TC3589x_GPIODATA0 + (offset / 8) * 2; |
65 | unsigned pos = offset % 8; | 65 | unsigned pos = offset % 8; |
66 | u8 data[] = {!!val << pos, 1 << pos}; | 66 | u8 data[] = {!!val << pos, 1 << pos}; |
67 | 67 | ||
68 | tc35892_block_write(tc35892, reg, ARRAY_SIZE(data), data); | 68 | tc3589x_block_write(tc3589x, reg, ARRAY_SIZE(data), data); |
69 | } | 69 | } |
70 | 70 | ||
71 | static int tc35892_gpio_direction_output(struct gpio_chip *chip, | 71 | static int tc3589x_gpio_direction_output(struct gpio_chip *chip, |
72 | unsigned offset, int val) | 72 | unsigned offset, int val) |
73 | { | 73 | { |
74 | struct tc35892_gpio *tc35892_gpio = to_tc35892_gpio(chip); | 74 | struct tc3589x_gpio *tc3589x_gpio = to_tc3589x_gpio(chip); |
75 | struct tc35892 *tc35892 = tc35892_gpio->tc35892; | 75 | struct tc3589x *tc3589x = tc3589x_gpio->tc3589x; |
76 | u8 reg = TC35892_GPIODIR0 + offset / 8; | 76 | u8 reg = TC3589x_GPIODIR0 + offset / 8; |
77 | unsigned pos = offset % 8; | 77 | unsigned pos = offset % 8; |
78 | 78 | ||
79 | tc35892_gpio_set(chip, offset, val); | 79 | tc3589x_gpio_set(chip, offset, val); |
80 | 80 | ||
81 | return tc35892_set_bits(tc35892, reg, 1 << pos, 1 << pos); | 81 | return tc3589x_set_bits(tc3589x, reg, 1 << pos, 1 << pos); |
82 | } | 82 | } |
83 | 83 | ||
84 | static int tc35892_gpio_direction_input(struct gpio_chip *chip, | 84 | static int tc3589x_gpio_direction_input(struct gpio_chip *chip, |
85 | unsigned offset) | 85 | unsigned offset) |
86 | { | 86 | { |
87 | struct tc35892_gpio *tc35892_gpio = to_tc35892_gpio(chip); | 87 | struct tc3589x_gpio *tc3589x_gpio = to_tc3589x_gpio(chip); |
88 | struct tc35892 *tc35892 = tc35892_gpio->tc35892; | 88 | struct tc3589x *tc3589x = tc3589x_gpio->tc3589x; |
89 | u8 reg = TC35892_GPIODIR0 + offset / 8; | 89 | u8 reg = TC3589x_GPIODIR0 + offset / 8; |
90 | unsigned pos = offset % 8; | 90 | unsigned pos = offset % 8; |
91 | 91 | ||
92 | return tc35892_set_bits(tc35892, reg, 1 << pos, 0); | 92 | return tc3589x_set_bits(tc3589x, reg, 1 << pos, 0); |
93 | } | 93 | } |
94 | 94 | ||
95 | static int tc35892_gpio_to_irq(struct gpio_chip *chip, unsigned offset) | 95 | static int tc3589x_gpio_to_irq(struct gpio_chip *chip, unsigned offset) |
96 | { | 96 | { |
97 | struct tc35892_gpio *tc35892_gpio = to_tc35892_gpio(chip); | 97 | struct tc3589x_gpio *tc3589x_gpio = to_tc3589x_gpio(chip); |
98 | 98 | ||
99 | return tc35892_gpio->irq_base + offset; | 99 | return tc3589x_gpio->irq_base + offset; |
100 | } | 100 | } |
101 | 101 | ||
102 | static struct gpio_chip template_chip = { | 102 | static struct gpio_chip template_chip = { |
103 | .label = "tc35892", | 103 | .label = "tc3589x", |
104 | .owner = THIS_MODULE, | 104 | .owner = THIS_MODULE, |
105 | .direction_input = tc35892_gpio_direction_input, | 105 | .direction_input = tc3589x_gpio_direction_input, |
106 | .get = tc35892_gpio_get, | 106 | .get = tc3589x_gpio_get, |
107 | .direction_output = tc35892_gpio_direction_output, | 107 | .direction_output = tc3589x_gpio_direction_output, |
108 | .set = tc35892_gpio_set, | 108 | .set = tc3589x_gpio_set, |
109 | .to_irq = tc35892_gpio_to_irq, | 109 | .to_irq = tc3589x_gpio_to_irq, |
110 | .can_sleep = 1, | 110 | .can_sleep = 1, |
111 | }; | 111 | }; |
112 | 112 | ||
113 | static int tc35892_gpio_irq_set_type(unsigned int irq, unsigned int type) | 113 | static int tc3589x_gpio_irq_set_type(unsigned int irq, unsigned int type) |
114 | { | 114 | { |
115 | struct tc35892_gpio *tc35892_gpio = get_irq_chip_data(irq); | 115 | struct tc3589x_gpio *tc3589x_gpio = get_irq_chip_data(irq); |
116 | int offset = irq - tc35892_gpio->irq_base; | 116 | int offset = irq - tc3589x_gpio->irq_base; |
117 | int regoffset = offset / 8; | 117 | int regoffset = offset / 8; |
118 | int mask = 1 << (offset % 8); | 118 | int mask = 1 << (offset % 8); |
119 | 119 | ||
120 | if (type == IRQ_TYPE_EDGE_BOTH) { | 120 | if (type == IRQ_TYPE_EDGE_BOTH) { |
121 | tc35892_gpio->regs[REG_IBE][regoffset] |= mask; | 121 | tc3589x_gpio->regs[REG_IBE][regoffset] |= mask; |
122 | return 0; | 122 | return 0; |
123 | } | 123 | } |
124 | 124 | ||
125 | tc35892_gpio->regs[REG_IBE][regoffset] &= ~mask; | 125 | tc3589x_gpio->regs[REG_IBE][regoffset] &= ~mask; |
126 | 126 | ||
127 | if (type == IRQ_TYPE_LEVEL_LOW || type == IRQ_TYPE_LEVEL_HIGH) | 127 | if (type == IRQ_TYPE_LEVEL_LOW || type == IRQ_TYPE_LEVEL_HIGH) |
128 | tc35892_gpio->regs[REG_IS][regoffset] |= mask; | 128 | tc3589x_gpio->regs[REG_IS][regoffset] |= mask; |
129 | else | 129 | else |
130 | tc35892_gpio->regs[REG_IS][regoffset] &= ~mask; | 130 | tc3589x_gpio->regs[REG_IS][regoffset] &= ~mask; |
131 | 131 | ||
132 | if (type == IRQ_TYPE_EDGE_RISING || type == IRQ_TYPE_LEVEL_HIGH) | 132 | if (type == IRQ_TYPE_EDGE_RISING || type == IRQ_TYPE_LEVEL_HIGH) |
133 | tc35892_gpio->regs[REG_IEV][regoffset] |= mask; | 133 | tc3589x_gpio->regs[REG_IEV][regoffset] |= mask; |
134 | else | 134 | else |
135 | tc35892_gpio->regs[REG_IEV][regoffset] &= ~mask; | 135 | tc3589x_gpio->regs[REG_IEV][regoffset] &= ~mask; |
136 | 136 | ||
137 | return 0; | 137 | return 0; |
138 | } | 138 | } |
139 | 139 | ||
140 | static void tc35892_gpio_irq_lock(unsigned int irq) | 140 | static void tc3589x_gpio_irq_lock(unsigned int irq) |
141 | { | 141 | { |
142 | struct tc35892_gpio *tc35892_gpio = get_irq_chip_data(irq); | 142 | struct tc3589x_gpio *tc3589x_gpio = get_irq_chip_data(irq); |
143 | 143 | ||
144 | mutex_lock(&tc35892_gpio->irq_lock); | 144 | mutex_lock(&tc3589x_gpio->irq_lock); |
145 | } | 145 | } |
146 | 146 | ||
147 | static void tc35892_gpio_irq_sync_unlock(unsigned int irq) | 147 | static void tc3589x_gpio_irq_sync_unlock(unsigned int irq) |
148 | { | 148 | { |
149 | struct tc35892_gpio *tc35892_gpio = get_irq_chip_data(irq); | 149 | struct tc3589x_gpio *tc3589x_gpio = get_irq_chip_data(irq); |
150 | struct tc35892 *tc35892 = tc35892_gpio->tc35892; | 150 | struct tc3589x *tc3589x = tc3589x_gpio->tc3589x; |
151 | static const u8 regmap[] = { | 151 | static const u8 regmap[] = { |
152 | [REG_IBE] = TC35892_GPIOIBE0, | 152 | [REG_IBE] = TC3589x_GPIOIBE0, |
153 | [REG_IEV] = TC35892_GPIOIEV0, | 153 | [REG_IEV] = TC3589x_GPIOIEV0, |
154 | [REG_IS] = TC35892_GPIOIS0, | 154 | [REG_IS] = TC3589x_GPIOIS0, |
155 | [REG_IE] = TC35892_GPIOIE0, | 155 | [REG_IE] = TC3589x_GPIOIE0, |
156 | }; | 156 | }; |
157 | int i, j; | 157 | int i, j; |
158 | 158 | ||
159 | for (i = 0; i < CACHE_NR_REGS; i++) { | 159 | for (i = 0; i < CACHE_NR_REGS; i++) { |
160 | for (j = 0; j < CACHE_NR_BANKS; j++) { | 160 | for (j = 0; j < CACHE_NR_BANKS; j++) { |
161 | u8 old = tc35892_gpio->oldregs[i][j]; | 161 | u8 old = tc3589x_gpio->oldregs[i][j]; |
162 | u8 new = tc35892_gpio->regs[i][j]; | 162 | u8 new = tc3589x_gpio->regs[i][j]; |
163 | 163 | ||
164 | if (new == old) | 164 | if (new == old) |
165 | continue; | 165 | continue; |
166 | 166 | ||
167 | tc35892_gpio->oldregs[i][j] = new; | 167 | tc3589x_gpio->oldregs[i][j] = new; |
168 | tc35892_reg_write(tc35892, regmap[i] + j * 8, new); | 168 | tc3589x_reg_write(tc3589x, regmap[i] + j * 8, new); |
169 | } | 169 | } |
170 | } | 170 | } |
171 | 171 | ||
172 | mutex_unlock(&tc35892_gpio->irq_lock); | 172 | mutex_unlock(&tc3589x_gpio->irq_lock); |
173 | } | 173 | } |
174 | 174 | ||
175 | static void tc35892_gpio_irq_mask(unsigned int irq) | 175 | static void tc3589x_gpio_irq_mask(unsigned int irq) |
176 | { | 176 | { |
177 | struct tc35892_gpio *tc35892_gpio = get_irq_chip_data(irq); | 177 | struct tc3589x_gpio *tc3589x_gpio = get_irq_chip_data(irq); |
178 | int offset = irq - tc35892_gpio->irq_base; | 178 | int offset = irq - tc3589x_gpio->irq_base; |
179 | int regoffset = offset / 8; | 179 | int regoffset = offset / 8; |
180 | int mask = 1 << (offset % 8); | 180 | int mask = 1 << (offset % 8); |
181 | 181 | ||
182 | tc35892_gpio->regs[REG_IE][regoffset] &= ~mask; | 182 | tc3589x_gpio->regs[REG_IE][regoffset] &= ~mask; |
183 | } | 183 | } |
184 | 184 | ||
185 | static void tc35892_gpio_irq_unmask(unsigned int irq) | 185 | static void tc3589x_gpio_irq_unmask(unsigned int irq) |
186 | { | 186 | { |
187 | struct tc35892_gpio *tc35892_gpio = get_irq_chip_data(irq); | 187 | struct tc3589x_gpio *tc3589x_gpio = get_irq_chip_data(irq); |
188 | int offset = irq - tc35892_gpio->irq_base; | 188 | int offset = irq - tc3589x_gpio->irq_base; |
189 | int regoffset = offset / 8; | 189 | int regoffset = offset / 8; |
190 | int mask = 1 << (offset % 8); | 190 | int mask = 1 << (offset % 8); |
191 | 191 | ||
192 | tc35892_gpio->regs[REG_IE][regoffset] |= mask; | 192 | tc3589x_gpio->regs[REG_IE][regoffset] |= mask; |
193 | } | 193 | } |
194 | 194 | ||
195 | static struct irq_chip tc35892_gpio_irq_chip = { | 195 | static struct irq_chip tc3589x_gpio_irq_chip = { |
196 | .name = "tc35892-gpio", | 196 | .name = "tc3589x-gpio", |
197 | .bus_lock = tc35892_gpio_irq_lock, | 197 | .bus_lock = tc3589x_gpio_irq_lock, |
198 | .bus_sync_unlock = tc35892_gpio_irq_sync_unlock, | 198 | .bus_sync_unlock = tc3589x_gpio_irq_sync_unlock, |
199 | .mask = tc35892_gpio_irq_mask, | 199 | .mask = tc3589x_gpio_irq_mask, |
200 | .unmask = tc35892_gpio_irq_unmask, | 200 | .unmask = tc3589x_gpio_irq_unmask, |
201 | .set_type = tc35892_gpio_irq_set_type, | 201 | .set_type = tc3589x_gpio_irq_set_type, |
202 | }; | 202 | }; |
203 | 203 | ||
204 | static irqreturn_t tc35892_gpio_irq(int irq, void *dev) | 204 | static irqreturn_t tc3589x_gpio_irq(int irq, void *dev) |
205 | { | 205 | { |
206 | struct tc35892_gpio *tc35892_gpio = dev; | 206 | struct tc3589x_gpio *tc3589x_gpio = dev; |
207 | struct tc35892 *tc35892 = tc35892_gpio->tc35892; | 207 | struct tc3589x *tc3589x = tc3589x_gpio->tc3589x; |
208 | u8 status[CACHE_NR_BANKS]; | 208 | u8 status[CACHE_NR_BANKS]; |
209 | int ret; | 209 | int ret; |
210 | int i; | 210 | int i; |
211 | 211 | ||
212 | ret = tc35892_block_read(tc35892, TC35892_GPIOMIS0, | 212 | ret = tc3589x_block_read(tc3589x, TC3589x_GPIOMIS0, |
213 | ARRAY_SIZE(status), status); | 213 | ARRAY_SIZE(status), status); |
214 | if (ret < 0) | 214 | if (ret < 0) |
215 | return IRQ_NONE; | 215 | return IRQ_NONE; |
@@ -223,24 +223,24 @@ static irqreturn_t tc35892_gpio_irq(int irq, void *dev) | |||
223 | int bit = __ffs(stat); | 223 | int bit = __ffs(stat); |
224 | int line = i * 8 + bit; | 224 | int line = i * 8 + bit; |
225 | 225 | ||
226 | handle_nested_irq(tc35892_gpio->irq_base + line); | 226 | handle_nested_irq(tc3589x_gpio->irq_base + line); |
227 | stat &= ~(1 << bit); | 227 | stat &= ~(1 << bit); |
228 | } | 228 | } |
229 | 229 | ||
230 | tc35892_reg_write(tc35892, TC35892_GPIOIC0 + i, status[i]); | 230 | tc3589x_reg_write(tc3589x, TC3589x_GPIOIC0 + i, status[i]); |
231 | } | 231 | } |
232 | 232 | ||
233 | return IRQ_HANDLED; | 233 | return IRQ_HANDLED; |
234 | } | 234 | } |
235 | 235 | ||
236 | static int tc35892_gpio_irq_init(struct tc35892_gpio *tc35892_gpio) | 236 | static int tc3589x_gpio_irq_init(struct tc3589x_gpio *tc3589x_gpio) |
237 | { | 237 | { |
238 | int base = tc35892_gpio->irq_base; | 238 | int base = tc3589x_gpio->irq_base; |
239 | int irq; | 239 | int irq; |
240 | 240 | ||
241 | for (irq = base; irq < base + tc35892_gpio->chip.ngpio; irq++) { | 241 | for (irq = base; irq < base + tc3589x_gpio->chip.ngpio; irq++) { |
242 | set_irq_chip_data(irq, tc35892_gpio); | 242 | set_irq_chip_data(irq, tc3589x_gpio); |
243 | set_irq_chip_and_handler(irq, &tc35892_gpio_irq_chip, | 243 | set_irq_chip_and_handler(irq, &tc3589x_gpio_irq_chip, |
244 | handle_simple_irq); | 244 | handle_simple_irq); |
245 | set_irq_nested_thread(irq, 1); | 245 | set_irq_nested_thread(irq, 1); |
246 | #ifdef CONFIG_ARM | 246 | #ifdef CONFIG_ARM |
@@ -253,12 +253,12 @@ static int tc35892_gpio_irq_init(struct tc35892_gpio *tc35892_gpio) | |||
253 | return 0; | 253 | return 0; |
254 | } | 254 | } |
255 | 255 | ||
256 | static void tc35892_gpio_irq_remove(struct tc35892_gpio *tc35892_gpio) | 256 | static void tc3589x_gpio_irq_remove(struct tc3589x_gpio *tc3589x_gpio) |
257 | { | 257 | { |
258 | int base = tc35892_gpio->irq_base; | 258 | int base = tc3589x_gpio->irq_base; |
259 | int irq; | 259 | int irq; |
260 | 260 | ||
261 | for (irq = base; irq < base + tc35892_gpio->chip.ngpio; irq++) { | 261 | for (irq = base; irq < base + tc3589x_gpio->chip.ngpio; irq++) { |
262 | #ifdef CONFIG_ARM | 262 | #ifdef CONFIG_ARM |
263 | set_irq_flags(irq, 0); | 263 | set_irq_flags(irq, 0); |
264 | #endif | 264 | #endif |
@@ -267,15 +267,15 @@ static void tc35892_gpio_irq_remove(struct tc35892_gpio *tc35892_gpio) | |||
267 | } | 267 | } |
268 | } | 268 | } |
269 | 269 | ||
270 | static int __devinit tc35892_gpio_probe(struct platform_device *pdev) | 270 | static int __devinit tc3589x_gpio_probe(struct platform_device *pdev) |
271 | { | 271 | { |
272 | struct tc35892 *tc35892 = dev_get_drvdata(pdev->dev.parent); | 272 | struct tc3589x *tc3589x = dev_get_drvdata(pdev->dev.parent); |
273 | struct tc35892_gpio_platform_data *pdata; | 273 | struct tc3589x_gpio_platform_data *pdata; |
274 | struct tc35892_gpio *tc35892_gpio; | 274 | struct tc3589x_gpio *tc3589x_gpio; |
275 | int ret; | 275 | int ret; |
276 | int irq; | 276 | int irq; |
277 | 277 | ||
278 | pdata = tc35892->pdata->gpio; | 278 | pdata = tc3589x->pdata->gpio; |
279 | if (!pdata) | 279 | if (!pdata) |
280 | return -ENODEV; | 280 | return -ENODEV; |
281 | 281 | ||
@@ -283,107 +283,107 @@ static int __devinit tc35892_gpio_probe(struct platform_device *pdev) | |||
283 | if (irq < 0) | 283 | if (irq < 0) |
284 | return irq; | 284 | return irq; |
285 | 285 | ||
286 | tc35892_gpio = kzalloc(sizeof(struct tc35892_gpio), GFP_KERNEL); | 286 | tc3589x_gpio = kzalloc(sizeof(struct tc3589x_gpio), GFP_KERNEL); |
287 | if (!tc35892_gpio) | 287 | if (!tc3589x_gpio) |
288 | return -ENOMEM; | 288 | return -ENOMEM; |
289 | 289 | ||
290 | mutex_init(&tc35892_gpio->irq_lock); | 290 | mutex_init(&tc3589x_gpio->irq_lock); |
291 | 291 | ||
292 | tc35892_gpio->dev = &pdev->dev; | 292 | tc3589x_gpio->dev = &pdev->dev; |
293 | tc35892_gpio->tc35892 = tc35892; | 293 | tc3589x_gpio->tc3589x = tc3589x; |
294 | 294 | ||
295 | tc35892_gpio->chip = template_chip; | 295 | tc3589x_gpio->chip = template_chip; |
296 | tc35892_gpio->chip.ngpio = tc35892->num_gpio; | 296 | tc3589x_gpio->chip.ngpio = tc3589x->num_gpio; |
297 | tc35892_gpio->chip.dev = &pdev->dev; | 297 | tc3589x_gpio->chip.dev = &pdev->dev; |
298 | tc35892_gpio->chip.base = pdata->gpio_base; | 298 | tc3589x_gpio->chip.base = pdata->gpio_base; |
299 | 299 | ||
300 | tc35892_gpio->irq_base = tc35892->irq_base + TC35892_INT_GPIO(0); | 300 | tc3589x_gpio->irq_base = tc3589x->irq_base + TC3589x_INT_GPIO(0); |
301 | 301 | ||
302 | /* Bring the GPIO module out of reset */ | 302 | /* Bring the GPIO module out of reset */ |
303 | ret = tc35892_set_bits(tc35892, TC35892_RSTCTRL, | 303 | ret = tc3589x_set_bits(tc3589x, TC3589x_RSTCTRL, |
304 | TC35892_RSTCTRL_GPIRST, 0); | 304 | TC3589x_RSTCTRL_GPIRST, 0); |
305 | if (ret < 0) | 305 | if (ret < 0) |
306 | goto out_free; | 306 | goto out_free; |
307 | 307 | ||
308 | ret = tc35892_gpio_irq_init(tc35892_gpio); | 308 | ret = tc3589x_gpio_irq_init(tc3589x_gpio); |
309 | if (ret) | 309 | if (ret) |
310 | goto out_free; | 310 | goto out_free; |
311 | 311 | ||
312 | ret = request_threaded_irq(irq, NULL, tc35892_gpio_irq, IRQF_ONESHOT, | 312 | ret = request_threaded_irq(irq, NULL, tc3589x_gpio_irq, IRQF_ONESHOT, |
313 | "tc35892-gpio", tc35892_gpio); | 313 | "tc3589x-gpio", tc3589x_gpio); |
314 | if (ret) { | 314 | if (ret) { |
315 | dev_err(&pdev->dev, "unable to get irq: %d\n", ret); | 315 | dev_err(&pdev->dev, "unable to get irq: %d\n", ret); |
316 | goto out_removeirq; | 316 | goto out_removeirq; |
317 | } | 317 | } |
318 | 318 | ||
319 | ret = gpiochip_add(&tc35892_gpio->chip); | 319 | ret = gpiochip_add(&tc3589x_gpio->chip); |
320 | if (ret) { | 320 | if (ret) { |
321 | dev_err(&pdev->dev, "unable to add gpiochip: %d\n", ret); | 321 | dev_err(&pdev->dev, "unable to add gpiochip: %d\n", ret); |
322 | goto out_freeirq; | 322 | goto out_freeirq; |
323 | } | 323 | } |
324 | 324 | ||
325 | if (pdata->setup) | 325 | if (pdata->setup) |
326 | pdata->setup(tc35892, tc35892_gpio->chip.base); | 326 | pdata->setup(tc3589x, tc3589x_gpio->chip.base); |
327 | 327 | ||
328 | platform_set_drvdata(pdev, tc35892_gpio); | 328 | platform_set_drvdata(pdev, tc3589x_gpio); |
329 | 329 | ||
330 | return 0; | 330 | return 0; |
331 | 331 | ||
332 | out_freeirq: | 332 | out_freeirq: |
333 | free_irq(irq, tc35892_gpio); | 333 | free_irq(irq, tc3589x_gpio); |
334 | out_removeirq: | 334 | out_removeirq: |
335 | tc35892_gpio_irq_remove(tc35892_gpio); | 335 | tc3589x_gpio_irq_remove(tc3589x_gpio); |
336 | out_free: | 336 | out_free: |
337 | kfree(tc35892_gpio); | 337 | kfree(tc3589x_gpio); |
338 | return ret; | 338 | return ret; |
339 | } | 339 | } |
340 | 340 | ||
341 | static int __devexit tc35892_gpio_remove(struct platform_device *pdev) | 341 | static int __devexit tc3589x_gpio_remove(struct platform_device *pdev) |
342 | { | 342 | { |
343 | struct tc35892_gpio *tc35892_gpio = platform_get_drvdata(pdev); | 343 | struct tc3589x_gpio *tc3589x_gpio = platform_get_drvdata(pdev); |
344 | struct tc35892 *tc35892 = tc35892_gpio->tc35892; | 344 | struct tc3589x *tc3589x = tc3589x_gpio->tc3589x; |
345 | struct tc35892_gpio_platform_data *pdata = tc35892->pdata->gpio; | 345 | struct tc3589x_gpio_platform_data *pdata = tc3589x->pdata->gpio; |
346 | int irq = platform_get_irq(pdev, 0); | 346 | int irq = platform_get_irq(pdev, 0); |
347 | int ret; | 347 | int ret; |
348 | 348 | ||
349 | if (pdata->remove) | 349 | if (pdata->remove) |
350 | pdata->remove(tc35892, tc35892_gpio->chip.base); | 350 | pdata->remove(tc3589x, tc3589x_gpio->chip.base); |
351 | 351 | ||
352 | ret = gpiochip_remove(&tc35892_gpio->chip); | 352 | ret = gpiochip_remove(&tc3589x_gpio->chip); |
353 | if (ret < 0) { | 353 | if (ret < 0) { |
354 | dev_err(tc35892_gpio->dev, | 354 | dev_err(tc3589x_gpio->dev, |
355 | "unable to remove gpiochip: %d\n", ret); | 355 | "unable to remove gpiochip: %d\n", ret); |
356 | return ret; | 356 | return ret; |
357 | } | 357 | } |
358 | 358 | ||
359 | free_irq(irq, tc35892_gpio); | 359 | free_irq(irq, tc3589x_gpio); |
360 | tc35892_gpio_irq_remove(tc35892_gpio); | 360 | tc3589x_gpio_irq_remove(tc3589x_gpio); |
361 | 361 | ||
362 | platform_set_drvdata(pdev, NULL); | 362 | platform_set_drvdata(pdev, NULL); |
363 | kfree(tc35892_gpio); | 363 | kfree(tc3589x_gpio); |
364 | 364 | ||
365 | return 0; | 365 | return 0; |
366 | } | 366 | } |
367 | 367 | ||
368 | static struct platform_driver tc35892_gpio_driver = { | 368 | static struct platform_driver tc3589x_gpio_driver = { |
369 | .driver.name = "tc35892-gpio", | 369 | .driver.name = "tc3589x-gpio", |
370 | .driver.owner = THIS_MODULE, | 370 | .driver.owner = THIS_MODULE, |
371 | .probe = tc35892_gpio_probe, | 371 | .probe = tc3589x_gpio_probe, |
372 | .remove = __devexit_p(tc35892_gpio_remove), | 372 | .remove = __devexit_p(tc3589x_gpio_remove), |
373 | }; | 373 | }; |
374 | 374 | ||
375 | static int __init tc35892_gpio_init(void) | 375 | static int __init tc3589x_gpio_init(void) |
376 | { | 376 | { |
377 | return platform_driver_register(&tc35892_gpio_driver); | 377 | return platform_driver_register(&tc3589x_gpio_driver); |
378 | } | 378 | } |
379 | subsys_initcall(tc35892_gpio_init); | 379 | subsys_initcall(tc3589x_gpio_init); |
380 | 380 | ||
381 | static void __exit tc35892_gpio_exit(void) | 381 | static void __exit tc3589x_gpio_exit(void) |
382 | { | 382 | { |
383 | platform_driver_unregister(&tc35892_gpio_driver); | 383 | platform_driver_unregister(&tc3589x_gpio_driver); |
384 | } | 384 | } |
385 | module_exit(tc35892_gpio_exit); | 385 | module_exit(tc3589x_gpio_exit); |
386 | 386 | ||
387 | MODULE_LICENSE("GPL v2"); | 387 | MODULE_LICENSE("GPL v2"); |
388 | MODULE_DESCRIPTION("TC35892 GPIO driver"); | 388 | MODULE_DESCRIPTION("TC3589x GPIO driver"); |
389 | MODULE_AUTHOR("Hanumath Prasad, Rabin Vincent"); | 389 | MODULE_AUTHOR("Hanumath Prasad, Rabin Vincent"); |