aboutsummaryrefslogtreecommitdiffstats
path: root/recipes/linux/devkitidp-pxa255-2.6.19/linux-2.6.19_devkitidp1.patch
blob: 783ecaef432db32bd721366dcbe2b27f62911737 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
Index: linux-2.6.19/arch/arm/configs/pxa255-idp_defconfig
===================================================================
--- linux-2.6.19.orig/arch/arm/configs/pxa255-idp_defconfig
+++ linux-2.6.19/arch/arm/configs/pxa255-idp_defconfig
@@ -1,14 +1,13 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc1-bk2
-# Sun Mar 27 22:20:17 2005
+# Linux kernel version: 2.6.13
+# Fri Sep  2 11:36:29 2005
 #
 CONFIG_ARM=y
 CONFIG_MMU=y
 CONFIG_UID16=y
 CONFIG_RWSEM_GENERIC_SPINLOCK=y
 CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_GENERIC_IOMAP=y
 
 #
 # Code maturity level options
@@ -16,6 +15,7 @@ CONFIG_GENERIC_IOMAP=y
 CONFIG_EXPERIMENTAL=y
 CONFIG_CLEAN_COMPILE=y
 CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
 
 #
 # General setup
@@ -34,6 +34,8 @@ CONFIG_KOBJECT_UEVENT=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_ALL is not set
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
 CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
@@ -50,11 +52,12 @@ CONFIG_BASE_SMALL=0
 # Loadable module support
 #
 CONFIG_MODULES=y
-# CONFIG_MODULE_UNLOAD is not set
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
 CONFIG_OBSOLETE_MODPARM=y
 # CONFIG_MODVERSIONS is not set
 # CONFIG_MODULE_SRCVERSION_ALL is not set
-# CONFIG_KMOD is not set
+CONFIG_KMOD=y
 
 #
 # System Type
@@ -79,6 +82,7 @@ CONFIG_ARCH_PXA=y
 # CONFIG_ARCH_VERSATILE is not set
 # CONFIG_ARCH_IMX is not set
 # CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_AAEC2000 is not set
 
 #
 # Intel PXA2xx Implementations
@@ -98,7 +102,6 @@ CONFIG_CPU_32v5=y
 CONFIG_CPU_ABRT_EV5T=y
 CONFIG_CPU_CACHE_VIVT=y
 CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_MINICACHE=y
 
 #
 # Processor Features
@@ -109,16 +112,35 @@ CONFIG_XSCALE_PMU=y
 #
 # Bus support
 #
+CONFIG_ISA_DMA_API=y
 
 #
 # PCCARD (PCMCIA/CardBus) support
 #
-# CONFIG_PCCARD is not set
+CONFIG_PCCARD=y
+CONFIG_PCMCIA_DEBUG=y
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+# CONFIG_TCIC is not set
+CONFIG_PCMCIA_PXA2XX=y
 
 #
 # Kernel Features
 #
 # CONFIG_PREEMPT is not set
+# CONFIG_NO_IDLE_HZ is not set
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
 CONFIG_LEDS=y
 CONFIG_LEDS_TIMER=y
 CONFIG_LEDS_CPU=y
@@ -129,7 +151,7 @@ CONFIG_ALIGNMENT_TRAP=y
 #
 CONFIG_ZBOOT_ROM_TEXT=0x0
 CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="root=/dev/nfs ip=dhcp console=ttyS0,115200 mem=64M"
+CONFIG_CMDLINE="root=/dev/mtdblock2 rootfstype=jffs2 console=ttyS0,115200 mtdparts=phys_mapped_flash:256k(boot)ro,0x1C0000(kernel),-(root)"
 # CONFIG_XIP_KERNEL is not set
 
 #
@@ -157,6 +179,67 @@ CONFIG_BINFMT_ELF=y
 # CONFIG_PM is not set
 
 #
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_PACKET is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_IP_TCPDIAG=y
+# CONFIG_IP_TCPDIAG_IPV6 is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+# CONFIG_IPV6 is not set
+# CONFIG_NETFILTER is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+# CONFIG_NET_CLS_ROUTE is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+
+#
 # Device Drivers
 #
 
@@ -165,7 +248,7 @@ CONFIG_BINFMT_ELF=y
 #
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
-# CONFIG_FW_LOADER is not set
+CONFIG_FW_LOADER=y
 # CONFIG_DEBUG_DRIVER is not set
 
 #
@@ -176,7 +259,7 @@ CONFIG_MTD=y
 # CONFIG_MTD_CONCAT is not set
 CONFIG_MTD_PARTITIONS=y
 # CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
 # CONFIG_MTD_AFS_PARTS is not set
 
 #
@@ -209,6 +292,7 @@ CONFIG_MTD_MAP_BANK_WIDTH_4=y
 CONFIG_MTD_CFI_I2=y
 # CONFIG_MTD_CFI_I4 is not set
 # CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
 CONFIG_MTD_CFI_INTELEXT=y
 # CONFIG_MTD_CFI_AMDSTD is not set
 # CONFIG_MTD_CFI_STAA is not set
@@ -222,10 +306,14 @@ CONFIG_MTD_CFI_UTIL=y
 # Mapping drivers for chip access
 #
 # CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x0000000
+CONFIG_MTD_PHYSMAP_LEN=0x4000000
+CONFIG_MTD_PHYSMAP_BANKWIDTH=4
 # CONFIG_MTD_ARM_INTEGRATOR is not set
 # CONFIG_MTD_EDB7312 is not set
 # CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
 
 #
 # Self-contained MTD device drivers
@@ -260,10 +348,10 @@ CONFIG_MTD_CFI_UTIL=y
 #
 # Block devices
 #
-# CONFIG_BLK_DEV_FD is not set
 # CONFIG_BLK_DEV_COW_COMMON is not set
 # CONFIG_BLK_DEV_LOOP is not set
 # CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
 # CONFIG_BLK_DEV_RAM is not set
 CONFIG_BLK_DEV_RAM_COUNT=16
 CONFIG_INITRAMFS_SOURCE=""
@@ -290,9 +378,11 @@ CONFIG_BLK_DEV_IDE=y
 # CONFIG_BLK_DEV_IDE_SATA is not set
 CONFIG_BLK_DEV_IDEDISK=y
 # CONFIG_IDEDISK_MULTI_MODE is not set
+# CONFIG_BLK_DEV_IDECS is not set
 # CONFIG_BLK_DEV_IDECD is not set
 # CONFIG_BLK_DEV_IDETAPE is not set
 # CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
 # CONFIG_IDE_TASK_IOCTL is not set
 
 #
@@ -307,89 +397,69 @@ CONFIG_BLK_DEV_IDEDISK=y
 #
 # SCSI device support
 #
-# CONFIG_SCSI is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_PROC_FS=y
 
 #
