I've been out of the loop for a few months working on something else. I just looked at this driver. My understanding of the fabric driver is different than the way you implemented it. I thought the fabric driver would only contain the essence of code specific to the board. Your fabric driver has a lot more in it than just this minimal essence.
In my model a lot of the code in your fabric driver would be pushed into the ssi driver. So if you used ssi and a codec in the standard manner, the board wouldn't need a fabric driver at all. That would probably be the case for most AC97/HDA systems.
My fabric driver contains code for hooking processor GPIOs up to the codec, initializing an external clock generator, etc. All of the code for parsing the device tree and setting up DMA is in the ssi driver.
Moving this code would also fix your problem with creating a fabric device for each SSI. There shouldn't need to be a loop in the fabric driver iterating over the SSIs.