@ -190,22 +190,27 @@ static struct pxa3xx_nand_cmdset default_cmdset = {
} ;
static struct pxa3xx_nand_timing timing [ ] = {
{ 10 , 0 , 20 , 40 , 30 , 40 , 11123 , 110 , 10 , } ,
{ 10 , 25 , 15 , 25 , 15 , 30 , 25000 , 60 , 10 , } ,
{ 10 , 35 , 15 , 25 , 15 , 25 , 25000 , 60 , 10 , } ,
{ 40 , 80 , 60 , 100 , 80 , 100 , 90000 , 400 , 40 , } ,
{ 10 , 0 , 20 , 40 , 30 , 40 , 11123 , 110 , 10 , } ,
{ 10 , 25 , 15 , 25 , 15 , 30 , 25000 , 60 , 10 , } ,
{ 10 , 35 , 15 , 25 , 15 , 25 , 25000 , 60 , 10 , } ,
} ;
static struct pxa3xx_nand_flash builtin_flash_types [ ] = {
{ 0x46ec , 32 , 512 , 16 , 16 , 4096 , & default_cmdset , & timing [ 0 ] } ,
{ 0xdaec , 64 , 2048 , 8 , 8 , 2048 , & default_cmdset , & timing [ 0 ] } ,
{ 0xd7ec , 128 , 4096 , 8 , 8 , 8192 , & default_cmdset , & timing [ 0 ] } ,
{ 0xa12c , 64 , 2048 , 8 , 8 , 1024 , & default_cmdset , & timing [ 1 ] } ,
{ 0xb12c , 64 , 2048 , 16 , 16 , 1024 , & default_cmdset , & timing [ 1 ] } ,
{ 0xdc2c , 64 , 2048 , 8 , 8 , 4096 , & default_cmdset , & timing [ 1 ] } ,
{ 0xcc2c , 64 , 2048 , 16 , 16 , 4096 , & default_cmdset , & timing [ 1 ] } ,
{ 0xba20 , 64 , 2048 , 16 , 16 , 2048 , & default_cmdset , & timing [ 2 ] } ,
{ 0 , 0 , 2048 , 8 , 8 , 0 , & default_cmdset , & timing [ 0 ] } ,
{ 0x46ec , 32 , 512 , 16 , 16 , 4096 , & default_cmdset , & timing [ 1 ] } ,
{ 0xdaec , 64 , 2048 , 8 , 8 , 2048 , & default_cmdset , & timing [ 1 ] } ,
{ 0xd7ec , 128 , 4096 , 8 , 8 , 8192 , & default_cmdset , & timing [ 1 ] } ,
{ 0xa12c , 64 , 2048 , 8 , 8 , 1024 , & default_cmdset , & timing [ 2 ] } ,
{ 0xb12c , 64 , 2048 , 16 , 16 , 1024 , & default_cmdset , & timing [ 2 ] } ,
{ 0xdc2c , 64 , 2048 , 8 , 8 , 4096 , & default_cmdset , & timing [ 2 ] } ,
{ 0xcc2c , 64 , 2048 , 16 , 16 , 4096 , & default_cmdset , & timing [ 2 ] } ,
{ 0xba20 , 64 , 2048 , 16 , 16 , 2048 , & default_cmdset , & timing [ 3 ] } ,
} ;
/* Define a default flash type setting serve as flash detecting only */
# define DEFAULT_FLASH_TYPE (&builtin_flash_types[0])
# define NDTR0_tCH(c) (min((c), 7) << 19)
# define NDTR0_tCS(c) (min((c), 7) << 16)
# define NDTR0_tWH(c) (min((c), 7) << 11)
@ -945,36 +950,29 @@ static int pxa3xx_nand_detect_flash(struct pxa3xx_nand_info *info,
if ( pxa3xx_nand_detect_config ( info ) = = 0 )
return 0 ;
for ( i = 0 ; i < pdata - > num_flash ; + + i ) {
f = pdata - > flash + i ;
if ( pxa3xx_nand_config_flash ( info , f ) )
continue ;
if ( __readid ( info , & id ) )
continue ;
if ( id = = f - > chip_id )
return 0 ;
}
for ( i = 0 ; i < ARRAY_SIZE ( builtin_flash_types ) ; i + + ) {
f = & builtin_flash_types [ i ] ;
if ( pxa3xx_nand_config_flash ( info , f ) )
continue ;
if ( __readid ( info , & id ) )
continue ;
if ( id = = f - > chip_id )
/* we use default timing to detect id */
f = DEFAULT_FLASH_TYPE ;
pxa3xx_nand_config_flash ( info , f ) ;
if ( __readid ( info , & id ) )
goto fail_detect ;
for ( i = 0 ; i < ARRAY_SIZE ( builtin_flash_types ) + pdata - > num_flash - 1 ; i + + ) {
/* we first choose the flash definition from platfrom */
if ( i < pdata - > num_flash )
f = pdata - > flash + i ;
else
f = & builtin_flash_types [ i - pdata - > num_flash + 1 ] ;
if ( f - > chip_id = = id ) {
dev_info ( & info - > pdev - > dev , " detect chip id: 0x%x \n " , id ) ;
pxa3xx_nand_config_flash ( info , f ) ;
return 0 ;
}
}
dev_warn ( & info - > pdev - > dev ,
" failed to detect configured nand flash; found %04x instead of \n " ,
id ) ;
fail_detect :
return - ENODEV ;
}