-# Multi-device support (RAID and LVM)
+# SCSI support type (disk, tape, CD-ROM)
 #
-# CONFIG_MD is not set
+# CONFIG_BLK_DEV_SD is not set
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
 
 #
-# Fusion MPT device support
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
 #
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
 
 #
-# IEEE 1394 (FireWire) support
+# SCSI Transport Attributes
 #
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
 
 #
-# I2O device support
+# SCSI low-level drivers
 #
+# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_DEBUG is not set
 
 #
-# Networking support
+# PCMCIA SCSI adapter support
 #
-CONFIG_NET=y
+# CONFIG_PCMCIA_AHA152X is not set
+# CONFIG_PCMCIA_FDOMAIN is not set
+# CONFIG_PCMCIA_NINJA_SCSI is not set
+# CONFIG_PCMCIA_QLOGIC is not set
+# CONFIG_PCMCIA_SYM53C500 is not set
 
 #
-# Networking options
+# Multi-device support (RAID and LVM)
 #
-# CONFIG_PACKET is not set
-# CONFIG_NETLINK_DEV is not set
-CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_IP_TCPDIAG=y
-# CONFIG_IP_TCPDIAG_IPV6 is not set
-# CONFIG_IPV6 is not set
-# CONFIG_NETFILTER is not set
+# CONFIG_MD is not set
 
 #
-# SCTP Configuration (EXPERIMENTAL)
+# Fusion MPT device support
 #
-# CONFIG_IP_SCTP is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
+# CONFIG_FUSION is not set
 
 #
-# QoS and/or fair queueing
+# IEEE 1394 (FireWire) support
 #
-# CONFIG_NET_SCHED is not set
-# CONFIG_NET_CLS_ROUTE is not set
 
 #
-# Network testing
+# I2O device support
+#
+
+#
+# Network device support
 #
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
@@ -402,6 +472,7 @@ CONFIG_NETDEVICES=y
 CONFIG_NET_ETHERNET=y
 CONFIG_MII=y
 CONFIG_SMC91X=y
+# CONFIG_DM9000 is not set
 
 #
 # Ethernet (1000 Mbit)
@@ -421,6 +492,11 @@ CONFIG_SMC91X=y
 # CONFIG_NET_RADIO is not set
 
 #
+# PCMCIA network device support
+#
+# CONFIG_NET_PCMCIA is not set
+
+#
 # Wan interfaces
 #
 # CONFIG_WAN is not set
@@ -428,6 +504,8 @@ CONFIG_SMC91X=y
 # CONFIG_SLIP is not set
 # CONFIG_SHAPER is not set
 # CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
 
 #
 # ISDN subsystem
@@ -443,7 +521,7 @@ CONFIG_INPUT=y
 # Userland interfaces
 #
 CONFIG_INPUT_MOUSEDEV=y
-CONFIG_INPUT_MOUSEDEV_PSAUX=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
 CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
 # CONFIG_INPUT_JOYDEV is not set
@@ -455,11 +533,12 @@ CONFIG_INPUT_EVDEV=y
 # Input Device Drivers
 #
 CONFIG_INPUT_KEYBOARD=y
-CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_ATKBD is not set
 # CONFIG_KEYBOARD_SUNKBD is not set
 # CONFIG_KEYBOARD_LKKBD is not set
 # CONFIG_KEYBOARD_XTKBD is not set
 # CONFIG_KEYBOARD_NEWTON is not set
+CONFIG_KEYBOARD_IDPKBD=y
 # CONFIG_INPUT_MOUSE is not set
 # CONFIG_INPUT_JOYSTICK is not set
 # CONFIG_INPUT_TOUCHSCREEN is not set
@@ -470,10 +549,8 @@ CONFIG_KEYBOARD_ATKBD=y
 #
 CONFIG_SERIO=y
 # CONFIG_SERIO_SERPORT is not set
-CONFIG_SERIO_LIBPS2=y
 # CONFIG_SERIO_RAW is not set
 # CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
 
 #
 # Character devices
@@ -516,18 +593,28 @@ CONFIG_LEGACY_PTY_COUNT=256
 #
 # Ftape, the floppy tape device driver
 #
-# CONFIG_DRM is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
 # CONFIG_RAW_DRIVER is not set
 
 #
 # TPM devices
 #
-# CONFIG_TCG_TPM is not set
 
 #
 # I2C support
 #
 # CONFIG_I2C is not set
+# CONFIG_I2C_SENSOR is not set
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_DEBUG_CHIP is not set
 
 #
 # Misc devices
@@ -551,10 +638,12 @@ CONFIG_FB_CFB_FILLRECT=y
 CONFIG_FB_CFB_COPYAREA=y
 CONFIG_FB_CFB_IMAGEBLIT=y
 CONFIG_FB_SOFT_CURSOR=y
+# CONFIG_FB_MACMODES is not set
 # CONFIG_FB_MODE_HELPERS is not set
 # CONFIG_FB_TILEBLITTING is not set
 CONFIG_FB_PXA=y
 # CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_S1D13XXX is not set
 # CONFIG_FB_VIRTUAL is not set
 
 #
@@ -563,15 +652,9 @@ CONFIG_FB_PXA=y
 # CONFIG_VGA_CONSOLE is not set
 CONFIG_DUMMY_CONSOLE=y
 CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FONTS=y
+# CONFIG_FONTS is not set
 CONFIG_FONT_8x8=y
 CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
 
 #
 # Logo configuration
@@ -592,7 +675,116 @@ CONFIG_LOGO_LINUX_CLUT224=y
 #
 CONFIG_USB_ARCH_HAS_HCD=y
 # CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB is not set
+CONFIG_USB=y
+CONFIG_USB_DEBUG=y
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+CONFIG_USB_BANDWIDTH=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_BLUETOOTH_TTY is not set
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+CONFIG_USB_HIDINPUT=y
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_MTOUCH is not set
+# CONFIG_USB_ITMTOUCH is not set
+# CONFIG_USB_EGALAX is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Multimedia devices
+#
+# CONFIG_USB_DABUSB is not set
+
+#
+# Video4Linux support is needed for USB Multimedia device support
+#
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGETKIT is not set
+# CONFIG_USB_PHIDGETSERVO is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_LD is not set
+
+#
+# USB DSL modem support
+#
 
 #
 # USB Gadget Support
@@ -602,17 +794,23 @@ CONFIG_USB_ARCH_HAS_HCD=y
 #
 # MMC/SD Card support
 #
-# CONFIG_MMC is not set
+CONFIG_MMC=y
+CONFIG_MMC_DEBUG=y
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_PXA=y
+# CONFIG_MMC_WBSD is not set
 
 #
 # File systems
 #
 CONFIG_EXT2_FS=y
 # CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
 # CONFIG_EXT3_FS is not set
 # CONFIG_JBD is not set
 # CONFIG_REISERFS_FS is not set
 # CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
 
 #
 # XFS support
