Lines Matching refs:subdev

42 	struct mtd_info **subdev;  member
76 struct mtd_info *subdev = concat->subdev[i]; in concat_read() local
79 if (from >= subdev->size) { in concat_read()
82 from -= subdev->size; in concat_read()
85 if (from + len > subdev->size) in concat_read()
87 size = subdev->size - from; in concat_read()
92 err = mtd_read(subdev, from, size, &retsize, buf); in concat_read()
132 struct mtd_info *subdev = concat->subdev[i]; in concat_write() local
135 if (to >= subdev->size) { in concat_write()
137 to -= subdev->size; in concat_write()
140 if (to + len > subdev->size) in concat_write()
141 size = subdev->size - to; in concat_write()
145 err = mtd_write(subdev, to, size, &retsize, buf); in concat_write()
191 struct mtd_info *subdev = concat->subdev[i]; in concat_writev() local
194 if (to >= subdev->size) { in concat_writev()
195 to -= subdev->size; in concat_writev()
199 size = min_t(uint64_t, total_len, subdev->size - to); in concat_writev()
212 err = mtd_writev(subdev, &vecs_copy[entry_low], in concat_writev()
248 struct mtd_info *subdev = concat->subdev[i]; in concat_read_oob() local
250 if (from >= subdev->size) { in concat_read_oob()
251 from -= subdev->size; in concat_read_oob()
256 if (from + devops.len > subdev->size) in concat_read_oob()
257 devops.len = subdev->size - from; in concat_read_oob()
259 err = mtd_read_oob(subdev, from, &devops); in concat_read_oob()
308 struct mtd_info *subdev = concat->subdev[i]; in concat_write_oob() local
310 if (to >= subdev->size) { in concat_write_oob()
311 to -= subdev->size; in concat_write_oob()
316 if (to + devops.len > subdev->size) in concat_write_oob()
317 devops.len = subdev->size - to; in concat_write_oob()
319 err = mtd_write_oob(subdev, to, &devops); in concat_write_oob()
386 struct mtd_info *subdev; in concat_erase() local
452 subdev = concat->subdev[i]; in concat_erase()
453 if (subdev->size <= erase->addr) { in concat_erase()
454 erase->addr -= subdev->size; in concat_erase()
455 offset += subdev->size; in concat_erase()
468 subdev = concat->subdev[i]; /* get current subdevice */ in concat_erase()
471 if (erase->addr + length > subdev->size) in concat_erase()
472 erase->len = subdev->size - erase->addr; in concat_erase()
477 if ((err = concat_dev_erase(subdev, erase))) { in concat_erase()
494 offset += subdev->size; in concat_erase()
512 struct mtd_info *subdev = concat->subdev[i]; in concat_lock() local
515 if (ofs >= subdev->size) { in concat_lock()
517 ofs -= subdev->size; in concat_lock()
520 if (ofs + len > subdev->size) in concat_lock()
521 size = subdev->size - ofs; in concat_lock()
525 err = mtd_lock(subdev, ofs, size); in concat_lock()
546 struct mtd_info *subdev = concat->subdev[i]; in concat_unlock() local
549 if (ofs >= subdev->size) { in concat_unlock()
551 ofs -= subdev->size; in concat_unlock()
554 if (ofs + len > subdev->size) in concat_unlock()
555 size = subdev->size - ofs; in concat_unlock()
559 err = mtd_unlock(subdev, ofs, size); in concat_unlock()
580 struct mtd_info *subdev = concat->subdev[i]; in concat_sync() local
581 mtd_sync(subdev); in concat_sync()
592 struct mtd_info *subdev = concat->subdev[i]; in concat_suspend() local
593 if ((rc = mtd_suspend(subdev)) < 0) in concat_suspend()
605 struct mtd_info *subdev = concat->subdev[i]; in concat_resume() local
606 mtd_resume(subdev); in concat_resume()
616 if (!mtd_can_have_bb(concat->subdev[0])) in concat_block_isbad()
620 struct mtd_info *subdev = concat->subdev[i]; in concat_block_isbad() local
622 if (ofs >= subdev->size) { in concat_block_isbad()
623 ofs -= subdev->size; in concat_block_isbad()
627 res = mtd_block_isbad(subdev, ofs); in concat_block_isbad()
640 struct mtd_info *subdev = concat->subdev[i]; in concat_block_markbad() local
642 if (ofs >= subdev->size) { in concat_block_markbad()
643 ofs -= subdev->size; in concat_block_markbad()
647 err = mtd_block_markbad(subdev, ofs); in concat_block_markbad()
669 struct mtd_info *subdev = concat->subdev[i]; in concat_get_unmapped_area() local
671 if (offset >= subdev->size) { in concat_get_unmapped_area()
672 offset -= subdev->size; in concat_get_unmapped_area()
676 return mtd_get_unmapped_area(subdev, len, offset, flags); in concat_get_unmapped_area()
688 struct mtd_info *mtd_concat_create(struct mtd_info *subdev[], /* subdevices to concatenate */ in mtd_concat_create() argument
705 printk(KERN_NOTICE "(%d): \"%s\"\n", i, subdev[i]->name); in mtd_concat_create()
717 concat->subdev = (struct mtd_info **) (concat + 1); in mtd_concat_create()
723 concat->mtd.type = subdev[0]->type; in mtd_concat_create()
724 concat->mtd.flags = subdev[0]->flags; in mtd_concat_create()
725 concat->mtd.size = subdev[0]->size; in mtd_concat_create()
726 concat->mtd.erasesize = subdev[0]->erasesize; in mtd_concat_create()
727 concat->mtd.writesize = subdev[0]->writesize; in mtd_concat_create()
730 if (max_writebufsize < subdev[i]->writebufsize) in mtd_concat_create()
731 max_writebufsize = subdev[i]->writebufsize; in mtd_concat_create()
734 concat->mtd.subpage_sft = subdev[0]->subpage_sft; in mtd_concat_create()
735 concat->mtd.oobsize = subdev[0]->oobsize; in mtd_concat_create()
736 concat->mtd.oobavail = subdev[0]->oobavail; in mtd_concat_create()
738 if (subdev[0]->_writev) in mtd_concat_create()
741 if (subdev[0]->_read_oob) in mtd_concat_create()
743 if (subdev[0]->_write_oob) in mtd_concat_create()
745 if (subdev[0]->_block_isbad) in mtd_concat_create()
747 if (subdev[0]->_block_markbad) in mtd_concat_create()
750 concat->mtd.ecc_stats.badblocks = subdev[0]->ecc_stats.badblocks; in mtd_concat_create()
753 concat->mtd.backing_dev_info = subdev[0]->backing_dev_info; in mtd_concat_create()
756 concat->subdev[0] = subdev[0]; in mtd_concat_create()
759 if (concat->mtd.type != subdev[i]->type) { in mtd_concat_create()
762 subdev[i]->name); in mtd_concat_create()
765 if (concat->mtd.flags != subdev[i]->flags) { in mtd_concat_create()
770 if ((concat->mtd.flags ^ subdev[i]-> in mtd_concat_create()
774 subdev[i]->name); in mtd_concat_create()
780 subdev[i]->flags & MTD_WRITEABLE; in mtd_concat_create()
788 subdev[i]->backing_dev_info) in mtd_concat_create()
793 concat->mtd.size += subdev[i]->size; in mtd_concat_create()
795 subdev[i]->ecc_stats.badblocks; in mtd_concat_create()
796 if (concat->mtd.writesize != subdev[i]->writesize || in mtd_concat_create()
797 concat->mtd.subpage_sft != subdev[i]->subpage_sft || in mtd_concat_create()
798 concat->mtd.oobsize != subdev[i]->oobsize || in mtd_concat_create()
799 !concat->mtd._read_oob != !subdev[i]->_read_oob || in mtd_concat_create()
800 !concat->mtd._write_oob != !subdev[i]->_write_oob) { in mtd_concat_create()
803 subdev[i]->name); in mtd_concat_create()
806 concat->subdev[i] = subdev[i]; in mtd_concat_create()
810 concat->mtd.ecclayout = subdev[0]->ecclayout; in mtd_concat_create()
833 max_erasesize = curr_erasesize = subdev[0]->erasesize; in mtd_concat_create()
836 if (subdev[i]->numeraseregions == 0) { in mtd_concat_create()
838 if (subdev[i]->erasesize != curr_erasesize) { in mtd_concat_create()
841 curr_erasesize = subdev[i]->erasesize; in mtd_concat_create()
848 for (j = 0; j < subdev[i]->numeraseregions; j++) { in mtd_concat_create()
851 if (subdev[i]->eraseregions[j].erasesize != in mtd_concat_create()
855 subdev[i]->eraseregions[j]. in mtd_concat_create()
898 curr_erasesize = subdev[0]->erasesize; in mtd_concat_create()
901 if (subdev[i]->numeraseregions == 0) { in mtd_concat_create()
903 if (subdev[i]->erasesize != curr_erasesize) { in mtd_concat_create()
916 curr_erasesize = subdev[i]->erasesize; in mtd_concat_create()
919 position += subdev[i]->size; in mtd_concat_create()
923 for (j = 0; j < subdev[i]->numeraseregions; j++) { in mtd_concat_create()
925 if (subdev[i]->eraseregions[j]. in mtd_concat_create()
936 subdev[i]->eraseregions[j]. in mtd_concat_create()
941 subdev[i]->eraseregions[j]. in mtd_concat_create()