The offset of MTD regions must be aligned with erase sectors. So in order not to waste address space, avoid misconfiguration and eventually support storage media > 4 GiB, give the offset in sectors instead of bytes.
Returning the number of bytes written/read could return a negative integer because a uint32_t is expected for the length in read()/write() operations.