aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input
diff options
context:
space:
mode:
authorOlaf Hering <olaf@aepfle.de>2006-10-01 02:27:57 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-10-01 03:39:23 -0400
commit30cbc22217bb3d5d4c74c88127fbf595460bdb76 (patch)
treeeab298c63f4dcf4ecd35f753da2e5ccf394a7718 /drivers/input
parentc69c31270c35a6b8421a8e4ba81de1247ac6df95 (diff)
[PATCH] update legacy io handling for pmac
ppc can boot one single binary on prep, chrp and pmac boards. ppc64 can boot one single binary on pseries and G5 boards. pmac has no legacy io, probing for PC style legacy hardware (or accessing the legacy io area regulary) may lead to a hard crash: * add check for parport_pc, exit on pmac. 32bit chrp has no ->check_legacy_ioport, the probe is always called. 64bit chrp has check_legacy_ioport, check for a "parallel" node * add check for isapnp, only PReP boards may have real ISA slots. 32bit PReP will have no ->check_legacy_ioport, the probe is always called. * update code in i8042_platform_init. Run ->check_legacy_ioport first, always call request_region. No functional change. Remove whitespace before i8042_reset init. Signed-off-by: Olaf Hering <olaf@aepfle.de> Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Adam Belay <ambx1@neo.rr.com> Cc: Dmitry Torokhov <dtor@mail.ru> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/input')
-rw-r--r--drivers/input/serio/i8042-io.h15
1 files changed, 6 insertions, 9 deletions
diff --git a/drivers/input/serio/i8042-io.h b/drivers/input/serio/i8042-io.h
index cc21914fbc72..3b4e13b9ce1b 100644
--- a/drivers/input/serio/i8042-io.h
+++ b/drivers/input/serio/i8042-io.h
@@ -67,25 +67,22 @@ static inline int i8042_platform_init(void)
67 * On some platforms touching the i8042 data register region can do really 67 * On some platforms touching the i8042 data register region can do really
68 * bad things. Because of this the region is always reserved on such boxes. 68 * bad things. Because of this the region is always reserved on such boxes.
69 */ 69 */
70#if !defined(__sh__) && !defined(__alpha__) && !defined(__mips__) && !defined(CONFIG_PPC_MERGE)
71 if (!request_region(I8042_DATA_REG, 16, "i8042"))
72 return -EBUSY;
73#endif
74
75 i8042_reset = 1;
76
77#if defined(CONFIG_PPC_MERGE) 70#if defined(CONFIG_PPC_MERGE)
78 if (check_legacy_ioport(I8042_DATA_REG)) 71 if (check_legacy_ioport(I8042_DATA_REG))
79 return -EBUSY; 72 return -ENODEV;
73#endif
74#if !defined(__sh__) && !defined(__alpha__) && !defined(__mips__)
80 if (!request_region(I8042_DATA_REG, 16, "i8042")) 75 if (!request_region(I8042_DATA_REG, 16, "i8042"))
81 return -EBUSY; 76 return -EBUSY;
82#endif 77#endif
78
79 i8042_reset = 1;
83 return 0; 80 return 0;
84} 81}
85 82
86static inline void i8042_platform_exit(void) 83static inline void i8042_platform_exit(void)
87{ 84{
88#if !defined(__sh__) && !defined(__alpha__) && !defined(CONFIG_PPC64) 85#if !defined(__sh__) && !defined(__alpha__)
89 release_region(I8042_DATA_REG, 16); 86 release_region(I8042_DATA_REG, 16);
90#endif 87#endif
91} 88}