Corey Osgood wrote:
See patch. Rudolf, can you test this one to make sure it works correctly on your board?
Hi,
Your patch seems not so solve KBD and RTC correct? This could be implemented in superio on other board for example. Also the clock gating for Ethernet should be made programmable.
index = PCI_FUNC(dev->path.u.pci.devfn);
This is not very user friendly, index is quite confusing, in fact I was staring to the code quite long time to get how it works. Perhaps two variables would be more handy???
I would suggest some lookup table to make it more elegant???? Plus we will need at least for RTC and KBD some? variables, just like enable_internal_RTC.... or something shorter.
More over you cant enable just UHCI function 2 and not enable function zero and one. Plus you cant disable all UHCIs when EHCI is enabled. (you would violate PCI specs not having fn0)
The lookup table could be:
u8/u16 enable_bits[dev-15][fn=6] = { { 0xb , 0x0}, { c, d, a, 8, 9} ....
Or alternatively we could store the bitmask which would allow to enable usb fn0 when someone wants fn1 for example...
The table would be 4*6*2 bytes so 48B, this is not so much contrary to the big if else if code...
Rudolf