@ -1245,7 +1245,8 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
if ( unlikely ( ops - > mode = = MTD_OOB_RAW ) )
ret = chip - > ecc . read_page_raw ( mtd , chip ,
bufpoi , page ) ;
else if ( ! aligned & & NAND_SUBPAGE_READ ( chip ) & & ! oob )
else if ( ! aligned & & NAND_HAS_SUBPAGE_READ ( chip ) & &
! oob )
ret = chip - > ecc . read_subpage ( mtd , chip ,
col , bytes , bufpoi ) ;
else
@ -1256,7 +1257,7 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
/* Transfer not aligned data */
if ( ! aligned ) {
if ( ! NAND_SUBPAGE_READ ( chip ) & & ! oob & &
if ( ! NAND_HAS_ SUBPAGE_READ ( chip ) & & ! oob & &
! ( mtd - > ecc_stats . failed - stats . failed ) )
chip - > pagebuf = realpage ;
memcpy ( buf , chip - > buffers - > databuf + col , bytes ) ;
@ -3150,6 +3151,10 @@ int nand_scan_tail(struct mtd_info *mtd)
/* Invalidate the pagebuffer reference */
chip - > pagebuf = - 1 ;
/* Large page NAND with SOFT_ECC should support subpage reads */
if ( ( chip - > ecc . mode = = NAND_ECC_SOFT ) & & ( chip - > page_shift > 9 ) )
chip - > options | = NAND_SUBPAGE_READ ;
/* Fill in remaining MTD driver data */
mtd - > type = MTD_NANDFLASH ;
mtd - > flags = ( chip - > options & NAND_ROM ) ? MTD_CAP_ROM :