@@ -620,6 +818,7 @@ CONFIG_EXT2_FS=y
 # CONFIG_XFS_FS is not set
 # CONFIG_MINIX_FS is not set
 # CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
 # CONFIG_QUOTA is not set
 CONFIG_DNOTIFY=y
 # CONFIG_AUTOFS_FS is not set
@@ -636,8 +835,9 @@ CONFIG_DNOTIFY=y
 #
 CONFIG_FAT_FS=y
 CONFIG_MSDOS_FS=y
-# CONFIG_VFAT_FS is not set
+CONFIG_VFAT_FS=y
 CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
 # CONFIG_NTFS_FS is not set
 
 #
@@ -645,7 +845,6 @@ CONFIG_FAT_DEFAULT_CODEPAGE=437
 #
 CONFIG_PROC_FS=y
 CONFIG_SYSFS=y
-# CONFIG_DEVFS_FS is not set
 # CONFIG_DEVPTS_FS_XATTR is not set
 # CONFIG_TMPFS is not set
 # CONFIG_HUGETLB_PAGE is not set
@@ -664,8 +863,7 @@ CONFIG_RAMFS=y
 # CONFIG_JFFS_FS is not set
 CONFIG_JFFS2_FS=y
 CONFIG_JFFS2_FS_DEBUG=0
-# CONFIG_JFFS2_FS_NAND is not set
-# CONFIG_JFFS2_FS_NOR_ECC is not set
+CONFIG_JFFS2_FS_WRITEBUFFER=y
 # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
 CONFIG_JFFS2_ZLIB=y
 CONFIG_JFFS2_RTIME=y
@@ -687,6 +885,7 @@ CONFIG_NFS_FS=y
 # CONFIG_NFSD is not set
 CONFIG_ROOT_NFS=y
 CONFIG_LOCKD=y
+CONFIG_NFS_COMMON=y
 CONFIG_SUNRPC=y
 # CONFIG_RPCSEC_GSS_KRB5 is not set
 # CONFIG_RPCSEC_GSS_SPKM3 is not set
Index: linux-2.6.19/arch/arm/mach-pxa/Kconfig
===================================================================
--- linux-2.6.19.orig/arch/arm/mach-pxa/Kconfig
+++ linux-2.6.19/arch/arm/mach-pxa/Kconfig
@@ -21,7 +21,7 @@ config MACH_MAINSTONE
 	select IWMMXT
 
 config ARCH_PXA_IDP
-	bool "Accelent Xscale IDP"
+	bool "DevKitIDP PXA255"
 	select PXA25x
 
 config PXA_SHARPSL
