I have tried below work around but still have some problems.
I think, it is definitely timing issue.I have added dump_stack() in _regulator_do_enable function in drivers/regulator/core.c and found that ,if I keep “regulator-always-on” in device tree, the function that gets executed after lk passes execution to kernel is regulator always-on constraint. It means, it turns on very early. Once regulator is on, regulator_disable(vmmc- l11) will not work but regulator_force_disable(vmmc supply -l11) will work. If regulator is force disabled(I have disabled vmmc supply in add_host function (sdhci.c) I.e., after sdhci host controller is detected, I made a check mmc_hostname(mmc ) is equal to mmc1),i am not able to turn it on. I am stuck here, how to turn it on? . Actually, mmc worker thread , mmc rescan will try to turn on the vmmc supply 4 times but as the software reset fails, regulator is failing to switch on but if it is not force disabled,software reset passes.
I don’t know how regulator_force_disable is implemented, regulator_enable won’t work if regulator is force disabled. This is the issue I am facing currently and I wonder if there is any alternative way.
In android case , I observed that , after card insertion SD mounts properly.