- if (data && tags) {
- if (dev->param.use_nand_ecc)
- retval =
- mtd->write_ecc(mtd, addr, dev->data_bytes_per_chunk,
- &dummy, data, (u8 *) & pt, NULL);
- else
- retval =
- mtd->write_ecc(mtd, addr, dev->data_bytes_per_chunk,
- &dummy, data, (u8 *) & pt, NULL);
- } else {
- if (data)
- retval =
- mtd->write(mtd, addr, dev->data_bytes_per_chunk, &dummy,
- data);
- if (tags)
- retval =
- mtd->write_oob(mtd, addr, mtd->oobsize, &dummy,
- (u8 *) & pt);
-
- }
-#endif
+ ops.mode = MTD_OOB_AUTO;
+ ops.ooblen = (dev->param.inband_tags) ? 0 : packed_tags_size;
+ ops.len = dev->param.total_bytes_per_chunk;
+ ops.ooboffs = 0;
+ ops.datbuf = (u8 *) data;
+ ops.oobbuf = (dev->param.inband_tags) ? NULL : packed_tags_ptr;
+ retval = mtd->write_oob(mtd, addr, &ops);