From 6f1195d231ab576809fe2f4cff44a6e48cff2457 Mon Sep 17 00:00:00 2001 From: Yutang Jiang Date: Fri, 2 Sep 2016 22:00:16 +0800 Subject: [PATCH 113/113] mtd: spi-nor: fsl-quad: move mtd_device_register to the last of probe After call mtd_device_register, the mtd devices should be workable immediately. If before finish all of init work call the mtd_device_register, it will not respond work request timely. For example, openwrt/lede have a AUTO split special flash partitions mechanism while mtd driver register. So, before call mtd_device_register, must let all of init work ready. Signed-off-by: Yutang Jiang --- drivers/mtd/spi-nor/fsl-quadspi.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) --- a/drivers/mtd/spi-nor/fsl-quadspi.c +++ b/drivers/mtd/spi-nor/fsl-quadspi.c @@ -1280,10 +1280,6 @@ static int fsl_qspi_probe(struct platfor if (ret) goto mutex_failed; - ret = mtd_device_register(mtd, NULL, 0); - if (ret) - goto mutex_failed; - /* Set the correct NOR size now. */ if (q->nor_size == 0) { q->nor_size = mtd->size; @@ -1313,6 +1309,16 @@ static int fsl_qspi_probe(struct platfor goto last_init_failed; fsl_qspi_clk_disable_unprep(q); + + for (i = 0; i < q->nor_num; i++) { + /* skip the holes */ + if (!q->has_second_chip) + i *= 2; + + ret = mtd_device_register(&q->nor[i].mtd, NULL, 0); + if (ret) + goto last_init_failed; + } return 0; last_init_failed: