diff options
Diffstat (limited to 'opaque.c')
-rw-r--r-- | opaque.c | 13 |
1 files changed, 11 insertions, 2 deletions
@@ -46,9 +46,16 @@ int erase_opaque(struct flashctx *flash, unsigned int blockaddr, unsigned int bl return flash->mst->opaque.erase(flash, blockaddr, blocklen); } -int register_opaque_master(const struct opaque_master *mst) +int register_opaque_master(const struct opaque_master *mst, void *data) { - struct registered_master rmst; + struct registered_master rmst = {0}; + + if (mst->shutdown) { + if (register_shutdown(mst->shutdown, data)) { + mst->shutdown(data); /* cleanup */ + return 1; + } + } if (!mst->probe || !mst->read || !mst->write || !mst->erase) { msg_perr("%s called with incomplete master definition. " @@ -58,5 +65,7 @@ int register_opaque_master(const struct opaque_master *mst) } rmst.buses_supported = BUS_PROG; rmst.opaque = *mst; + if (data) + rmst.opaque.data = data; return register_master(&rmst); } |