Hi,
I agree, but there is a reason why I went with a usb_bus_register_companion function instead of with a usb_bus_register_companion_port function, the uhci controller needs to know how many companion controllers it has (to report this in one of its registers). When we're registering ports 1 by 1, it does not know.
Good point.
Thinking more about this I think that the best approach would be to move the port setup code (setting index, ops, speedmask, etc.) to usb_bus_register_companion, and keep doing the entire registration of all the ports in one single call. Would that work for you?
Yes. Or have some helper function to fill the USBPort struct (which could be called by usb_register_port too). I just don't like the initialization being done by the host adapter in one case and by the usb core code in the other case as this is a bit confusing and makes the code harder to read.
This still leaves the building of the port pointers array, we could pass in a stride parameter to usb_bus_register_companion and make it build that list too, I'm not sure if that is a good idea though?
Passing in the pointer array is fine with me. cheers, Gerd