*/
 int nand_ecc_init_ctx(struct nand_device *nand)
 {
-       if (!nand->ecc.engine->ops->init_ctx)
+       if (!nand->ecc.engine || !nand->ecc.engine->ops->init_ctx)
                return 0;
 
        return nand->ecc.engine->ops->init_ctx(nand);
  */
 void nand_ecc_cleanup_ctx(struct nand_device *nand)
 {
-       if (nand->ecc.engine->ops->cleanup_ctx)
+       if (nand->ecc.engine && nand->ecc.engine->ops->cleanup_ctx)
                nand->ecc.engine->ops->cleanup_ctx(nand);
 }
 EXPORT_SYMBOL(nand_ecc_cleanup_ctx);
 int nand_ecc_prepare_io_req(struct nand_device *nand,
                            struct nand_page_io_req *req)
 {
-       if (!nand->ecc.engine->ops->prepare_io_req)
+       if (!nand->ecc.engine || !nand->ecc.engine->ops->prepare_io_req)
                return 0;
 
        return nand->ecc.engine->ops->prepare_io_req(nand, req);
 int nand_ecc_finish_io_req(struct nand_device *nand,
                           struct nand_page_io_req *req)
 {
-       if (!nand->ecc.engine->ops->finish_io_req)
+       if (!nand->ecc.engine || !nand->ecc.engine->ops->finish_io_req)
                return 0;
 
        return nand->ecc.engine->ops->finish_io_req(nand, req);
 
        mtd->_erase = spinand_mtd_erase;
        mtd->_max_bad_blocks = nanddev_mtd_max_bad_blocks;
 
-       ret = mtd_ooblayout_count_freebytes(mtd);
-       if (ret < 0)
-               goto err_cleanup_ecc_engine;
+       if (nand->ecc.engine) {
+               ret = mtd_ooblayout_count_freebytes(mtd);
+               if (ret < 0)
+                       goto err_cleanup_ecc_engine;
+       }
 
        mtd->oobavail = ret;