I finished the first pass through all the platforms last night. Over 100 ports are converted, and ~30 have been tested.
Thanks to everyone for testing. While I'm sure a few ports will end up broken in this process, the low number of failures so far gives me hope that it won't be too many. I've also fixed a few bugs in the process, so it may be a net gain
There are ~20 cams I skipped over because they were "weird" in some way that I will revisit next.
The majority of these use a canon firmware function (_GetKbdState equivalent) to read directly into physw_status rather than reading into kbd_new_state and setting the modified values in physw_status later. I think most of these can be converted to use the normal code, but I need to look at the disassembly to be sure. It would be helpful to have some examples tested, so please let me know if you have one of these.
These are
A2000
A3100
A490 (also has inverted key logic)
A800 (also has inverted key logic)
IXUS1000_SD4500
IXUS300_SD4000
IXUS60_SD600 (also has feather code, but manual + google suggests it doesn't have hardware)
IXUS65_SD630 (also has "touch dial" per manual)
IXUS900_SD900 (also has "touch dial" per manual)
IXUSIZOOM_SD30 (has other weirdness)
S2IS (has other weirdness)
S5IS (has comments about regular key input code not being found)
SX100IS
SX110IS
SX120IS
SX210IS
There are also some old vxworks cams like which operate differently from both modern cams and the ixus30/ixus40
IXUS50
IXUS700_SD500
S2IS
There are also some with a "feather" or "touch control dial", as well as some that have this code, but (by looking the manual) do not appear to have the hardware. I don't have any of these cameras and I'm not entirely sure how the related CHDK code is supposed to work. The cameras with CAM_FEATURE_FEATHER defined are
IXUS110_SD960
IXUS300_SD4000
IXUS60_SD600 (but as noted above, I don't think it really has the hardware)
IXUS65_SD630
IXUS900_SD900
I also skipped over G9 since nafraf is has been working on other areas of the port.