Carl-Daniel is going on vacation tomorrow and won't be readily available for at least a week. Also, we have a very bad history of merging patches (not only foreign ones, or own too). So, if you don't hear anything from him soonish, I suggest you either implement my proposition (I believe that has a good probability of getting merged, apart from some name bikeshedding), or continue with what you have so far and be prepared to adapt your changes later. After all, your changes so far are not that bold and have a relatively limited extent. That should not cause to many troubles if changed later.
I decided to implement your proposal since I think it's cleaner; I just submitted that as v2 a few minutes ago. Feel free to bikeshed to your heart's content.
I am interested in hearing more about your further plans. We had patches for a few related functionalities (e.g. setting the status register of SPI flashes manually) and google is using a very extended CLI for unlocking address ranges of flash chips that you might want to look at first.
The most immediate need was to add an option to bypass the check_erased_range() call in erase_and_write_block_helper() to speed up erases. Supposedly it reduced erase times from ~13 minutes to ~3 minutes. I don't know if this is a great idea or not since I had little to do with it; I just saw it in an internal svn branch where they implemented it by adding an ugly "erase_check" argument in addition to read_it, write_it, etc.
Thanks,
Nate