Ok, final chapter:
The jmb module above is what makes the card readers work fine. But breaks hibernation.
There are, I think, 3 ways in which this module can show up:
1. It is called with modprobe before the pciehp module, like I did above. This leads to the best outcome, both card readers work fine automatically.
2. You put a card in, the module gets loaded automatically, take it out, then put it in again and the card shows up in your desktop. A bit more cumbersome, and loads the jmb module by itself.
3. The module can show up automatically at boot, if you have previously done a setpci "trick":
setpci -d 197b:2381 AE=47 , and you do that for 2381, 2382, 2383, 2384 . This makes the card readers show up as pci devices, and then the module gets loaded at boot. This seems to survive reboots, and I cannot get to the previous state (except for 2381, which still doesn't appear in lspci). However, it only works if the devices exist already, so one of the previous methods is necessary for them to show up.
In any case, ALL of these methods end up with the jmb module loaded and hibernation hangs, and is difficult (very difficult...) to remove that module... so although method 1 is the best and most functional solution, breaking suspend and hibernation is not acceptable (especially after every reboot).
1. Load the pciehp module at boot. This is necessary anyway, even if the jmb module is loaded.
It requires putting "/sbin/modprobe pciehp" in /etc/rc.d.rc.modules AND "options pciehp pciehp_force=1 pciehp_slot_with_bus=1" in /etc/modprobe.conf
2. Blacklist the jmb38x_ms module in /etc/modprobe.d/blacklist . This (I think) solves the problems with hibernation.
3. Get the pciehp module to unload when hibernating. This (I think) only gets you to resume from suspend a lot faster. Put "pciehp" in /etc/hibernate/blacklisted-modules.
The LEFT card reader will always work. But because there is no jmb module, the RIGHT card reader only works IF:
1. You put the card in, take it out, run "setpci -d 197b:2381 AE=47" (I think it's not necessary for the other 23xx values, but you might as well), put it back again; OR
2. You calll the jmb38x_ms module manually with modprobe, it should work fine as soon as you put the card in the first time, but will break hibernation later, and you won't be able to remove the module.
Finally, this is all for SD cards... there are 4 other modules loaded by linpus, which might be necessary for other card types (mspro_block, flash_bd, xd_card, jmb38x_xd). I have no clue about the consequences of loading these modules. Blacklisting the jmb38x_ms module also might break other card types (Memory Stick?).
This is WAY more convoluted than I ever wanted it to be... But, hey, I prefer to have suspend and hibernation working so I don't mind that much using the litlle insert / run setpci / insert again hack.
I'm done with this and will get back to real life now.... (until I try VL6 on it