Index: linux-2.6.19/drivers/input/keyboard/idpkbd.c
===================================================================
--- /dev/null
+++ linux-2.6.19/drivers/input/keyboard/idpkbd.c
@@ -0,0 +1,418 @@
+/*
+ * DevKitIDP PXA255 matrix keyboard driver
+ * Copyright (C) 2005 BSQUARE
+ * David Plentovich <davidp@bsquare.com>
+ *
+ * Based on (2.4.x) driver/char/asi_keyboard.c - Cliff Brake
+ */
+
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include <linux/stddef.h>
+
+#include <linux/input.h>
+#include <linux/module.h>
+#include <linux/init.h>
+
+#include <linux/timer.h>
+#include <linux/sched.h>
+#include <linux/delay.h>
+
+#include <linux/types.h>
+#include <linux/keyboard.h>
+#include <linux/kd.h>
+
+#include <asm/irq.h>
+#include <asm/io.h>
+
+//#include <asm/hardware.h>
+#include <asm/arch/pxa-regs.h>
+#include <asm/arch/idp.h>
+
+MODULE_AUTHOR("David Plentovich <davidp@bsquare.com>");
+MODULE_DESCRIPTION("DevKitIDP PXA255 matrix keyboard driver");
+MODULE_LICENSE("GPL");
+
+
+//NOTE: Platform HW specific settings are defined in include/asm-arm/arch-pxa/idp.h
+
+
+// set to true to use timers to poll keyboard
+#define POLL_KEYBOARD	1
+
+
+// local variables
+
+#define FN_KEY_SCANCODE			4		//scancode returned when Fn key pressed
+#define NUMLOCK_KEY_SCANCODE	10		//scancode returned when NumLock key pressed
+
+// keyboard matrix 14 columns by 7 rows
+static unsigned char idpkbd_keycode[(KEYBD_MATRIX_NUMBER_OUTPUTS * KEYBD_MATRIX_NUMBER_INPUTS)] = { \
+ KEY_LEFTALT, KEY_GRAVE, 0, KEY_LEFTCTRL, 0, KEY_ESC, KEY_1, KEY_2, KEY_9, KEY_0, KEY_MINUS, KEY_EQUAL, 0, KEY_BACKSPACE, \
+ 0, KEY_BACKSLASH, KEY_LEFTSHIFT, 0, 0, KEY_DELETE, 0, KEY_T, KEY_Y, KEY_U, KEY_I, KEY_ENTER, KEY_RIGHTSHIFT, KEY_DOWN, \
+ 0, KEY_TAB, 0, 0, 0, KEY_Q, KEY_W, KEY_E, KEY_R, KEY_O, KEY_P, KEY_LEFTBRACE, 0, KEY_RIGHTBRACE, \
+ 0, KEY_Z, 0, 0, 0, KEY_CAPSLOCK, 0, 0, KEY_K, KEY_L, KEY_SEMICOLON, KEY_APOSTROPHE, 0, KEY_UP, \
+ 0, KEY_A, 0, 0, 0, KEY_S, KEY_D, KEY_F, KEY_G, KEY_H, KEY_J, KEY_SLASH, 0, KEY_LEFT, \
+ 0, KEY_X, 0, 0, 0, KEY_C, KEY_V, KEY_B, KEY_N, KEY_M, KEY_COMMA, KEY_DOT, 0, KEY_SPACE, \
+ 0, 0, 0, 0, 0, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, 0, 0, KEY_RIGHT \
+};
+
+// function key keyboard matrix 14 columns by 7 rows
+//TODO: change Fn key for +/= to be shifted version of KEY_PAUSE (instead of KEY_BACK)
+static unsigned char idpkbd_fn_keycode[(KEYBD_MATRIX_NUMBER_OUTPUTS * KEYBD_MATRIX_NUMBER_INPUTS)] = { \
+ 0, 0, 0, 0, 0, 0, KEY_F1, KEY_F2, KEY_F9, KEY_F10, 0, KEY_BACK, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, KEY_PAGEDOWN, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, KEY_PAUSE, 0, KEY_SCROLLLOCK, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, KEY_PRINT, KEY_SYSRQ, 0, KEY_PAGEUP, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, KEY_HOME, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, KEY_F3, KEY_F4, KEY_F5, KEY_F6, KEY_F7, KEY_F8, 0, 0, KEY_END \
+};
+
+//NOTE: NUMLOCK and NumKeypad are not supported; keys are already accessable in other ways.
+
+int idpkbd_used = 0;
+int fn_key_active = 0;
+
+static struct input_dev * idpkbd_dev;
+
+static int scaninterval = HZ/60;	//rate to scan keyboard 
+static struct timer_list scan_timer;
+
+
+// Note: these are not hardware dependent masks, they are
+// just simple n-bit masks based on the number of ins and outs
+// All hardware dependent matrix keyboard stuff is in portable.h
+#define KEYBD_MATRIX_INPUT_MASK		((1 << KEYBD_MATRIX_NUMBER_INPUTS)-1)
+#define KEYBD_MATRIX_OUTPUT_MASK	((1 << KEYBD_MATRIX_NUMBER_OUTPUTS)-1)
+
+static __u16 keystate_prev[KEYBD_MATRIX_NUMBER_OUTPUTS];
+static __u16 keystate_test[KEYBD_MATRIX_NUMBER_OUTPUTS];
+static __u16 keystate_cur [KEYBD_MATRIX_NUMBER_OUTPUTS];
+static int keystate_prev_active = 0;	//FALSE;
+static int keystate_stable_ctr = 0;
+
+
+
+/* local function definitions */
+static void setoutput(__u16 columns)
+{
+	#ifdef KEYBD_MATRIX_INVERT_OUTPUT_LOGIC
+		KEYBD_MATRIX_SET_OUTPUTS(~columns);
+	#else
+		KEYBD_MATRIX_SET_OUTPUTS(columns);
+	#endif
+}
+
+static __u16 scaninput(void)
+{
+	__u32 inputs;
+
+	KEYBD_MATRIX_GET_INPUTS(inputs);
+
+	#ifdef KEYBD_MATRIX_INVERT_INPUT_LOGIC
+		return (__u16)(~inputs & KEYBD_MATRIX_INPUT_MASK);
+	#else
+		return (__u16)(inputs & KEYBD_MATRIX_INPUT_MASK);
+	#endif
+}
+
+static int dokeystatetransition(void)
+{
+	unsigned char code;
+	int i, j;
+	__u16 keystate_xor[KEYBD_MATRIX_NUMBER_OUTPUTS];
+	int ret_val = 0;	//FALSE;
+	//int bFoundValidScancode = FALSE;
+	
+	/* iterate over columns */
+	for (i = 0; i < KEYBD_MATRIX_NUMBER_OUTPUTS; i++)
+	{
+		if (keystate_cur[i] != 0)
+			ret_val = 1;	//TRUE;
+
+		keystate_xor[i] = keystate_prev[i] ^ keystate_cur[i];
+		if (keystate_xor[i] != 0)
+		{
+			/* at least one matrix switch was changed, set backlight activity detect flag */
+			//vpDriverGlobals->misc.BacklightActivity = 1;
+
+			/* iterate over rows */
+			for (j = 0; j < KEYBD_MATRIX_NUMBER_INPUTS; j++)
+			{
+				if (keystate_xor[i] & (1 << j))
+				{
+					code = (j * KEYBD_MATRIX_NUMBER_OUTPUTS) + i;
+					/* figure out if key is pressed or released and process */
+
+					// support alt keymap for function keys
+					if (code == FN_KEY_SCANCODE)
+					{
+						fn_key_active = (keystate_cur[i] & (1 << j)) ? 1 : 0;
+					}
+					else
+					{
+						if (fn_key_active)
+						{
+//							printk("matrix %i, key %i, up/down %i\n", code, idpkbd_fn_keycode[code], (keystate_cur[i] & (1 << j)) ? 1 : 0);
+							input_report_key(idpkbd_dev, idpkbd_fn_keycode[code], (keystate_cur[i] & (1 << j)) ? 1 : 0);
+						}
+						else
+						{
+//							printk("matrix %i, key %i, up/down %i\n", code, idpkbd_keycode[code], (keystate_cur[i] & (1 << j)) ? 1 : 0);
+							input_report_key(idpkbd_dev, idpkbd_keycode[code], (keystate_cur[i] & (1 << j)) ? 1 : 0);
+						}
+					}
+
+				}
+			}
+			input_sync(idpkbd_dev);
+		}
+		keystate_prev[i] = keystate_cur[i];
+	}
+
+	return ret_val;
+}
+
+
+// handles keyboard keypress
+#if POLL_KEYBOARD
+static void idpkbd_scan_keyboard(unsigned long dummy)
+{
+	__u16 cs;		/* column status */
+	int i;
+//	printk(KERN_INFO "%s:\n", __FUNCTION__);
+
+#define SCAN_START	0	/* start of scan state machine */
+#define SCAN_GETSTATE	1	/* get keyboard state */
+#define SCAN_STAB	2	/* wait for key to stabalize */
+
+	/* start of keyboard scanning sequence */
+	/* Always start with an all-column scan */
+	setoutput( KEYBD_MATRIX_OUTPUT_MASK );
+	udelay( KEYBD_MATRIX_SETTLING_TIME_US );
+	cs = scaninput();
+
+//	printk("cs = %x\n", cs);
+//	printk("keystate_stable_ctr = %d\n", keystate_stable_ctr);
+//	printk("keystate_pre_active = %d\n", keystate_prev_active);
+//	printk("\n");
+
+	/* 
+	 * if no keys were down in previous state AND we are
+	 * not in stablizing mode AND the all-column scan
+	 * is 0, then keyboard is idle.
+	 */
+
+	if ((! keystate_prev_active) && (keystate_stable_ctr == 0) && (cs == 0))
+		goto scan_done;
+
+	/* Get the current state of the keyboard */
+	if (cs == 0)
+	{
+		for (i = 0; i < KEYBD_MATRIX_NUMBER_OUTPUTS; i++)
+		{
+			keystate_cur[i] = 0;
+		}
+	}
+	else
+	{
+		for (i = 0; i < KEYBD_MATRIX_NUMBER_OUTPUTS; i++)
+		{
+			setoutput ( 1 << i );
+			udelay(KEYBD_MATRIX_SETTLING_TIME_US);
+			keystate_cur[i] = scaninput();
+		}
+	}
+
+	/* Handle the stablizing case first */
+	if (keystate_stable_ctr > 0)
+	{
+
+		/* Compare the current state against the test state */
+		cs = 1;
+		for (i = 0; i < KEYBD_MATRIX_NUMBER_OUTPUTS; i++)
+		{
+			if (keystate_cur[i] != keystate_test[i])
+			{
+				cs = 0;
+				break;
+			}
+		}
+
+		// Are the states the same ?
+		if (cs)
+		{
+			++ keystate_stable_ctr;
+			if (keystate_stable_ctr == KEYBD_MATRIX_KEYSTATE_DEBOUNCE_CONSTANT)
+			{
+				keystate_prev_active = dokeystatetransition();
+				keystate_stable_ctr = 0;
+			}
+			goto scan_done;
+		}
+		else
+		{
+			keystate_stable_ctr = 0;		// Clear stable counter and fall through to next stage
+		}
+	}
+
+	// Compare the current state against the previous state
+	cs = 1;
+	for (i = 0; i < KEYBD_MATRIX_NUMBER_OUTPUTS; i++)
+	{
+		if (keystate_cur[i] != keystate_prev[i])
+		{
+			cs = 0;
+			break;
+		}
+	}
+
+	// If the states are different, begin waiting for stablizing
+	if (! cs)
+	{
+		for (i = 0; i < KEYBD_MATRIX_NUMBER_OUTPUTS; i++)
+		{
+			keystate_test[i] = keystate_cur[i];
+		}
+		keystate_stable_ctr = 1;
+	}
+
+scan_done:
+	// reload timer for next scan
+	mod_timer(&scan_timer, jiffies + scaninterval);
+}
+#else
+static void idpkbd_interrupt(int irq, void *dummy, struct pt_regs *fp)
+{
+//	printk(KERN_INFO "%s:\n", __FUNCTION__);
+
+	input_report_key(idpkbd_dev, BTN_0, inb(IDPKBD_PORT) & 1);
+	input_sync(idpkbd_dev);
+}
+#endif
+
+//TODO: Verify Events operation
+// handles keyboard LED and beep events
+int idpkbd_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)
+{
+//	printk(KERN_INFO "%s:\n", __FUNCTION__);
+
+	if (type == EV_SND && code == SND_BELL) {
+//x		outb(value, IDPKBD_BELL);
+		return 0;
+	}
+
+	if (type == EV_LED) {
+// TODO:
+		return 0;
+	}
+
+	return -1;
+}
+
+static int idpkbd_open(struct input_dev *dev)
+{
+//	printk(KERN_INFO "%s:\n", __FUNCTION__);
+
+	if (idpkbd_used++)
+		return 0;
+
+#if POLL_KEYBOARD
+	// start timer to scan matrix keyboard
+	init_timer(&scan_timer);
+	scan_timer.function = idpkbd_scan_keyboard;
+	mod_timer(&scan_timer, jiffies + scaninterval);
+#else	
+	if (request_irq(IDPKBD_IRQ, idpkbd_interrupt, 0, "idpkbd", NULL)) {
+                printk(KERN_ERR "idpkbd.c: Can't allocate irq %d\n", idpkbd_irq);
+                idpkbd_used--;
+                return -EBUSY;
+        }
+#endif
+
+        return 0;
+}
+
+static void idpkbd_close(struct input_dev *dev)
+{
+//	printk(KERN_INFO "%s:\n", __FUNCTION__);
+
+	if (!--idpkbd_used) {
+#if POLL_KEYBOARD
+		// stop timer 
+		del_timer(&scan_timer);
+#else
+		free_irq(IDPKBD_IRQ, idpkbd_interrupt);
+#endif
+	}
+}
+
+static int __init idpkbd_init(void)
+{
+	int i;
+//	printk(KERN_INFO "%s:\n", __FUNCTION__);
+
+  idpkbd_dev = input_allocate_device();
+
+	// fill in driver information
+	idpkbd_dev->name = "DevKitIDP PXA255 matrix keyboard";
+	idpkbd_dev->phys = "idpkdb/input0";
+//	idpkbd_dev.id.bustype = BUS_MATRIX;
+	idpkbd_dev->id.vendor = 0x0001;
+	idpkbd_dev->id.product = 0x0001;
+	idpkbd_dev->id.version = 0x0100;
+
+	// fill in function pointers
+	idpkbd_dev->open = idpkbd_open;
+	idpkbd_dev->close = idpkbd_close;
+	idpkbd_dev->event = idpkbd_event;
+
+	// setup available keypresses
+	idpkbd_dev->evbit[0] = BIT(EV_KEY);
+//	idpkbd_dev.evbit[0] = BIT(EV_KEY) | BIT(EV_REP);
+	idpkbd_dev->keycode = idpkbd_keycode;
+	idpkbd_dev->keycodesize = sizeof(unsigned char);
+//	idpkbd_dev.keycodemax = ARRAY_SIZE(idpkbd_keycode);
+	idpkbd_dev->keycodemax = ARRAY_SIZE(idpkbd_keycode) + ARRAY_SIZE(idpkbd_fn_keycode);
+
+	for (i = 0; i < (KEYBD_MATRIX_NUMBER_OUTPUTS * KEYBD_MATRIX_NUMBER_INPUTS); i++)
+	{
+		if (idpkbd_keycode[i])
+			set_bit(idpkbd_keycode[i], idpkbd_dev->keybit);
+		if (idpkbd_fn_keycode[i])
+			set_bit(idpkbd_fn_keycode[i], idpkbd_dev->keybit);
+	}
+
+	input_register_device(idpkbd_dev);
+	
+	printk(KERN_INFO "input: %s\n", idpkbd_dev->name);
+	return 0;
+}
+
+static void __exit idpkbd_exit(void)
+{
+//	printk(KERN_INFO "%s:\n", __FUNCTION__);
+
+	input_unregister_device(idpkbd_dev);
+}
+
+module_init(idpkbd_init);
+module_exit(idpkbd_exit);
+
+
Index: linux-2.6.19/drivers/input/keyboard/Kconfig
===================================================================
--- linux-2.6.19.orig/drivers/input/keyboard/Kconfig
+++ linux-2.6.19/drivers/input/keyboard/Kconfig
@@ -203,4 +203,14 @@ config KEYBOARD_OMAP
 	  To compile this driver as a module, choose M here: the
 	  module will be called omap-keypad.
 
