1.1.6移植笔记(初级篇)(7)

static void s3c2410_nand_select_chip(struct mtd_info *mtd, int chip) 

    S3C2410_NAND * const s3c2410nand = S3C2410_GetBase_NAND(); 

 

    if (chip == -1) { 

        s3c2410nand->NFCONF |= S3C2410_NFCONF_nFCE; 

    } else { 

        s3c2410nand->NFCONF &= ~S3C2410_NFCONF_nFCE; 

    } 

 

/* command and control functions, for s3c2410  

 * 

 * Note, these all use tglx's method of changing the IO_ADDR_W field 

 * to make the code simpler, and use the nand layer's code to issue the 

 * command and address sequences via the proper IO ports. 

 * 

*/ 

static void s3c2410_nand_hwcontrol(struct mtd_info *mtd, int cmd) 

    S3C2410_NAND * const s3c2410nand = S3C2410_GetBase_NAND(); 

    struct nand_chip *chip = mtd->priv; 

 

    switch (cmd) { 

    case NAND_CTL_SETNCE: 

    case NAND_CTL_CLRNCE: 

        printf("%s: called for NCE\n", __FUNCTION__); 

        break

 

    case NAND_CTL_SETCLE: 

        chip->IO_ADDR_W = (void *)&s3c2410nand->NFCMD; 

        break

 

    case NAND_CTL_SETALE: 

        chip->IO_ADDR_W = (void *)&s3c2410nand->NFADDR; 

        break

 

        /* NAND_CTL_CLRCLE: */ 

        /* NAND_CTL_CLRALE: */ 

    default

        chip->IO_ADDR_W = (void *)&s3c2410nand->NFDATA; 

        break

    } 

 

/* s3c2410_nand_devready() 

 * 

 * returns 0 if the nand is busy, 1 if it is ready 

 */ 

static int s3c2410_nand_devready(struct mtd_info *mtd) 

    S3C2410_NAND * const s3c2410nand = S3C2410_GetBase_NAND(); 

 

    return (s3c2410nand->NFSTAT & S3C2410_NFSTAT_READY); 

 

 

/* select chip, for s3c2440 */ 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/5192f09a4a43c65b3eaf648136b55d4c.html