Dear maintainers of the superiotool,
I have the following "feature request" (maybe not a bug report): I have this idea that superiotool should be able to detect more than one SuperIO chip in the system. Such detection of multiple chips may work in some cases, but may fail in others.
The primary cause seems to be that winbond.c :: probe_idregs_winbond() and ite.c :: probe_idregs_ite() call if (chip_found) return; // this is a global variable! after every "init sequence" tried.
Therefore, after the first chip detected (of any kind), only the first init sequence is ever tried, in any subsequent calls to the aforementioned probe_* functions.
My immediate hack was to comment out all occurrences of if (chip_found) return; in those probe functions. Makes me wonder if this has some adverse effects, such as repeatedly scanning some EFER bases / init sequences by probes belonging to different chip families. And my conclusion for the moment is that this repeated probing should be harmless, and that the current behavior (stop after the first init sequence tried) is flawed anyway :-)
My motivation is simple: right now I'm working with an embedded PC that has two SuperIO chips on the inside: W83627 + W83977. But I've seen other models in the past as well.
Your SuperIOtool is quite useful for a quick overview of the SuperIO chips in the system, including a thorough dump of their registers. In the past I myself have written and reused some simple snippet of code / a tiny library (in DOS) to help me debug/tweak SuperIO stuff, but I never got as far as making it truly universal and extensible. As for SuperIOtool, I could fancy a writing capability, and maybe an external configuration file, potentially allowing for extensions without coding in C, maybe human-readable interpretations / annotations of the register dump etc - but I admit that's too much work to be worth the bother, certainly for me at the moment :-)
Keep up the excellent work that you're doing...
Frank Rysanek