+config KEYBOARD_IDPKBD
+	tristate "IDP matrix scan keyboard"
+	depends on ARCH_PXA_IDP && INPUT && INPUT_KEYBOARD
+	help
+	  Say Y here if you are running Linux on a DevKitIDP PXA255 and want
+	  to use the attached matrix scan keyboard.
+
+	  To compile this driver as a module, choose M here: the
+	  module will be called idpkbd.
+
 endif
Index: linux-2.6.19/drivers/input/keyboard/Makefile
===================================================================
--- linux-2.6.19.orig/drivers/input/keyboard/Makefile
+++ linux-2.6.19/drivers/input/keyboard/Makefile
@@ -4,6 +4,7 @@
 
 # Each configuration option enables a list of files.
 
+obj-$(CONFIG_KEYBOARD_IDPKBD)		+= idpkbd.o
 obj-$(CONFIG_KEYBOARD_ATKBD)		+= atkbd.o
 obj-$(CONFIG_KEYBOARD_SUNKBD)		+= sunkbd.o
 obj-$(CONFIG_KEYBOARD_LKKBD)		+= lkkbd.o
Index: linux-2.6.19/drivers/pcmcia/Makefile
===================================================================
--- linux-2.6.19.orig/drivers/pcmcia/Makefile
+++ linux-2.6.19/drivers/pcmcia/Makefile
@@ -68,5 +68,6 @@ sa1100_cs-$(CONFIG_SA1100_SIMPAD)		+= sa
 
 pxa2xx_cs-$(CONFIG_ARCH_LUBBOCK)		+= pxa2xx_lubbock.o sa1111_generic.o
 pxa2xx_cs-$(CONFIG_MACH_MAINSTONE)		+= pxa2xx_mainstone.o
