- TENDSTR), chunkInNAND, data, tags));
-
- if (tags) {
- yaffs_PackTags2(&pt, tags);
- }
-
- if (data && tags) {
- if (dev->useNANDECC)
- retval =
- mtd->write_ecc(mtd, addr, dev->nBytesPerChunk,
- &dummy, data, (__u8 *) & pt, NULL);
- else
- retval =
- mtd->write_ecc(mtd, addr, dev->nBytesPerChunk,
- &dummy, data, (__u8 *) & pt, NULL);
+ TENDSTR), nand_chunk, data, tags));
+
+
+ addr = ((loff_t) nand_chunk) * dev->param.total_bytes_per_chunk;
+
+ /* For yaffs2 writing there must be both data and tags.
+ * If we're using inband tags, then the tags are stuffed into
+ * the end of the data buffer.
+ */
+ if (!data || !tags)
+ BUG();
+ else if (dev->param.inband_tags) {
+ yaffs_PackedTags2TagsPart *pt2tp;
+ pt2tp = (yaffs_PackedTags2TagsPart *)(data + dev->data_bytes_per_chunk);
+ yaffs_PackTags2TagsPart(pt2tp, tags);
+ } else
+ yaffs_PackTags2(&pt, tags, !dev->param.no_tags_ecc);
+
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
+ 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);
+
+#else
+ if (!dev->param.inband_tags) {
+ retval =
+ mtd->write_ecc(mtd, addr, dev->data_bytes_per_chunk,
+ &dummy, data, (__u8 *) packed_tags_ptr, NULL);