I would agree if the current code worked and would be good shape. Unfortunately it's not. It hardcodes the fact that there are 2 SSI units (i.MX51 has three of them). Instead of writel/readl it uses direct pointer derefs. The driver skips audio while it reinitialises the DMA engine. In mx1_mx2_pcm_open() there are several memory leaks. The driver does not call clk_get itself but depends on the board doing it. The only available board support depends on a board not present in the kernel, so we are not able to compile it (and it won't because the audmux definitions are missing)
We have still some pending HW changes in our board so we are not ready to submit it now. Anyway it would have been nice to have such this comments when I submitted my patches to avoid unnecessary rework.
This all leads to a huge series of patches and much work and in the end we would have a nearly rewritten driver.
All right, just let me test your patch in our board and comment.
Thank you.