I know this is two years old ticket. I encountered this same 'sd card initialization error with low quality cards' on omap-linux. Upstream kernels from 2.6.35 to 3.6 has "host->power_mode = MMC_POWER_OFF;" (drivers/mmc/host/omap_hsmmc.c). And with it initializing fails. Kernels of Ubuntu from 2.6.35-17.23 to (at least) 3.2.0-23.36 has it changed (/reverted) to the "host->power_mode = -1;". I made this same change and got my SD card initialized and working. That was good, but I also got kernel-warning during boot: +------------[ cut here ]------------ +WARNING: at drivers/regulator/core.c:1371 _regulator_disable+0x44/0x11c() +unbalanced disables for VMMC2_IO_18 +Modules linked in: +[] (unwind_backtrace+0x0/0x120) from [] (warn_slowpath_common+0x54/0x6c) +[] (warn_slowpath_common+0x54/0x6c) from [] (warn_slowpath_fmt+0x34/0x44) +[] (warn_slowpath_fmt+0x34/0x44) from [] (_regulator_disable+0x44/0x11c) +[] (_regulator_disable+0x44/0x11c) from [] (regulator_disable+0x34/0x70) +[] (regulator_disable+0x34/0x70) from [] (omap_hsmmc_23_set_power+0xac/0x100) +[] (omap_hsmmc_23_set_power+0xac/0x100) from [] (omap_hsmmc_set_ios+0x78/0x2dc) +[] (omap_hsmmc_set_ios+0x78/0x2dc) from [] (mmc_power_off+0x9c/0xac) +[] (mmc_power_off+0x9c/0xac) from [] (mmc_start_host+0x14/0x24) +[] (mmc_start_host+0x14/0x24) from [] (mmc_add_host+0x6c/0x80) +[] (mmc_add_host+0x6c/0x80) from [] (omap_hsmmc_probe+0x4e8/0x6fc) +[] (omap_hsmmc_probe+0x4e8/0x6fc) from [] (platform_drv_probe+0x1c/0x20) +[] (platform_drv_probe+0x1c/0x20) from [] (really_probe+0xd8/0x1d4) +[] (really_probe+0xd8/0x1d4) from [] (driver_probe_device+0x88/0xac) +[] (driver_probe_device+0x88/0xac) from [] (__driver_attach+0x68/0x8c) +[] (__driver_attach+0x68/0x8c) from [] (bus_for_each_dev+0x54/0x8c) +[] (bus_for_each_dev+0x54/0x8c) from [] (bus_add_driver+0x180/0x30c) +[] (bus_add_driver+0x180/0x30c) from [] (driver_register+0xb0/0x140) +[] (driver_register+0xb0/0x140) from [] (platform_driver_probe+0x20/0xb4) +[] (platform_driver_probe+0x20/0xb4) from [] (do_one_initcall+0x3c/0x100) +[] (do_one_initcall+0x3c/0x100) from [] (kernel_init+0x98/0x144) +[] (kernel_init+0x98/0x144) from [] (kernel_thread_exit+0x0/0x8) +---[ end trace 6b67a64bbd611c58 ]--- On code side this seems suspicious : unsigned char power_mode; host->power_mode = -1; (negative value to the unsigned char) ---- I got it working when I used vanilla code ("host->power_mode = MMC_POWER_OFF;") and added several printks to the __init omap_hsmmc_probe. So, for me that Ubuntu patch only works because it causes kernel warning, which gives some more time for card-driver to get initialized. I think adding debug messages are hacky as causing intentional kernel-warning, but what is the root cause of this? Is there people using one of these low quality cards and could check is there that kernel-warning?