+pxa2xx_cs-$(CONFIG_ARCH_PXA_IDP)		+= pxa2xx_idp.o
 pxa2xx_cs-$(CONFIG_PXA_SHARPSL)			+= pxa2xx_sharpsl.o
 
Index: linux-2.6.19/drivers/pcmcia/pxa2xx_idp.c
===================================================================
--- /dev/null
+++ linux-2.6.19/drivers/pcmcia/pxa2xx_idp.c
@@ -0,0 +1,392 @@
+/*
+ * linux/drivers/pcmcia/pxa2xx_idp.c
+ *
+ * DevKitIDP PXA255 PCMCIA specific routines.
+ * Copyright (C) 2005 BSQUARE
+ * David Plentovich <davidp@bsquare.com>
+ *
+ * Based on pxa2xx_mainstone.c - Nicolas Pitre
+ * Based on (2.4.x) driver/pcmcia/pxa/pxa_idp.c - Jeff Sutherland
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/errno.h>
+#include <linux/interrupt.h>
+#include <linux/device.h>
+#include <linux/delay.h>
+#include <linux/platform_device.h>
+
+#include <pcmcia/ss.h>
+
+#include <asm/hardware.h>
+#include <asm/irq.h>
+
+#include <asm/arch/pxa-regs.h>
+#include <asm/arch/idp.h>
+
+#include "soc_common.h"
+
+#define IDP_S0_CD_IRQ	PCMCIA_S0_CD_VALID
+#define IDP_S1_CD_IRQ	PCMCIA_S1_CD_VALID
+#define IDP_S0_IRQ	PCMCIA_S0_RDYINT
+#define IDP_S1_IRQ	PCMCIA_S1_RDYINT
+
+static struct pcmcia_irqs irqs[] = {
+	{ 0, IDP_S0_CD_IRQ, "PCMCIA0 CD" },
+	{ 1, IDP_S1_CD_IRQ, "PCMCIA1 CD" },
+};
+
+
+static int idp_pcmcia_hw_init_cnt = 0;
+
+
+static int idp_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
+{
+	printk("%s: socket %i\n", __FUNCTION__, skt->nr);	//dcp
+
+	if (!idp_pcmcia_hw_init_cnt++)
+	{
+	  	/* Set PCMCIA Socket 0 power to standby mode.
+		*  PXA IDP has dedicated CPLD pins for all this stuff :-)
+	   	*/
+		IDP_CPLD_PCCARD_EN = PCC0_ENABLE | PCC1_ENABLE;	//both slots disabled, reset NOT active
+		IDP_CPLD_PCCARD_PWR = 0; //all power to both slots off
+	
+		/*
+		 * Setup default state of GPIO outputs
+		 * before we enable them as outputs.
+		 */
+		GPSR(GPIO48_nPOE) =
+			GPIO_bit(GPIO48_nPOE) |
+			GPIO_bit(GPIO49_nPWE) |
+			GPIO_bit(GPIO50_nPIOR) |
+			GPIO_bit(GPIO51_nPIOW) |
+			GPIO_bit(GPIO52_nPCE_1) |
+			GPIO_bit(GPIO53_nPCE_2);
+
+		pxa_gpio_mode(GPIO48_nPOE_MD);
+		pxa_gpio_mode(GPIO49_nPWE_MD);
+		pxa_gpio_mode(GPIO50_nPIOR_MD);
+		pxa_gpio_mode(GPIO51_nPIOW_MD);
+		pxa_gpio_mode(GPIO52_nPCE_1_MD);
+		pxa_gpio_mode(GPIO53_nPCE_2_MD);
+		pxa_gpio_mode(GPIO54_pSKTSEL_MD);
+		pxa_gpio_mode(GPIO55_nPREG_MD);
+		pxa_gpio_mode(GPIO56_nPWAIT_MD);
+		pxa_gpio_mode(GPIO57_nIOIS16_MD);
+
+#if 0	//x	
+		GPDR(IRQ_TO_GPIO_2_80(PCMCIA_S0_CD_VALID)) &= ~GPIO_bit(IRQ_TO_GPIO_2_80(PCMCIA_S0_CD_VALID));
+		GPDR(IRQ_TO_GPIO_2_80(PCMCIA_S1_CD_VALID)) &= ~GPIO_bit(IRQ_TO_GPIO_2_80(PCMCIA_S1_CD_VALID));
+
+		set_GPIO_IRQ_edge(IRQ_TO_GPIO_2_80(PCMCIA_S0_CD_VALID), GPIO_BOTH_EDGES);
+		set_GPIO_IRQ_edge(IRQ_TO_GPIO_2_80(PCMCIA_S1_CD_VALID), GPIO_BOTH_EDGES);
+
+		//irq's for slots:
+		GPDR(IRQ_TO_GPIO_2_80(PCMCIA_S0_RDYINT)) &= ~GPIO_bit(IRQ_TO_GPIO_2_80(PCMCIA_S0_RDYINT));
+		GPDR(IRQ_TO_GPIO_2_80(PCMCIA_S1_RDYINT)) &= ~GPIO_bit(IRQ_TO_GPIO_2_80(PCMCIA_S1_RDYINT));
+
+		set_GPIO_IRQ_edge(IRQ_TO_GPIO_2_80(PCMCIA_S0_RDYINT), GPIO_FALLING_EDGE);
+		set_GPIO_IRQ_edge(IRQ_TO_GPIO_2_80(PCMCIA_S1_RDYINT), GPIO_FALLING_EDGE);
+#endif	//x
+	}
+
+#if 0	//x
+	return_val = request_irq(PCMCIA_S0_CD_VALID, init->handler, SA_INTERRUPT, "PXA PCMCIA CD0", NULL);
+
+	if (return_val < 0)
+		return -1;
+	
+	return_val += request_irq(PCMCIA_S1_CD_VALID, init->handler, SA_INTERRUPT, "PXA PCMCIA CD1", NULL);
+	
+	if (return_val < 0) {
+		free_irq(PCMCIA_S0_CD_VALID, NULL);
+		return -1;
+	}
+
+	return 2;
+
+#endif	//x
+	skt->irq = (skt->nr == 0) ? IDP_S0_IRQ : IDP_S1_IRQ;
+	return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
+}
+
+static void idp_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
+{
+//x	free_irq(PCMCIA_S0_CD_VALID, NULL);
+//x	free_irq(PCMCIA_S1_CD_VALID, NULL);
+
+	printk("%s: socket %i\n", __FUNCTION__, skt->nr);	//dcp
+
+	soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
+
+	if (!--idp_pcmcia_hw_init_cnt)
+	{
+		IDP_CPLD_PCCARD_EN = 0x03;	//disable slots
+		udelay(200);
+		IDP_CPLD_PCCARD_PWR = 0; //shut off all power
+	}
+}
+
+//x static unsigned long idp_pcmcia_status[2];
+
+static void idp_pcmcia_socket_state(struct soc_pcmcia_socket *skt,
+				    struct pcmcia_state *state)
+{
+	unsigned long status;
+	volatile unsigned long *stat_regs[2] = { &IDP_CPLD_PCCARD0_STATUS, &IDP_CPLD_PCCARD1_STATUS };
+//	printk("%s: socket %i\n", __FUNCTION__, skt->nr);	//dcp
+
+//x	status = (skt->nr == 0) ? IDP_PCMCIA0 : IDP_PCMCIA1;
+	status = *stat_regs[skt->nr];
+//x	flip = (status ^ idp_pcmcia_status[skt->nr]) & IDP_PCMCiIA_nSTSCHG_BVD1;
+
+#if 0	//x
+	/*
+	 * Workaround for STSCHG which can't be deasserted:
+	 * We therefore disable/enable corresponding IRQs
+	 * as needed to avoid IRQ locks.
+	 */
+	if (flip) {
+		idp_pcmcia_status[skt->nr] = status;
+		if (status & IDP_PCMCIA_nSTSCHG_BVD1)
+			enable_irq( (skt->nr == 0) ? IDP_S0_STSCHG_IRQ
+						   : IDP_S1_STSCHG_IRQ );
+		else
+			disable_irq( (skt->nr == 0) ? IDP_S0_STSCHG_IRQ
+						    : IDP_S1_STSCHG_IRQ );
+	}
+#endif	//x
+
+//x	state->detect = (status & IDP_PCMCIA_nCD) ? 0 : 1;
+	state->detect = (PCC_DETECT(skt->nr)) ? 0 : 1;		// this one is gpio
+	state->ready  = (status & _PCC_IRQ) ? 1 : 0;
+	state->bvd1   = (status & PCC_BVD1) ? 1 : 0;
+	state->bvd2   = (status & PCC_BVD2) ? 1 : 0;
+	state->wrprot = (status & _PCC_WRPROT) ? 1 : 0;
+	state->vs_3v  = (status & PCC_VS1) ? 0 : 1;
+	state->vs_Xv  = (status & PCC_VS2) ? 0 : 1;
+
+#if 0	
+		printk("%s: Sock %u flags: %s%s%s%s%s%s%s\n",__FUNCTION__,skt->nr,
+				(state->detect) ? "DET " : "",
+				(state->ready) ? "RDY " : "",
+				(state->bvd1) ? "BVD1 " : "",
+				(state->bvd2) ? "BVD2 " : "",
+				(state->wrprot) ? "WRPROT " : "",
+				(state->vs_3v) ? "VS_3V " : "",
+				(state->vs_Xv) ? "VS_XV " : "");
+#endif
+}
+
+static int idp_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
+				       const socket_state_t *state)
+{
+  /* The PXA Idp uses the Maxim MAX1602, with the following connections:
+   *
+   * Socket 0 (PCMCIA):
+   *	MAX1602	PXA_IDP		Register
+   *	Pin	Signal  	IDP_CPLD_PCCARD_PWR:
+   *	-----	-------		----------------------
+   *	A0VPP	PCC0_PWR0	bit0
+   *	A1VPP	PCC0_PWR1	bit1	
+   *	A0VCC	PCC0_PWR2	bit2
+   *	A1VCC	PCC0_PWR3	bit3
+   *	VX	VCC
+   *	VY	+3.3V
+   *	12IN	+12V
+   *	CODE	+3.3V		Cirrus  Code, CODE = High (VY)
+   *
+   * Socket 1 (PCMCIA):
+   *	MAX1602	PXA_IDP		Register
+   *	Pin	Signal		IDP_CPLD_PCCARD_PWR:
+   *	-----	-------		----------------------
+   *	A0VPP	PCC1_PWR0	bit4
+   *	A1VPP	PCC1_PWR1	bit5
+   *	A0VCC	PCC1_PWR2	bit6
+   *	A1VCC	PCC1_PWR3	bit7
+   *	VX	VCC
+   *	VY	+3.3V
+   *	12IN	+12V		
+   *	CODE	+3.3V		Cirrus  Code, CODE = High (VY)
+   *
+   */
+
+	printk("%s: socket %i %i %i\n", __FUNCTION__, skt->nr, state->Vcc, state->Vpp);	//dcp
+
+	switch (skt->nr) {
+		case 0:
+			switch (state->Vcc) {
+			    case 0:
+					IDP_CPLD_PCCARD_EN |= PCC0_ENABLE; // disable socket
+					udelay(200);
+					IDP_CPLD_PCCARD_PWR &= ~(PCC0_PWR2 | PCC0_PWR3);
+					break;
+
+			    case 33:
+					IDP_CPLD_PCCARD_PWR &= ~(PCC0_PWR2 | PCC0_PWR3);
+					IDP_CPLD_PCCARD_PWR |= PCC0_PWR3;
+					IDP_CPLD_PCCARD_EN &= ~PCC0_ENABLE; //turn it on
+					break;
+
+			    case 50:
+					IDP_CPLD_PCCARD_PWR &= ~(PCC0_PWR2 | PCC0_PWR3);
+					IDP_CPLD_PCCARD_PWR |= PCC0_PWR2;
+					IDP_CPLD_PCCARD_EN &= ~PCC0_ENABLE;
+					break;
+
+			    default:
+			 		printk(KERN_ERR "%s(): bad Vcc %u\n", __FUNCTION__, state->Vcc);
+					return -1;
+			}
+
+			switch (state->Vpp) {
+			    case 0:
+					IDP_CPLD_PCCARD_PWR &= ~(PCC0_PWR0 | PCC0_PWR1);
+					break;
+
+			    case 120:
+					IDP_CPLD_PCCARD_PWR &= ~(PCC0_PWR0 | PCC0_PWR1);
+					IDP_CPLD_PCCARD_PWR |= PCC0_PWR1;
+					break;
+
+			    default:
+				  	if(state->Vpp == state->Vcc) {
+						IDP_CPLD_PCCARD_PWR = (IDP_CPLD_PCCARD_PWR & ~(PCC0_PWR0 | PCC0_PWR1)) | PCC0_PWR0;
+					}
+					else {
+						printk(KERN_ERR "%s(): bad Vpp %u\n", __FUNCTION__, state->Vpp);
+						return -1;
+					}
+			}
+	
+			if (state->flags & SS_RESET) {
+				IDP_CPLD_PCCARD_EN = (IDP_CPLD_PCCARD_EN | PCC0_RESET);
+				printk("RESET\n");
+				}
+			else
+				IDP_CPLD_PCCARD_EN = (IDP_CPLD_PCCARD_EN & ~PCC0_RESET);
+
+	    	break;
+
+		case 1:
+			switch (state->Vcc) {
+		    	case 0:
+					IDP_CPLD_PCCARD_EN |= PCC1_ENABLE; // disable socket
+					udelay(200);
+					IDP_CPLD_PCCARD_PWR &= ~(PCC1_PWR2 | PCC1_PWR3);
+					break;
+
+			    case 33:
+					IDP_CPLD_PCCARD_PWR &= ~(PCC1_PWR2 | PCC1_PWR3);
+					IDP_CPLD_PCCARD_PWR |= PCC1_PWR3;
+					IDP_CPLD_PCCARD_EN &= ~PCC1_ENABLE; //turn it on
+					break;
+
+			    case 50:
+					IDP_CPLD_PCCARD_PWR &= ~(PCC1_PWR2 | PCC1_PWR3);
+					IDP_CPLD_PCCARD_PWR |= PCC1_PWR2;
+					IDP_CPLD_PCCARD_EN &= ~PCC1_ENABLE;
+					break;
+
+			    default:
+				 	printk(KERN_ERR "%s(): bad Vcc %u\n", __FUNCTION__, state->Vcc);
+					return -1;
+			}
+
+			switch (state->Vpp) {
+			    case 0:
+					IDP_CPLD_PCCARD_PWR &= ~(PCC1_PWR0 | PCC1_PWR1);
+				break;
+
+			    case 120:
+					IDP_CPLD_PCCARD_PWR &= ~(PCC1_PWR0 | PCC1_PWR1);
+					IDP_CPLD_PCCARD_PWR |= PCC1_PWR1;
+					break;
+
+			    default:
+			  		if(state->Vpp == state->Vcc) {
+						IDP_CPLD_PCCARD_PWR = (IDP_CPLD_PCCARD_PWR & ~(PCC1_PWR0 | PCC1_PWR1)) | PCC1_PWR0;
+					}
+					else {
+				  		printk(KERN_ERR "%s(): bad Vpp %u\n", __FUNCTION__, state->Vpp);
+						return -1;
+					}
+			}
+		
+			if (state->flags & SS_RESET) {
+				IDP_CPLD_PCCARD_EN = (IDP_CPLD_PCCARD_EN | PCC1_RESET);
+				printk("RESET\n");
+				}
+			else
+				IDP_CPLD_PCCARD_EN = (IDP_CPLD_PCCARD_EN & ~PCC1_RESET);
+
+		    break;
+	}
+	return 0;
+}
+
+static void idp_pcmcia_socket_init(struct soc_pcmcia_socket *skt)
+{
+	printk("%s: socket %i\n", __FUNCTION__, skt->nr);	//dcp
+}
+
+static void idp_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt)
+{
+	printk("%s: socket %i\n", __FUNCTION__, skt->nr);	//dcp
+}
+
+static struct pcmcia_low_level idp_pcmcia_ops = {
+	.owner			= THIS_MODULE,
+	.hw_init		= idp_pcmcia_hw_init,
+	.hw_shutdown		= idp_pcmcia_hw_shutdown,
+	.socket_state		= idp_pcmcia_socket_state,
+	.configure_socket	= idp_pcmcia_configure_socket,
+	.socket_init		= idp_pcmcia_socket_init,
+	.socket_suspend		= idp_pcmcia_socket_suspend,
+	.nr			= 2,
+};
+
+static struct platform_device *idp_pcmcia_device;
+
+static int __init idp_pcmcia_init(void)
+{
+	int ret;
+	printk("%s\n", __FUNCTION__);	//dcp
+
+	idp_pcmcia_device = platform_device_alloc("pxa2xx-pcmcia", -1);
+	if (!idp_pcmcia_device)
+		return -ENOMEM;
+	memset(idp_pcmcia_device, 0, sizeof(*idp_pcmcia_device));
+	idp_pcmcia_device->name = "pxa2xx-pcmcia";
+	idp_pcmcia_device->dev.platform_data = &idp_pcmcia_ops;
+
+	ret = platform_device_register(idp_pcmcia_device);
+	if (ret)
+		kfree(idp_pcmcia_device);
+
+	return ret;
+}
+
+static void __exit idp_pcmcia_exit(void)
+{
+	printk("%s\n", __FUNCTION__);	//dcp
+	/*
+	 * This call is supposed to free our idp_pcmcia_device.
+	 * Unfortunately platform_device don't have a free method, and
+	 * we can't assume it's free of any reference at this point so we
+	 * can't free it either.
+	 */
+	platform_device_unregister(idp_pcmcia_device);
+}
+
+module_init(idp_pcmcia_init);
+module_exit(idp_pcmcia_exit);
+
+MODULE_LICENSE("GPL");
Index: linux-2.6.19/include/asm-arm/arch-pxa/idp.h
===================================================================
--- linux-2.6.19.orig/include/asm-arm/arch-pxa/idp.h
+++ linux-2.6.19/include/asm-arm/arch-pxa/idp.h
@@ -179,15 +179,15 @@
 #define KEYBD_MATRIX_NUMBER_INPUTS	7
 #define KEYBD_MATRIX_NUMBER_OUTPUTS	14
 
-#define KEYBD_MATRIX_INVERT_OUTPUT_LOGIC	FALSE
-#define KEYBD_MATRIX_INVERT_INPUT_LOGIC		FALSE
+#undef KEYBD_MATRIX_INVERT_OUTPUT_LOGIC
+#undef KEYBD_MATRIX_INVERT_INPUT_LOGIC
 
-#define KEYBD_MATRIX_SETTLING_TIME_US			100
+#define KEYBD_MATRIX_SETTLING_TIME_US			40
 #define KEYBD_MATRIX_KEYSTATE_DEBOUNCE_CONSTANT		2
 
 #define KEYBD_MATRIX_SET_OUTPUTS(outputs) \
 {\
-	IDP_CPLD_KB_COL_LOW = outputs;\
+	IDP_CPLD_KB_COL_LOW = outputs & 0x7f;\
 	IDP_CPLD_KB_COL_HIGH = outputs >> 7;\
 }