Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth...
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / mtd / nand / fsl_elbc_nand.c
index 784293806110acc63ee4ae062c689dab534860d6..cc1480a5e4c1e0a23f262a4c880890217fa4ca6c 100644 (file)
@@ -614,41 +614,6 @@ static void fsl_elbc_read_buf(struct mtd_info *mtd, u8 *buf, int len)
                        len, avail);
 }
 
-/*
- * Verify buffer against the FCM Controller Data Buffer
- */
-static int fsl_elbc_verify_buf(struct mtd_info *mtd, const u_char *buf, int len)
-{
-       struct nand_chip *chip = mtd->priv;
-       struct fsl_elbc_mtd *priv = chip->priv;
-       struct fsl_elbc_fcm_ctrl *elbc_fcm_ctrl = priv->ctrl->nand;
-       int i;
-
-       if (len < 0) {
-               dev_err(priv->dev, "write_buf of %d bytes", len);
-               return -EINVAL;
-       }
-
-       if ((unsigned int)len >
-                       elbc_fcm_ctrl->read_bytes - elbc_fcm_ctrl->index) {
-               dev_err(priv->dev,
-                       "verify_buf beyond end of buffer "
-                       "(%d requested, %u available)\n",
-                       len, elbc_fcm_ctrl->read_bytes - elbc_fcm_ctrl->index);
-
-               elbc_fcm_ctrl->index = elbc_fcm_ctrl->read_bytes;
-               return -EINVAL;
-       }
-
-       for (i = 0; i < len; i++)
-               if (in_8(&elbc_fcm_ctrl->addr[elbc_fcm_ctrl->index + i])
-                               != buf[i])
-                       break;
-
-       elbc_fcm_ctrl->index += len;
-       return i == len && elbc_fcm_ctrl->status == LTESR_CC ? 0 : -EIO;
-}
-
 /* This function is called after Program and Erase Operations to
  * check for success or failure.
  */
@@ -766,11 +731,13 @@ static int fsl_elbc_read_page(struct mtd_info *mtd, struct nand_chip *chip,
 /* ECC will be calculated automatically, and errors will be detected in
  * waitfunc.
  */
-static void fsl_elbc_write_page(struct mtd_info *mtd, struct nand_chip *chip,
+static int fsl_elbc_write_page(struct mtd_info *mtd, struct nand_chip *chip,
                                const uint8_t *buf, int oob_required)
 {
        fsl_elbc_write_buf(mtd, buf, mtd->writesize);
        fsl_elbc_write_buf(mtd, chip->oob_poi, mtd->oobsize);
+
+       return 0;
 }
 
 static int fsl_elbc_chip_init(struct fsl_elbc_mtd *priv)
@@ -796,7 +763,6 @@ static int fsl_elbc_chip_init(struct fsl_elbc_mtd *priv)
        chip->read_byte = fsl_elbc_read_byte;
        chip->write_buf = fsl_elbc_write_buf;
        chip->read_buf = fsl_elbc_read_buf;
-       chip->verify_buf = fsl_elbc_verify_buf;
        chip->select_chip = fsl_elbc_select_chip;
        chip->cmdfunc = fsl_elbc_cmdfunc;
        chip->waitfunc = fsl_elbc_wait;
@@ -805,7 +771,6 @@ static int fsl_elbc_chip_init(struct fsl_elbc_mtd *priv)
        chip->bbt_md = &bbt_mirror_descr;
 
        /* set up nand options */
-       chip->options = NAND_NO_READRDY;
        chip->bbt_options = NAND_BBT_USE_FLASH;
 
        chip->controller = &elbc_fcm_ctrl->controller;
@@ -916,7 +881,8 @@ static int __devinit fsl_elbc_nand_probe(struct platform_device *pdev)
        elbc_fcm_ctrl->chips[bank] = priv;
        priv->bank = bank;
        priv->ctrl = fsl_lbc_ctrl_dev;
-       priv->dev = dev;
+       priv->dev = &pdev->dev;
+       dev_set_drvdata(priv->dev, priv);
 
        priv->vbase = ioremap(res.start, resource_size(&res));
        if (!priv->vbase) {
@@ -963,11 +929,10 @@ err:
 
 static int fsl_elbc_nand_remove(struct platform_device *pdev)
 {
-       int i;
        struct fsl_elbc_fcm_ctrl *elbc_fcm_ctrl = fsl_lbc_ctrl_dev->nand;
-       for (i = 0; i < MAX_BANKS; i++)
-               if (elbc_fcm_ctrl->chips[i])
-                       fsl_elbc_chip_remove(elbc_fcm_ctrl->chips[i]);
+       struct fsl_elbc_mtd *priv = dev_get_drvdata(&pdev->dev);
+
+       fsl_elbc_chip_remove(priv);
 
        mutex_lock(&fsl_elbc_nand_mutex);
        elbc_fcm_ctrl->counter--;