diff options
author | Marek Vasut <marek.vasut@gmail.com> | 2009-07-17 06:50:43 -0400 |
---|---|---|
committer | Eric Miao <eric.y.miao@gmail.com> | 2009-09-10 06:49:39 -0400 |
commit | c4bd01727380ce666aba987b3d7c0e838cb99bbe (patch) | |
tree | 5ee425da3645c1371b154bc47d1ae7ab3c81041b | |
parent | 2a23ec3679d84ac243add761fa3d3872cf6dcb11 (diff) |
[ARM] pxa: add gpio_pwdown(_inverted) into pxaficp_ir.c
and convert PXA-based devices to gpio_pwdown where possible.
Signed-off-by: Marek Vasut <marek.vasut@gmail.com>
Signed-off-by: Eric Miao <eric.y.miao@gmail.com>
-rw-r--r-- | arch/arm/mach-pxa/corgi.c | 27 | ||||
-rw-r--r-- | arch/arm/mach-pxa/e740.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-pxa/e750.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-pxa/eseries.c | 39 | ||||
-rw-r--r-- | arch/arm/mach-pxa/hx4700.c | 9 | ||||
-rw-r--r-- | arch/arm/mach-pxa/include/mach/irda.h | 2 | ||||
-rw-r--r-- | arch/arm/mach-pxa/lubbock.c | 5 | ||||
-rw-r--r-- | arch/arm/mach-pxa/magician.c | 10 | ||||
-rw-r--r-- | arch/arm/mach-pxa/mainstone.c | 5 | ||||
-rw-r--r-- | arch/arm/mach-pxa/palmld.c | 30 | ||||
-rw-r--r-- | arch/arm/mach-pxa/palmt5.c | 30 | ||||
-rw-r--r-- | arch/arm/mach-pxa/palmtc.c | 30 | ||||
-rw-r--r-- | arch/arm/mach-pxa/palmte2.c | 30 | ||||
-rw-r--r-- | arch/arm/mach-pxa/palmtx.c | 30 | ||||
-rw-r--r-- | arch/arm/mach-pxa/palmz72.c | 28 | ||||
-rw-r--r-- | arch/arm/mach-pxa/poodle.c | 27 | ||||
-rw-r--r-- | arch/arm/mach-pxa/pxa2xx.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-pxa/spitz.c | 46 | ||||
-rw-r--r-- | arch/arm/mach-pxa/tosa.c | 9 | ||||
-rw-r--r-- | arch/arm/mach-pxa/treo680.c | 39 | ||||
-rw-r--r-- | arch/arm/mach-pxa/trizeps4.c | 1 | ||||
-rw-r--r-- | drivers/net/irda/pxaficp_ir.c | 47 |
22 files changed, 81 insertions, 366 deletions
diff --git a/arch/arm/mach-pxa/corgi.c b/arch/arm/mach-pxa/corgi.c index 0ff5ed80936f..b536b5a5a10d 100644 --- a/arch/arm/mach-pxa/corgi.c +++ b/arch/arm/mach-pxa/corgi.c | |||
@@ -447,34 +447,9 @@ static struct pxamci_platform_data corgi_mci_platform_data = { | |||
447 | /* | 447 | /* |
448 | * Irda | 448 | * Irda |
449 | */ | 449 | */ |
450 | static void corgi_irda_transceiver_mode(struct device *dev, int mode) | ||
451 | { | ||
452 | gpio_set_value(CORGI_GPIO_IR_ON, mode & IR_OFF); | ||
453 | pxa2xx_transceiver_mode(dev, mode); | ||
454 | } | ||
455 | |||
456 | static int corgi_irda_startup(struct device *dev) | ||
457 | { | ||
458 | int err; | ||
459 | |||
460 | err = gpio_request(CORGI_GPIO_IR_ON, "IR_ON"); | ||
461 | if (err) | ||
462 | return err; | ||
463 | |||
464 | gpio_direction_output(CORGI_GPIO_IR_ON, 1); | ||
465 | return 0; | ||
466 | } | ||
467 | |||
468 | static void corgi_irda_shutdown(struct device *dev) | ||
469 | { | ||
470 | gpio_free(CORGI_GPIO_IR_ON); | ||
471 | } | ||
472 | |||
473 | static struct pxaficp_platform_data corgi_ficp_platform_data = { | 450 | static struct pxaficp_platform_data corgi_ficp_platform_data = { |
451 | .gpio_pwdown = CORGI_GPIO_IR_ON, | ||
474 | .transceiver_cap = IR_SIRMODE | IR_OFF, | 452 | .transceiver_cap = IR_SIRMODE | IR_OFF, |
475 | .transceiver_mode = corgi_irda_transceiver_mode, | ||
476 | .startup = corgi_irda_startup, | ||
477 | .shutdown = corgi_irda_shutdown, | ||
478 | }; | 453 | }; |
479 | 454 | ||
480 | 455 | ||
diff --git a/arch/arm/mach-pxa/e740.c b/arch/arm/mach-pxa/e740.c index a36fc17f671d..49acdfa6650d 100644 --- a/arch/arm/mach-pxa/e740.c +++ b/arch/arm/mach-pxa/e740.c | |||
@@ -199,7 +199,6 @@ static void __init e740_init(void) | |||
199 | platform_add_devices(devices, ARRAY_SIZE(devices)); | 199 | platform_add_devices(devices, ARRAY_SIZE(devices)); |
200 | pxa_set_udc_info(&e7xx_udc_mach_info); | 200 | pxa_set_udc_info(&e7xx_udc_mach_info); |
201 | pxa_set_ac97_info(NULL); | 201 | pxa_set_ac97_info(NULL); |
202 | e7xx_irda_init(); | ||
203 | pxa_set_ficp_info(&e7xx_ficp_platform_data); | 202 | pxa_set_ficp_info(&e7xx_ficp_platform_data); |
204 | } | 203 | } |
205 | 204 | ||
diff --git a/arch/arm/mach-pxa/e750.c b/arch/arm/mach-pxa/e750.c index 1d00110590e5..4052ece3ef49 100644 --- a/arch/arm/mach-pxa/e750.c +++ b/arch/arm/mach-pxa/e750.c | |||
@@ -200,7 +200,6 @@ static void __init e750_init(void) | |||
200 | platform_add_devices(devices, ARRAY_SIZE(devices)); | 200 | platform_add_devices(devices, ARRAY_SIZE(devices)); |
201 | pxa_set_udc_info(&e7xx_udc_mach_info); | 201 | pxa_set_udc_info(&e7xx_udc_mach_info); |
202 | pxa_set_ac97_info(NULL); | 202 | pxa_set_ac97_info(NULL); |
203 | e7xx_irda_init(); | ||
204 | pxa_set_ficp_info(&e7xx_ficp_platform_data); | 203 | pxa_set_ficp_info(&e7xx_ficp_platform_data); |
205 | } | 204 | } |
206 | 205 | ||
diff --git a/arch/arm/mach-pxa/eseries.c b/arch/arm/mach-pxa/eseries.c index c60dadf847a6..91417f035069 100644 --- a/arch/arm/mach-pxa/eseries.c +++ b/arch/arm/mach-pxa/eseries.c | |||
@@ -47,44 +47,9 @@ struct pxa2xx_udc_mach_info e7xx_udc_mach_info = { | |||
47 | .gpio_pullup_inverted = 1 | 47 | .gpio_pullup_inverted = 1 |
48 | }; | 48 | }; |
49 | 49 | ||
50 | static void e7xx_irda_transceiver_mode(struct device *dev, int mode) | ||
51 | { | ||
52 | if (mode & IR_OFF) { | ||
53 | gpio_set_value(GPIO_E7XX_IR_OFF, 1); | ||
54 | pxa2xx_transceiver_mode(dev, mode); | ||
55 | } else { | ||
56 | pxa2xx_transceiver_mode(dev, mode); | ||
57 | gpio_set_value(GPIO_E7XX_IR_OFF, 0); | ||
58 | } | ||
59 | } | ||
60 | |||
61 | int e7xx_irda_init(void) | ||
62 | { | ||
63 | int ret; | ||
64 | |||
65 | ret = gpio_request(GPIO_E7XX_IR_OFF, "IrDA power"); | ||
66 | if (ret) | ||
67 | goto out; | ||
68 | |||
69 | ret = gpio_direction_output(GPIO_E7XX_IR_OFF, 0); | ||
70 | if (ret) | ||
71 | goto out; | ||
72 | |||
73 | e7xx_irda_transceiver_mode(NULL, IR_SIRMODE | IR_OFF); | ||
74 | out: | ||
75 | return ret; | ||
76 | } | ||
77 | |||
78 | static void e7xx_irda_shutdown(struct device *dev) | ||
79 | { | ||
80 | e7xx_irda_transceiver_mode(dev, IR_SIRMODE | IR_OFF); | ||
81 | gpio_free(GPIO_E7XX_IR_OFF); | ||
82 | } | ||
83 | |||
84 | struct pxaficp_platform_data e7xx_ficp_platform_data = { | 50 | struct pxaficp_platform_data e7xx_ficp_platform_data = { |
85 | .transceiver_cap = IR_SIRMODE | IR_OFF, | 51 | .gpio_pwdown = GPIO_E7XX_IR_OFF, |
86 | .transceiver_mode = e7xx_irda_transceiver_mode, | 52 | .transceiver_cap = IR_SIRMODE | IR_OFF, |
87 | .shutdown = e7xx_irda_shutdown, | ||
88 | }; | 53 | }; |
89 | 54 | ||
90 | int eseries_tmio_enable(struct platform_device *dev) | 55 | int eseries_tmio_enable(struct platform_device *dev) |
diff --git a/arch/arm/mach-pxa/hx4700.c b/arch/arm/mach-pxa/hx4700.c index f2058721254b..abff9e132749 100644 --- a/arch/arm/mach-pxa/hx4700.c +++ b/arch/arm/mach-pxa/hx4700.c | |||
@@ -175,14 +175,9 @@ static int hx4700_gpio_request(struct gpio_ress *gpios, int size) | |||
175 | * IRDA | 175 | * IRDA |
176 | */ | 176 | */ |
177 | 177 | ||
178 | static void irda_transceiver_mode(struct device *dev, int mode) | ||
179 | { | ||
180 | gpio_set_value(GPIO105_HX4700_nIR_ON, mode & IR_OFF); | ||
181 | } | ||
182 | |||
183 | static struct pxaficp_platform_data ficp_info = { | 178 | static struct pxaficp_platform_data ficp_info = { |
184 | .transceiver_cap = IR_SIRMODE | IR_OFF, | 179 | .gpio_pwdown = GPIO105_HX4700_nIR_ON, |
185 | .transceiver_mode = irda_transceiver_mode, | 180 | .transceiver_cap = IR_SIRMODE | IR_OFF, |
186 | }; | 181 | }; |
187 | 182 | ||
188 | /* | 183 | /* |
diff --git a/arch/arm/mach-pxa/include/mach/irda.h b/arch/arm/mach-pxa/include/mach/irda.h index 0a50c3c763df..3cd41f77dda4 100644 --- a/arch/arm/mach-pxa/include/mach/irda.h +++ b/arch/arm/mach-pxa/include/mach/irda.h | |||
@@ -12,6 +12,8 @@ struct pxaficp_platform_data { | |||
12 | void (*transceiver_mode)(struct device *dev, int mode); | 12 | void (*transceiver_mode)(struct device *dev, int mode); |
13 | int (*startup)(struct device *dev); | 13 | int (*startup)(struct device *dev); |
14 | void (*shutdown)(struct device *dev); | 14 | void (*shutdown)(struct device *dev); |
15 | int gpio_pwdown; /* powerdown GPIO for the IrDA chip */ | ||
16 | bool gpio_pwdown_inverted; /* gpio_pwdown is inverted */ | ||
15 | }; | 17 | }; |
16 | 18 | ||
17 | extern void pxa_set_ficp_info(struct pxaficp_platform_data *info); | 19 | extern void pxa_set_ficp_info(struct pxaficp_platform_data *info); |
diff --git a/arch/arm/mach-pxa/lubbock.c b/arch/arm/mach-pxa/lubbock.c index 1785cc9494d9..c6a94d3fdd61 100644 --- a/arch/arm/mach-pxa/lubbock.c +++ b/arch/arm/mach-pxa/lubbock.c | |||
@@ -507,8 +507,9 @@ static void lubbock_irda_transceiver_mode(struct device *dev, int mode) | |||
507 | } | 507 | } |
508 | 508 | ||
509 | static struct pxaficp_platform_data lubbock_ficp_platform_data = { | 509 | static struct pxaficp_platform_data lubbock_ficp_platform_data = { |
510 | .transceiver_cap = IR_SIRMODE | IR_FIRMODE, | 510 | .gpio_pwdown = -1, |
511 | .transceiver_mode = lubbock_irda_transceiver_mode, | 511 | .transceiver_cap = IR_SIRMODE | IR_FIRMODE, |
512 | .transceiver_mode = lubbock_irda_transceiver_mode, | ||
512 | }; | 513 | }; |
513 | 514 | ||
514 | static void __init lubbock_init(void) | 515 | static void __init lubbock_init(void) |
diff --git a/arch/arm/mach-pxa/magician.c b/arch/arm/mach-pxa/magician.c index 0daba43d7ca1..5360c07f5138 100644 --- a/arch/arm/mach-pxa/magician.c +++ b/arch/arm/mach-pxa/magician.c | |||
@@ -140,15 +140,9 @@ static unsigned long magician_pin_config[] __initdata = { | |||
140 | * IRDA | 140 | * IRDA |
141 | */ | 141 | */ |
142 | 142 | ||
143 | static void magician_irda_transceiver_mode(struct device *dev, int mode) | ||
144 | { | ||
145 | gpio_set_value(GPIO83_MAGICIAN_nIR_EN, mode & IR_OFF); | ||
146 | pxa2xx_transceiver_mode(dev, mode); | ||
147 | } | ||
148 | |||
149 | static struct pxaficp_platform_data magician_ficp_info = { | 143 | static struct pxaficp_platform_data magician_ficp_info = { |
150 | .transceiver_cap = IR_SIRMODE | IR_OFF, | 144 | .gpio_pwdown = GPIO83_MAGICIAN_nIR_EN, |
151 | .transceiver_mode = magician_irda_transceiver_mode, | 145 | .transceiver_cap = IR_SIRMODE | IR_OFF, |
152 | }; | 146 | }; |
153 | 147 | ||
154 | /* | 148 | /* |
diff --git a/arch/arm/mach-pxa/mainstone.c b/arch/arm/mach-pxa/mainstone.c index f7dc23078ce3..a4eeae345e64 100644 --- a/arch/arm/mach-pxa/mainstone.c +++ b/arch/arm/mach-pxa/mainstone.c | |||
@@ -479,8 +479,9 @@ static void mainstone_irda_transceiver_mode(struct device *dev, int mode) | |||
479 | } | 479 | } |
480 | 480 | ||
481 | static struct pxaficp_platform_data mainstone_ficp_platform_data = { | 481 | static struct pxaficp_platform_data mainstone_ficp_platform_data = { |
482 | .transceiver_cap = IR_SIRMODE | IR_FIRMODE | IR_OFF, | 482 | .gpio_pwdown = -1, |
483 | .transceiver_mode = mainstone_irda_transceiver_mode, | 483 | .transceiver_cap = IR_SIRMODE | IR_FIRMODE | IR_OFF, |
484 | .transceiver_mode = mainstone_irda_transceiver_mode, | ||
484 | }; | 485 | }; |
485 | 486 | ||
486 | static struct gpio_keys_button gpio_keys_button[] = { | 487 | static struct gpio_keys_button gpio_keys_button[] = { |
diff --git a/arch/arm/mach-pxa/palmld.c b/arch/arm/mach-pxa/palmld.c index b3ae8b958ad6..1ad029dd4438 100644 --- a/arch/arm/mach-pxa/palmld.c +++ b/arch/arm/mach-pxa/palmld.c | |||
@@ -304,35 +304,9 @@ static struct platform_device palmld_backlight = { | |||
304 | /****************************************************************************** | 304 | /****************************************************************************** |
305 | * IrDA | 305 | * IrDA |
306 | ******************************************************************************/ | 306 | ******************************************************************************/ |
307 | static int palmld_irda_startup(struct device *dev) | ||
308 | { | ||
309 | int err; | ||
310 | err = gpio_request(GPIO_NR_PALMLD_IR_DISABLE, "IR DISABLE"); | ||
311 | if (err) | ||
312 | goto err; | ||
313 | err = gpio_direction_output(GPIO_NR_PALMLD_IR_DISABLE, 1); | ||
314 | if (err) | ||
315 | gpio_free(GPIO_NR_PALMLD_IR_DISABLE); | ||
316 | err: | ||
317 | return err; | ||
318 | } | ||
319 | |||
320 | static void palmld_irda_shutdown(struct device *dev) | ||
321 | { | ||
322 | gpio_free(GPIO_NR_PALMLD_IR_DISABLE); | ||
323 | } | ||
324 | |||
325 | static void palmld_irda_transceiver_mode(struct device *dev, int mode) | ||
326 | { | ||
327 | gpio_set_value(GPIO_NR_PALMLD_IR_DISABLE, mode & IR_OFF); | ||
328 | pxa2xx_transceiver_mode(dev, mode); | ||
329 | } | ||
330 | |||
331 | static struct pxaficp_platform_data palmld_ficp_platform_data = { | 307 | static struct pxaficp_platform_data palmld_ficp_platform_data = { |
332 | .startup = palmld_irda_startup, | 308 | .gpio_pwdown = GPIO_NR_PALMLD_IR_DISABLE, |
333 | .shutdown = palmld_irda_shutdown, | 309 | .transceiver_cap = IR_SIRMODE | IR_OFF, |
334 | .transceiver_cap = IR_SIRMODE | IR_FIRMODE | IR_OFF, | ||
335 | .transceiver_mode = palmld_irda_transceiver_mode, | ||
336 | }; | 310 | }; |
337 | 311 | ||
338 | /****************************************************************************** | 312 | /****************************************************************************** |
diff --git a/arch/arm/mach-pxa/palmt5.c b/arch/arm/mach-pxa/palmt5.c index 88dcaac358a2..2dd7ce28556b 100644 --- a/arch/arm/mach-pxa/palmt5.c +++ b/arch/arm/mach-pxa/palmt5.c | |||
@@ -243,35 +243,9 @@ static struct platform_device palmt5_backlight = { | |||
243 | /****************************************************************************** | 243 | /****************************************************************************** |
244 | * IrDA | 244 | * IrDA |
245 | ******************************************************************************/ | 245 | ******************************************************************************/ |
246 | static int palmt5_irda_startup(struct device *dev) | ||
247 | { | ||
248 | int err; | ||
249 | err = gpio_request(GPIO_NR_PALMT5_IR_DISABLE, "IR DISABLE"); | ||
250 | if (err) | ||
251 | goto err; | ||
252 | err = gpio_direction_output(GPIO_NR_PALMT5_IR_DISABLE, 1); | ||
253 | if (err) | ||
254 | gpio_free(GPIO_NR_PALMT5_IR_DISABLE); | ||
255 | err: | ||
256 | return err; | ||
257 | } | ||
258 | |||
259 | static void palmt5_irda_shutdown(struct device *dev) | ||
260 | { | ||
261 | gpio_free(GPIO_NR_PALMT5_IR_DISABLE); | ||
262 | } | ||
263 | |||
264 | static void palmt5_irda_transceiver_mode(struct device *dev, int mode) | ||
265 | { | ||
266 | gpio_set_value(GPIO_NR_PALMT5_IR_DISABLE, mode & IR_OFF); | ||
267 | pxa2xx_transceiver_mode(dev, mode); | ||
268 | } | ||
269 | |||
270 | static struct pxaficp_platform_data palmt5_ficp_platform_data = { | 246 | static struct pxaficp_platform_data palmt5_ficp_platform_data = { |
271 | .startup = palmt5_irda_startup, | 247 | .gpio_pwdown = GPIO_NR_PALMT5_IR_DISABLE, |
272 | .shutdown = palmt5_irda_shutdown, | 248 | .transceiver_cap = IR_SIRMODE | IR_OFF, |
273 | .transceiver_cap = IR_SIRMODE | IR_FIRMODE | IR_OFF, | ||
274 | .transceiver_mode = palmt5_irda_transceiver_mode, | ||
275 | }; | 249 | }; |
276 | 250 | ||
277 | /****************************************************************************** | 251 | /****************************************************************************** |
diff --git a/arch/arm/mach-pxa/palmtc.c b/arch/arm/mach-pxa/palmtc.c index f70f1f820eed..bb2cc0dd44ec 100644 --- a/arch/arm/mach-pxa/palmtc.c +++ b/arch/arm/mach-pxa/palmtc.c | |||
@@ -218,35 +218,9 @@ static struct platform_device palmtc_backlight = { | |||
218 | /****************************************************************************** | 218 | /****************************************************************************** |
219 | * IrDA | 219 | * IrDA |
220 | ******************************************************************************/ | 220 | ******************************************************************************/ |
221 | static int palmtc_irda_startup(struct device *dev) | ||
222 | { | ||
223 | int err; | ||
224 | err = gpio_request(GPIO_NR_PALMTC_IR_DISABLE, "IR DISABLE"); | ||
225 | if (err) | ||
226 | goto err; | ||
227 | err = gpio_direction_output(GPIO_NR_PALMTC_IR_DISABLE, 1); | ||
228 | if (err) | ||
229 | gpio_free(GPIO_NR_PALMTC_IR_DISABLE); | ||
230 | err: | ||
231 | return err; | ||
232 | } | ||
233 | |||
234 | static void palmtc_irda_shutdown(struct device *dev) | ||
235 | { | ||
236 | gpio_free(GPIO_NR_PALMTC_IR_DISABLE); | ||
237 | } | ||
238 | |||
239 | static void palmtc_irda_transceiver_mode(struct device *dev, int mode) | ||
240 | { | ||
241 | gpio_set_value(GPIO_NR_PALMTC_IR_DISABLE, mode & IR_OFF); | ||
242 | pxa2xx_transceiver_mode(dev, mode); | ||
243 | } | ||
244 | |||
245 | static struct pxaficp_platform_data palmtc_ficp_platform_data = { | 221 | static struct pxaficp_platform_data palmtc_ficp_platform_data = { |
246 | .startup = palmtc_irda_startup, | 222 | .gpio_pwdown = GPIO_NR_PALMTC_IR_DISABLE, |
247 | .shutdown = palmtc_irda_shutdown, | 223 | .transceiver_cap = IR_SIRMODE | IR_OFF, |
248 | .transceiver_cap = IR_SIRMODE | IR_FIRMODE | IR_OFF, | ||
249 | .transceiver_mode = palmtc_irda_transceiver_mode, | ||
250 | }; | 224 | }; |
251 | 225 | ||
252 | /****************************************************************************** | 226 | /****************************************************************************** |
diff --git a/arch/arm/mach-pxa/palmte2.c b/arch/arm/mach-pxa/palmte2.c index d9ef76c9278f..277c4062e3c6 100644 --- a/arch/arm/mach-pxa/palmte2.c +++ b/arch/arm/mach-pxa/palmte2.c | |||
@@ -215,35 +215,9 @@ static struct platform_device palmte2_backlight = { | |||
215 | /****************************************************************************** | 215 | /****************************************************************************** |
216 | * IrDA | 216 | * IrDA |
217 | ******************************************************************************/ | 217 | ******************************************************************************/ |
218 | static int palmte2_irda_startup(struct device *dev) | ||
219 | { | ||
220 | int err; | ||
221 | err = gpio_request(GPIO_NR_PALMTE2_IR_DISABLE, "IR DISABLE"); | ||
222 | if (err) | ||
223 | goto err; | ||
224 | err = gpio_direction_output(GPIO_NR_PALMTE2_IR_DISABLE, 1); | ||
225 | if (err) | ||
226 | gpio_free(GPIO_NR_PALMTE2_IR_DISABLE); | ||
227 | err: | ||
228 | return err; | ||
229 | } | ||
230 | |||
231 | static void palmte2_irda_shutdown(struct device *dev) | ||
232 | { | ||
233 | gpio_free(GPIO_NR_PALMTE2_IR_DISABLE); | ||
234 | } | ||
235 | |||
236 | static void palmte2_irda_transceiver_mode(struct device *dev, int mode) | ||
237 | { | ||
238 | gpio_set_value(GPIO_NR_PALMTE2_IR_DISABLE, mode & IR_OFF); | ||
239 | pxa2xx_transceiver_mode(dev, mode); | ||
240 | } | ||
241 | |||
242 | static struct pxaficp_platform_data palmte2_ficp_platform_data = { | 218 | static struct pxaficp_platform_data palmte2_ficp_platform_data = { |
243 | .startup = palmte2_irda_startup, | 219 | .gpio_pwdown = GPIO_NR_PALMTE2_IR_DISABLE, |
244 | .shutdown = palmte2_irda_shutdown, | 220 | .transceiver_cap = IR_SIRMODE | IR_OFF, |
245 | .transceiver_cap = IR_SIRMODE | IR_FIRMODE | IR_OFF, | ||
246 | .transceiver_mode = palmte2_irda_transceiver_mode, | ||
247 | }; | 221 | }; |
248 | 222 | ||
249 | /****************************************************************************** | 223 | /****************************************************************************** |
diff --git a/arch/arm/mach-pxa/palmtx.c b/arch/arm/mach-pxa/palmtx.c index c0aca18b71bb..76a2b37eaf30 100644 --- a/arch/arm/mach-pxa/palmtx.c +++ b/arch/arm/mach-pxa/palmtx.c | |||
@@ -303,35 +303,9 @@ static struct platform_device palmtx_backlight = { | |||
303 | /****************************************************************************** | 303 | /****************************************************************************** |
304 | * IrDA | 304 | * IrDA |
305 | ******************************************************************************/ | 305 | ******************************************************************************/ |
306 | static int palmtx_irda_startup(struct device *dev) | ||
307 | { | ||
308 | int err; | ||
309 | err = gpio_request(GPIO_NR_PALMTX_IR_DISABLE, "IR DISABLE"); | ||
310 | if (err) | ||
311 | goto err; | ||
312 | err = gpio_direction_output(GPIO_NR_PALMTX_IR_DISABLE, 1); | ||
313 | if (err) | ||
314 | gpio_free(GPIO_NR_PALMTX_IR_DISABLE); | ||
315 | err: | ||
316 | return err; | ||
317 | } | ||
318 | |||
319 | static void palmtx_irda_shutdown(struct device *dev) | ||
320 | { | ||
321 | gpio_free(GPIO_NR_PALMTX_IR_DISABLE); | ||
322 | } | ||
323 | |||
324 | static void palmtx_irda_transceiver_mode(struct device *dev, int mode) | ||
325 | { | ||
326 | gpio_set_value(GPIO_NR_PALMTX_IR_DISABLE, mode & IR_OFF); | ||
327 | pxa2xx_transceiver_mode(dev, mode); | ||
328 | } | ||
329 | |||
330 | static struct pxaficp_platform_data palmtx_ficp_platform_data = { | 306 | static struct pxaficp_platform_data palmtx_ficp_platform_data = { |
331 | .startup = palmtx_irda_startup, | 307 | .gpio_pwdown = GPIO_NR_PALMTX_IR_DISABLE, |
332 | .shutdown = palmtx_irda_shutdown, | 308 | .transceiver_cap = IR_SIRMODE | IR_OFF, |
333 | .transceiver_cap = IR_SIRMODE | IR_FIRMODE | IR_OFF, | ||
334 | .transceiver_mode = palmtx_irda_transceiver_mode, | ||
335 | }; | 309 | }; |
336 | 310 | ||
337 | /****************************************************************************** | 311 | /****************************************************************************** |
diff --git a/arch/arm/mach-pxa/palmz72.c b/arch/arm/mach-pxa/palmz72.c index d8fa53c19178..c2bf493c5f53 100644 --- a/arch/arm/mach-pxa/palmz72.c +++ b/arch/arm/mach-pxa/palmz72.c | |||
@@ -230,35 +230,9 @@ static struct platform_device palmz72_backlight = { | |||
230 | /****************************************************************************** | 230 | /****************************************************************************** |
231 | * IrDA | 231 | * IrDA |
232 | ******************************************************************************/ | 232 | ******************************************************************************/ |
233 | static int palmz72_irda_startup(struct device *dev) | ||
234 | { | ||
235 | int err; | ||
236 | err = gpio_request(GPIO_NR_PALMZ72_IR_DISABLE, "IR DISABLE"); | ||
237 | if (err) | ||
238 | goto err; | ||
239 | err = gpio_direction_output(GPIO_NR_PALMZ72_IR_DISABLE, 1); | ||
240 | if (err) | ||
241 | gpio_free(GPIO_NR_PALMZ72_IR_DISABLE); | ||
242 | err: | ||
243 | return err; | ||
244 | } | ||
245 | |||
246 | static void palmz72_irda_shutdown(struct device *dev) | ||
247 | { | ||
248 | gpio_free(GPIO_NR_PALMZ72_IR_DISABLE); | ||
249 | } | ||
250 | |||
251 | static void palmz72_irda_transceiver_mode(struct device *dev, int mode) | ||
252 | { | ||
253 | gpio_set_value(GPIO_NR_PALMZ72_IR_DISABLE, mode & IR_OFF); | ||
254 | pxa2xx_transceiver_mode(dev, mode); | ||
255 | } | ||
256 | |||
257 | static struct pxaficp_platform_data palmz72_ficp_platform_data = { | 233 | static struct pxaficp_platform_data palmz72_ficp_platform_data = { |
258 | .startup = palmz72_irda_startup, | 234 | .gpio_pwdown = GPIO_NR_PALMZ72_IR_DISABLE, |
259 | .shutdown = palmz72_irda_shutdown, | ||
260 | .transceiver_cap = IR_SIRMODE | IR_OFF, | 235 | .transceiver_cap = IR_SIRMODE | IR_OFF, |
261 | .transceiver_mode = palmz72_irda_transceiver_mode, | ||
262 | }; | 236 | }; |
263 | 237 | ||
264 | /****************************************************************************** | 238 | /****************************************************************************** |
diff --git a/arch/arm/mach-pxa/poodle.c b/arch/arm/mach-pxa/poodle.c index 333b1dc2dd3e..a186994f77fb 100644 --- a/arch/arm/mach-pxa/poodle.c +++ b/arch/arm/mach-pxa/poodle.c | |||
@@ -302,34 +302,9 @@ static struct pxamci_platform_data poodle_mci_platform_data = { | |||
302 | /* | 302 | /* |
303 | * Irda | 303 | * Irda |
304 | */ | 304 | */ |
305 | static void poodle_irda_transceiver_mode(struct device *dev, int mode) | ||
306 | { | ||
307 | gpio_set_value(POODLE_GPIO_IR_ON, mode & IR_OFF); | ||
308 | pxa2xx_transceiver_mode(dev, mode); | ||
309 | } | ||
310 | |||
311 | static int poodle_irda_startup(struct device *dev) | ||
312 | { | ||
313 | int err; | ||
314 | |||
315 | err = gpio_request(POODLE_GPIO_IR_ON, "IR_ON"); | ||
316 | if (err) | ||
317 | return err; | ||
318 | |||
319 | gpio_direction_output(POODLE_GPIO_IR_ON, 1); | ||
320 | return 0; | ||
321 | } | ||
322 | |||
323 | static void poodle_irda_shutdown(struct device *dev) | ||
324 | { | ||
325 | gpio_free(POODLE_GPIO_IR_ON); | ||
326 | } | ||
327 | |||
328 | static struct pxaficp_platform_data poodle_ficp_platform_data = { | 305 | static struct pxaficp_platform_data poodle_ficp_platform_data = { |
306 | .gpio_pwdown = POODLE_GPIO_IR_ON, | ||
329 | .transceiver_cap = IR_SIRMODE | IR_OFF, | 307 | .transceiver_cap = IR_SIRMODE | IR_OFF, |
330 | .transceiver_mode = poodle_irda_transceiver_mode, | ||
331 | .startup = poodle_irda_startup, | ||
332 | .shutdown = poodle_irda_shutdown, | ||
333 | }; | 308 | }; |
334 | 309 | ||
335 | 310 | ||
diff --git a/arch/arm/mach-pxa/pxa2xx.c b/arch/arm/mach-pxa/pxa2xx.c index 2f3394f85917..868270421b8c 100644 --- a/arch/arm/mach-pxa/pxa2xx.c +++ b/arch/arm/mach-pxa/pxa2xx.c | |||
@@ -52,3 +52,4 @@ void pxa2xx_transceiver_mode(struct device *dev, int mode) | |||
52 | } else | 52 | } else |
53 | BUG(); | 53 | BUG(); |
54 | } | 54 | } |
55 | EXPORT_SYMBOL_GPL(pxa2xx_transceiver_mode); | ||
diff --git a/arch/arm/mach-pxa/spitz.c b/arch/arm/mach-pxa/spitz.c index c4b8305b66a4..f9dc59c054b3 100644 --- a/arch/arm/mach-pxa/spitz.c +++ b/arch/arm/mach-pxa/spitz.c | |||
@@ -560,50 +560,10 @@ static struct pxaohci_platform_data spitz_ohci_platform_data = { | |||
560 | /* | 560 | /* |
561 | * Irda | 561 | * Irda |
562 | */ | 562 | */ |
563 | static int spitz_irda_startup(struct device *dev) | ||
564 | { | ||
565 | int rc; | ||
566 | |||
567 | rc = gpio_request(SPITZ_GPIO_IR_ON, "IrDA on"); | ||
568 | if (rc) | ||
569 | goto err; | ||
570 | |||
571 | rc = gpio_direction_output(SPITZ_GPIO_IR_ON, 1); | ||
572 | if (rc) | ||
573 | goto err_dir; | ||
574 | |||
575 | return 0; | ||
576 | |||
577 | err_dir: | ||
578 | gpio_free(SPITZ_GPIO_IR_ON); | ||
579 | err: | ||
580 | return rc; | ||
581 | } | ||
582 | |||
583 | static void spitz_irda_shutdown(struct device *dev) | ||
584 | { | ||
585 | gpio_free(SPITZ_GPIO_IR_ON); | ||
586 | } | ||
587 | |||
588 | static void spitz_irda_transceiver_mode(struct device *dev, int mode) | ||
589 | { | ||
590 | gpio_set_value(SPITZ_GPIO_IR_ON, mode & IR_OFF); | ||
591 | pxa2xx_transceiver_mode(dev, mode); | ||
592 | } | ||
593 | |||
594 | #ifdef CONFIG_MACH_AKITA | ||
595 | static void akita_irda_transceiver_mode(struct device *dev, int mode) | ||
596 | { | ||
597 | gpio_set_value(AKITA_GPIO_IR_ON, mode & IR_OFF); | ||
598 | pxa2xx_transceiver_mode(dev, mode); | ||
599 | } | ||
600 | #endif | ||
601 | 563 | ||
602 | static struct pxaficp_platform_data spitz_ficp_platform_data = { | 564 | static struct pxaficp_platform_data spitz_ficp_platform_data = { |
565 | /* .gpio_pwdown is set in spitz_init() and akita_init() accordingly */ | ||
603 | .transceiver_cap = IR_SIRMODE | IR_OFF, | 566 | .transceiver_cap = IR_SIRMODE | IR_OFF, |
604 | .transceiver_mode = spitz_irda_transceiver_mode, | ||
605 | .startup = spitz_irda_startup, | ||
606 | .shutdown = spitz_irda_shutdown, | ||
607 | }; | 567 | }; |
608 | 568 | ||
609 | 569 | ||
@@ -782,6 +742,8 @@ static void __init common_init(void) | |||
782 | #if defined(CONFIG_MACH_SPITZ) || defined(CONFIG_MACH_BORZOI) | 742 | #if defined(CONFIG_MACH_SPITZ) || defined(CONFIG_MACH_BORZOI) |
783 | static void __init spitz_init(void) | 743 | static void __init spitz_init(void) |
784 | { | 744 | { |
745 | spitz_ficp_platform_data.gpio_pwdown = SPITZ_GPIO_IR_ON; | ||
746 | |||
785 | platform_scoop_config = &spitz_pcmcia_config; | 747 | platform_scoop_config = &spitz_pcmcia_config; |
786 | 748 | ||
787 | common_init(); | 749 | common_init(); |
@@ -824,7 +786,7 @@ static struct nand_ecclayout akita_oobinfo = { | |||
824 | 786 | ||
825 | static void __init akita_init(void) | 787 | static void __init akita_init(void) |
826 | { | 788 | { |
827 | spitz_ficp_platform_data.transceiver_mode = akita_irda_transceiver_mode; | 789 | spitz_ficp_platform_data.gpio_pwdown = AKITA_GPIO_IR_ON; |
828 | 790 | ||
829 | sharpsl_nand_platform_data.badblock_pattern = &sharpsl_akita_bbt; | 791 | sharpsl_nand_platform_data.badblock_pattern = &sharpsl_akita_bbt; |
830 | sharpsl_nand_platform_data.ecc_layout = &akita_oobinfo; | 792 | sharpsl_nand_platform_data.ecc_layout = &akita_oobinfo; |
diff --git a/arch/arm/mach-pxa/tosa.c b/arch/arm/mach-pxa/tosa.c index b56cc5667bb4..e81a52673d49 100644 --- a/arch/arm/mach-pxa/tosa.c +++ b/arch/arm/mach-pxa/tosa.c | |||
@@ -337,10 +337,11 @@ static void tosa_irda_shutdown(struct device *dev) | |||
337 | } | 337 | } |
338 | 338 | ||
339 | static struct pxaficp_platform_data tosa_ficp_platform_data = { | 339 | static struct pxaficp_platform_data tosa_ficp_platform_data = { |
340 | .transceiver_cap = IR_SIRMODE | IR_OFF, | 340 | .gpio_pwdown = -1, |
341 | .transceiver_mode = tosa_irda_transceiver_mode, | 341 | .transceiver_cap = IR_SIRMODE | IR_OFF, |
342 | .startup = tosa_irda_startup, | 342 | .transceiver_mode = tosa_irda_transceiver_mode, |
343 | .shutdown = tosa_irda_shutdown, | 343 | .startup = tosa_irda_startup, |
344 | .shutdown = tosa_irda_shutdown, | ||
344 | }; | 345 | }; |
345 | 346 | ||
346 | /* | 347 | /* |
diff --git a/arch/arm/mach-pxa/treo680.c b/arch/arm/mach-pxa/treo680.c index 9a2df64c6599..fe085076fbf2 100644 --- a/arch/arm/mach-pxa/treo680.c +++ b/arch/arm/mach-pxa/treo680.c | |||
@@ -295,44 +295,9 @@ static struct platform_device treo680_backlight = { | |||
295 | /****************************************************************************** | 295 | /****************************************************************************** |
296 | * IrDA | 296 | * IrDA |
297 | ******************************************************************************/ | 297 | ******************************************************************************/ |
298 | static void treo680_transceiver_mode(struct device *dev, int mode) | ||
299 | { | ||
300 | gpio_set_value(GPIO_NR_TREO680_IR_EN, mode & IR_OFF); | ||
301 | pxa2xx_transceiver_mode(dev, mode); | ||
302 | } | ||
303 | |||
304 | static int treo680_irda_startup(struct device *dev) | ||
305 | { | ||
306 | int err; | ||
307 | |||
308 | err = gpio_request(GPIO_NR_TREO680_IR_EN, "Ir port disable"); | ||
309 | if (err) | ||
310 | goto err1; | ||
311 | |||
312 | err = gpio_direction_output(GPIO_NR_TREO680_IR_EN, 1); | ||
313 | if (err) | ||
314 | goto err2; | ||
315 | |||
316 | return 0; | ||
317 | |||
318 | err2: | ||
319 | dev_err(dev, "treo680_irda: cannot change IR gpio direction\n"); | ||
320 | gpio_free(GPIO_NR_TREO680_IR_EN); | ||
321 | err1: | ||
322 | dev_err(dev, "treo680_irda: cannot allocate IR gpio\n"); | ||
323 | return err; | ||
324 | } | ||
325 | |||
326 | static void treo680_irda_shutdown(struct device *dev) | ||
327 | { | ||
328 | gpio_free(GPIO_NR_TREO680_IR_EN); | ||
329 | } | ||
330 | |||
331 | static struct pxaficp_platform_data treo680_ficp_info = { | 298 | static struct pxaficp_platform_data treo680_ficp_info = { |
332 | .transceiver_cap = IR_FIRMODE | IR_SIRMODE | IR_OFF, | 299 | .gpio_pwdown = GPIO_NR_TREO680_IR_EN, |
333 | .startup = treo680_irda_startup, | 300 | .transceiver_cap = IR_SIRMODE | IR_OFF, |
334 | .shutdown = treo680_irda_shutdown, | ||
335 | .transceiver_mode = treo680_transceiver_mode, | ||
336 | }; | 301 | }; |
337 | 302 | ||
338 | /****************************************************************************** | 303 | /****************************************************************************** |
diff --git a/arch/arm/mach-pxa/trizeps4.c b/arch/arm/mach-pxa/trizeps4.c index 32299869b352..3981e0356d12 100644 --- a/arch/arm/mach-pxa/trizeps4.c +++ b/arch/arm/mach-pxa/trizeps4.c | |||
@@ -415,6 +415,7 @@ static void trizeps4_irda_transceiver_mode(struct device *dev, int mode) | |||
415 | } | 415 | } |
416 | 416 | ||
417 | static struct pxaficp_platform_data trizeps4_ficp_platform_data = { | 417 | static struct pxaficp_platform_data trizeps4_ficp_platform_data = { |
418 | .gpio_pwdown = -1, | ||
418 | .transceiver_cap = IR_SIRMODE | IR_FIRMODE | IR_OFF, | 419 | .transceiver_cap = IR_SIRMODE | IR_FIRMODE | IR_OFF, |
419 | .transceiver_mode = trizeps4_irda_transceiver_mode, | 420 | .transceiver_mode = trizeps4_irda_transceiver_mode, |
420 | .startup = trizeps4_irda_startup, | 421 | .startup = trizeps4_irda_startup, |
diff --git a/drivers/net/irda/pxaficp_ir.c b/drivers/net/irda/pxaficp_ir.c index 77d10edefd25..f5b7d8320787 100644 --- a/drivers/net/irda/pxaficp_ir.c +++ b/drivers/net/irda/pxaficp_ir.c | |||
@@ -17,6 +17,7 @@ | |||
17 | #include <linux/etherdevice.h> | 17 | #include <linux/etherdevice.h> |
18 | #include <linux/platform_device.h> | 18 | #include <linux/platform_device.h> |
19 | #include <linux/clk.h> | 19 | #include <linux/clk.h> |
20 | #include <linux/gpio.h> | ||
20 | 21 | ||
21 | #include <net/irda/irda.h> | 22 | #include <net/irda/irda.h> |
22 | #include <net/irda/irmod.h> | 23 | #include <net/irda/irmod.h> |
@@ -163,6 +164,22 @@ inline static void pxa_irda_fir_dma_tx_start(struct pxa_irda *si) | |||
163 | } | 164 | } |
164 | 165 | ||
165 | /* | 166 | /* |
167 | * Set the IrDA communications mode. | ||
168 | */ | ||
169 | static void pxa_irda_set_mode(struct pxa_irda *si, int mode) | ||
170 | { | ||
171 | if (si->pdata->transceiver_mode) | ||
172 | si->pdata->transceiver_mode(si->dev, mode); | ||
173 | else { | ||
174 | if (gpio_is_valid(si->pdata->gpio_pwdown)) | ||
175 | gpio_set_value(si->pdata->gpio_pwdown, | ||
176 | !(mode & IR_OFF) ^ | ||
177 | !si->pdata->gpio_pwdown_inverted); | ||
178 | pxa2xx_transceiver_mode(si->dev, mode); | ||
179 | } | ||
180 | } | ||
181 | |||
182 | /* | ||
166 | * Set the IrDA communications speed. | 183 | * Set the IrDA communications speed. |
167 | */ | 184 | */ |
168 | static int pxa_irda_set_speed(struct pxa_irda *si, int speed) | 185 | static int pxa_irda_set_speed(struct pxa_irda *si, int speed) |
@@ -188,7 +205,7 @@ static int pxa_irda_set_speed(struct pxa_irda *si, int speed) | |||
188 | pxa_irda_disable_clk(si); | 205 | pxa_irda_disable_clk(si); |
189 | 206 | ||
190 | /* set board transceiver to SIR mode */ | 207 | /* set board transceiver to SIR mode */ |
191 | si->pdata->transceiver_mode(si->dev, IR_SIRMODE); | 208 | pxa_irda_set_mode(si, IR_SIRMODE); |
192 | 209 | ||
193 | /* enable the STUART clock */ | 210 | /* enable the STUART clock */ |
194 | pxa_irda_enable_sirclk(si); | 211 | pxa_irda_enable_sirclk(si); |
@@ -222,7 +239,7 @@ static int pxa_irda_set_speed(struct pxa_irda *si, int speed) | |||
222 | ICCR0 = 0; | 239 | ICCR0 = 0; |
223 | 240 | ||
224 | /* set board transceiver to FIR mode */ | 241 | /* set board transceiver to FIR mode */ |
225 | si->pdata->transceiver_mode(si->dev, IR_FIRMODE); | 242 | pxa_irda_set_mode(si, IR_FIRMODE); |
226 | 243 | ||
227 | /* enable the FICP clock */ | 244 | /* enable the FICP clock */ |
228 | pxa_irda_enable_firclk(si); | 245 | pxa_irda_enable_firclk(si); |
@@ -641,7 +658,7 @@ static void pxa_irda_shutdown(struct pxa_irda *si) | |||
641 | local_irq_restore(flags); | 658 | local_irq_restore(flags); |
642 | 659 | ||
643 | /* power off board transceiver */ | 660 | /* power off board transceiver */ |
644 | si->pdata->transceiver_mode(si->dev, IR_OFF); | 661 | pxa_irda_set_mode(si, IR_OFF); |
645 | 662 | ||
646 | printk(KERN_DEBUG "pxa_ir: irda shutdown\n"); | 663 | printk(KERN_DEBUG "pxa_ir: irda shutdown\n"); |
647 | } | 664 | } |
@@ -849,10 +866,26 @@ static int pxa_irda_probe(struct platform_device *pdev) | |||
849 | if (err) | 866 | if (err) |
850 | goto err_mem_5; | 867 | goto err_mem_5; |
851 | 868 | ||
852 | if (si->pdata->startup) | 869 | if (gpio_is_valid(si->pdata->gpio_pwdown)) { |
870 | err = gpio_request(si->pdata->gpio_pwdown, "IrDA switch"); | ||
871 | if (err) | ||
872 | goto err_startup; | ||
873 | err = gpio_direction_output(si->pdata->gpio_pwdown, | ||
874 | !si->pdata->gpio_pwdown_inverted); | ||
875 | if (err) { | ||
876 | gpio_free(si->pdata->gpio_pwdown); | ||
877 | goto err_startup; | ||
878 | } | ||
879 | } | ||
880 | |||
881 | if (si->pdata->startup) { | ||
853 | err = si->pdata->startup(si->dev); | 882 | err = si->pdata->startup(si->dev); |
854 | if (err) | 883 | if (err) |
855 | goto err_startup; | 884 | goto err_startup; |
885 | } | ||
886 | |||
887 | if (gpio_is_valid(si->pdata->gpio_pwdown) && si->pdata->startup) | ||
888 | dev_warn(si->dev, "gpio_pwdown and startup() both defined!\n"); | ||
856 | 889 | ||
857 | dev->netdev_ops = &pxa_irda_netdev_ops; | 890 | dev->netdev_ops = &pxa_irda_netdev_ops; |
858 | 891 | ||
@@ -903,6 +936,8 @@ static int pxa_irda_remove(struct platform_device *_dev) | |||
903 | if (dev) { | 936 | if (dev) { |
904 | struct pxa_irda *si = netdev_priv(dev); | 937 | struct pxa_irda *si = netdev_priv(dev); |
905 | unregister_netdev(dev); | 938 | unregister_netdev(dev); |
939 | if (gpio_is_valid(si->pdata->gpio_pwdown)) | ||
940 | gpio_free(si->pdata->gpio_pwdown); | ||
906 | if (si->pdata->shutdown) | 941 | if (si->pdata->shutdown) |
907 | si->pdata->shutdown(si->dev); | 942 | si->pdata->shutdown(si->dev); |
908 | kfree(si->tx_buff.head); | 943 | kfree(si->tx_buff.head); |