@ -631,11 +631,19 @@ static void ar934x_nfc_read_status(struct ar934x_nfc *nfc)
nfc - > buf [ 0 ] = status ;
}
# if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
static void ar934x_nfc_cmdfunc ( struct mtd_info * mtd , unsigned int command ,
int column , int page_addr )
{
struct ar934x_nfc * nfc = mtd_to_ar934x_nfc ( mtd ) ;
struct nand_chip * nand = & nfc - > nand_chip ;
# else
static void ar934x_nfc_cmdfunc ( struct nand_chip * nand , unsigned int command ,
int column , int page_addr )
{
struct mtd_info * mtd = nand_to_mtd ( nand ) ;
struct ar934x_nfc * nfc = nand - > priv ;
# endif
nfc - > read_id = false ;
if ( command ! = NAND_CMD_PAGEPROG )
@ -740,16 +748,28 @@ static void ar934x_nfc_cmdfunc(struct mtd_info *mtd, unsigned int command,
}
}
# if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
static int ar934x_nfc_dev_ready ( struct mtd_info * mtd )
{
struct ar934x_nfc * nfc = mtd_to_ar934x_nfc ( mtd ) ;
# else
static int ar934x_nfc_dev_ready ( struct nand_chip * chip )
{
struct ar934x_nfc * nfc = chip - > priv ;
# endif
return __ar934x_nfc_dev_ready ( nfc ) ;
}
# if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
static u8 ar934x_nfc_read_byte ( struct mtd_info * mtd )
{
struct ar934x_nfc * nfc = mtd_to_ar934x_nfc ( mtd ) ;
# else
static u8 ar934x_nfc_read_byte ( struct nand_chip * chip )
{
struct ar934x_nfc * nfc = chip - > priv ;
# endif
u8 data ;
WARN_ON ( nfc - > buf_index > = nfc - > buf_size ) ;
@ -764,9 +784,15 @@ static u8 ar934x_nfc_read_byte(struct mtd_info *mtd)
return data ;
}
# if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
static void ar934x_nfc_write_buf ( struct mtd_info * mtd , const u8 * buf , int len )
{
struct ar934x_nfc * nfc = mtd_to_ar934x_nfc ( mtd ) ;
# else
static void ar934x_nfc_write_buf ( struct nand_chip * chip , const u8 * buf , int len )
{
struct ar934x_nfc * nfc = chip - > priv ;
# endif
int i ;
WARN_ON ( nfc - > buf_index + len > nfc - > buf_size ) ;
@ -784,9 +810,15 @@ static void ar934x_nfc_write_buf(struct mtd_info *mtd, const u8 *buf, int len)
}
}
# if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
static void ar934x_nfc_read_buf ( struct mtd_info * mtd , u8 * buf , int len )
{
struct ar934x_nfc * nfc = mtd_to_ar934x_nfc ( mtd ) ;
# else
static void ar934x_nfc_read_buf ( struct nand_chip * chip , u8 * buf , int len )
{
struct ar934x_nfc * nfc = chip - > priv ;
# endif
int buf_index ;
int i ;
@ -821,10 +853,18 @@ static inline void ar934x_nfc_disable_hwecc(struct ar934x_nfc *nfc)
nfc - > ctrl_reg | = AR934X_NFC_CTRL_CUSTOM_SIZE_EN ;
}
# if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
static int ar934x_nfc_read_oob ( struct mtd_info * mtd , struct nand_chip * chip ,
int page )
{
struct ar934x_nfc * nfc = mtd_to_ar934x_nfc ( mtd ) ;
# else
static int ar934x_nfc_read_oob ( struct nand_chip * chip ,
int page )
{
struct ar934x_nfc * nfc = chip - > priv ;
struct mtd_info * mtd = ar934x_nfc_to_mtd ( nfc ) ;
# endif
int err ;
nfc_dbg ( nfc , " read_oob: page:%d \n " , page ) ;
@ -839,11 +879,18 @@ static int ar934x_nfc_read_oob(struct mtd_info *mtd, struct nand_chip *chip,
return 0 ;
}
# if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
static int ar934x_nfc_write_oob ( struct mtd_info * mtd , struct nand_chip * chip ,
int page )
{
struct ar934x_nfc * nfc = mtd_to_ar934x_nfc ( mtd ) ;
# else
static int ar934x_nfc_write_oob ( struct nand_chip * chip ,
int page )
{
struct ar934x_nfc * nfc = chip - > priv ;
struct mtd_info * mtd = ar934x_nfc_to_mtd ( nfc ) ;
# endif
nfc_dbg ( nfc , " write_oob: page:%d \n " , page ) ;
memcpy ( nfc - > buf , chip - > oob_poi , mtd - > oobsize ) ;
@ -852,11 +899,20 @@ static int ar934x_nfc_write_oob(struct mtd_info *mtd, struct nand_chip *chip,
page , mtd - > oobsize ) ;
}
# if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
static int ar934x_nfc_read_page_raw ( struct mtd_info * mtd ,
struct nand_chip * chip , u8 * buf ,
int oob_required , int page )
{
struct ar934x_nfc * nfc = mtd_to_ar934x_nfc ( mtd ) ;
# else
static int ar934x_nfc_read_page_raw (
struct nand_chip * chip , u8 * buf ,
int oob_required , int page )
{
struct ar934x_nfc * nfc = chip - > priv ;
struct mtd_info * mtd = ar934x_nfc_to_mtd ( nfc ) ;
# endif
int len ;
int err ;
@ -878,10 +934,18 @@ static int ar934x_nfc_read_page_raw(struct mtd_info *mtd,
return 0 ;
}
# if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
static int ar934x_nfc_read_page ( struct mtd_info * mtd , struct nand_chip * chip ,
u8 * buf , int oob_required , int page )
{
struct ar934x_nfc * nfc = mtd_to_ar934x_nfc ( mtd ) ;
# else
static int ar934x_nfc_read_page ( struct nand_chip * chip ,
u8 * buf , int oob_required , int page )
{
struct ar934x_nfc * nfc = chip - > priv ;
struct mtd_info * mtd = ar934x_nfc_to_mtd ( nfc ) ;
# endif
u32 ecc_ctrl ;
int max_bitflips = 0 ;
bool ecc_failed ;
@ -950,11 +1014,20 @@ static int ar934x_nfc_read_page(struct mtd_info *mtd, struct nand_chip *chip,
return max_bitflips ;
}
# if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
static int ar934x_nfc_write_page_raw ( struct mtd_info * mtd ,
struct nand_chip * chip , const u8 * buf ,
int oob_required , int page )
{
struct ar934x_nfc * nfc = mtd_to_ar934x_nfc ( mtd ) ;
# else
static int ar934x_nfc_write_page_raw (
struct nand_chip * chip , const u8 * buf ,
int oob_required , int page )
{
struct ar934x_nfc * nfc = chip - > priv ;
struct mtd_info * mtd = ar934x_nfc_to_mtd ( nfc ) ;
# endif
int len ;
nfc_dbg ( nfc , " write_page_raw: page:%d oob:%d \n " , page , oob_required ) ;
@ -970,10 +1043,18 @@ static int ar934x_nfc_write_page_raw(struct mtd_info *mtd,
return ar934x_nfc_send_write ( nfc , NAND_CMD_PAGEPROG , 0 , page , len ) ;
}
# if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
static int ar934x_nfc_write_page ( struct mtd_info * mtd , struct nand_chip * chip ,
const u8 * buf , int oob_required , int page )
{
struct ar934x_nfc * nfc = mtd_to_ar934x_nfc ( mtd ) ;
# else
static int ar934x_nfc_write_page ( struct nand_chip * chip ,
const u8 * buf , int oob_required , int page )
{
struct ar934x_nfc * nfc = chip - > priv ;
struct mtd_info * mtd = ar934x_nfc_to_mtd ( nfc ) ;
# endif
int err ;
nfc_dbg ( nfc , " write_page: page:%d oob:%d \n " , page , oob_required ) ;
@ -981,7 +1062,11 @@ static int ar934x_nfc_write_page(struct mtd_info *mtd, struct nand_chip *chip,
/* write OOB first */
if ( oob_required & &
! is_all_ff ( chip - > oob_poi , mtd - > oobsize ) ) {
# if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
err = ar934x_nfc_write_oob ( mtd , chip , page ) ;
# else
err = ar934x_nfc_write_oob ( chip , page ) ;
# endif
if ( err )
return err ;
}
@ -1083,6 +1168,11 @@ static int ar934x_nfc_init_tail(struct mtd_info *mtd)
{
struct ar934x_nfc * nfc = mtd_to_ar934x_nfc ( mtd ) ;
struct nand_chip * chip = & nfc - > nand_chip ;
# if LINUX_VERSION_CODE < KERNEL_VERSION(5, 2, 0)
u64 chipsize = chip - > chipsize ;
# else
u64 chipsize = nanddev_target_size ( & chip - > base ) ;
# endif
u32 ctrl ;
u32 t ;
int err ;
@ -1169,10 +1259,10 @@ static int ar934x_nfc_init_tail(struct mtd_info *mtd)
if ( nfc - > small_page ) {
ctrl | = AR934X_NFC_CTRL_SMALL_PAGE ;
if ( chip - > chip size > ( 32 < < 20 ) ) {
if ( chip size > ( 32 < < 20 ) ) {
nfc - > addr_count0 = 4 ;
nfc - > addr_count1 = 3 ;
} else if ( chip - > chip size > ( 2 < < 16 ) ) {
} else if ( chip size > ( 2 < < 16 ) ) {
nfc - > addr_count0 = 3 ;
nfc - > addr_count1 = 2 ;
} else {
@ -1180,10 +1270,10 @@ static int ar934x_nfc_init_tail(struct mtd_info *mtd)
nfc - > addr_count1 = 1 ;
}
} else {
if ( chip - > chip size > ( 128 < < 20 ) ) {
if ( chip size > ( 128 < < 20 ) ) {
nfc - > addr_count0 = 5 ;
nfc - > addr_count1 = 3 ;
} else if ( chip - > chip size > ( 8 < < 16 ) ) {
} else if ( chip size > ( 8 < < 16 ) ) {
nfc - > addr_count0 = 4 ;
nfc - > addr_count1 = 2 ;
} else {
@ -1329,8 +1419,13 @@ static int ar934x_nfc_attach_chip(struct nand_chip *nand)
static u64 ar934x_nfc_dma_mask = DMA_BIT_MASK ( 32 ) ;
# if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
static void ar934x_nfc_cmd_ctrl ( struct mtd_info * mtd , int dat ,
unsigned int ctrl )
# else
static void ar934x_nfc_cmd_ctrl ( struct nand_chip * chip , int dat ,
unsigned int ctrl )
# endif
{
WARN_ON ( dat ! = NAND_CMD_NONE ) ;
}
@ -1401,6 +1496,7 @@ static int ar934x_nfc_probe(struct platform_device *pdev)
nand_set_controller_data ( nand , nfc ) ;
nand_set_flash_node ( nand , pdev - > dev . of_node ) ;
# if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
nand - > chip_delay = 25 ;
nand - > dev_ready = ar934x_nfc_dev_ready ;
nand - > cmdfunc = ar934x_nfc_cmdfunc ;
@ -1408,7 +1504,17 @@ static int ar934x_nfc_probe(struct platform_device *pdev)
nand - > read_byte = ar934x_nfc_read_byte ;
nand - > write_buf = ar934x_nfc_write_buf ;
nand - > read_buf = ar934x_nfc_read_buf ;
# else
nand - > legacy . chip_delay = 25 ;
nand - > legacy . dev_ready = ar934x_nfc_dev_ready ;
nand - > legacy . cmdfunc = ar934x_nfc_cmdfunc ;
nand - > legacy . cmd_ctrl = ar934x_nfc_cmd_ctrl ; /* dummy */
nand - > legacy . read_byte = ar934x_nfc_read_byte ;
nand - > legacy . write_buf = ar934x_nfc_write_buf ;
nand - > legacy . read_buf = ar934x_nfc_read_buf ;
# endif
nand - > ecc . mode = NAND_ECC_HW ; /* default */
nand - > priv = nfc ;
platform_set_drvdata ( pdev , nfc ) ;
ret = ar934x_nfc_alloc_buf ( nfc , AR934X_NFC_ID_BUF_SIZE ) ;
@ -1421,8 +1527,13 @@ static int ar934x_nfc_probe(struct platform_device *pdev)
goto err_free_buf ;
}
# if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
nand - > dummy_controller . ops = & ar934x_nfc_controller_ops ;
ret = nand_scan ( mtd , 1 ) ;
# else
nand - > legacy . dummy_controller . ops = & ar934x_nfc_controller_ops ;
ret = nand_scan ( nand , 1 ) ;
# endif
if ( ret ) {
dev_err ( & pdev - > dev , " nand_scan failed, err:%d \n " , ret ) ;
goto err_free_buf ;
@ -1444,12 +1555,18 @@ err_free_buf:
static int ar934x_nfc_remove ( struct platform_device * pdev )
{
struct ar934x_nfc * nfc ;
# if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
struct mtd_info * mtd ;
# endif
nfc = platform_get_drvdata ( pdev ) ;
if ( nfc ) {
# if LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0)
mtd = ar934x_nfc_to_mtd ( nfc ) ;
nand_release ( mtd ) ;
# else
nand_release ( & nfc - > nand_chip ) ;
# endif
ar934x_nfc_free_buf ( nfc ) ;
}