diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2009-06-02 05:37:53 -0400 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2009-11-12 02:31:41 -0500 |
commit | 06ecb04ac5c038248d2bcee92a2a4259f2acfa31 (patch) | |
tree | 93d0133ce29590cab534caaeebd59c130a61333d /drivers/mtd | |
parent | 13e1add1073f55d5361e5357016b631efc03bff8 (diff) |
mxc_nand: merge send_read_page and send_prog_page
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/mtd')
-rw-r--r-- | drivers/mtd/nand/mxc_nand.c | 54 |
1 files changed, 13 insertions, 41 deletions
diff --git a/drivers/mtd/nand/mxc_nand.c b/drivers/mtd/nand/mxc_nand.c index dafa1f0e04db..8aa8a429e6b8 100644 --- a/drivers/mtd/nand/mxc_nand.c +++ b/drivers/mtd/nand/mxc_nand.c | |||
@@ -226,12 +226,10 @@ static void send_addr(struct mxc_nand_host *host, uint16_t addr, int islast) | |||
226 | wait_op_done(host, TROP_US_DELAY, addr, islast); | 226 | wait_op_done(host, TROP_US_DELAY, addr, islast); |
227 | } | 227 | } |
228 | 228 | ||
229 | /* This function requests the NANDFC to initate the transfer | 229 | static void send_page(struct mxc_nand_host *host, uint8_t buf_id, |
230 | * of data currently in the NANDFC RAM buffer to the NAND device. */ | 230 | int spare_only, unsigned int ops) |
231 | static void send_prog_page(struct mxc_nand_host *host, uint8_t buf_id, | ||
232 | int spare_only) | ||
233 | { | 231 | { |
234 | DEBUG(MTD_DEBUG_LEVEL3, "send_prog_page (%d)\n", spare_only); | 232 | DEBUG(MTD_DEBUG_LEVEL3, "send_page (%d)\n", spare_only); |
235 | 233 | ||
236 | /* NANDFC buffer 0 is used for page read/write */ | 234 | /* NANDFC buffer 0 is used for page read/write */ |
237 | writew(buf_id, host->regs + NFC_BUF_ADDR); | 235 | writew(buf_id, host->regs + NFC_BUF_ADDR); |
@@ -246,33 +244,7 @@ static void send_prog_page(struct mxc_nand_host *host, uint8_t buf_id, | |||
246 | writew(config1, host->regs + NFC_CONFIG1); | 244 | writew(config1, host->regs + NFC_CONFIG1); |
247 | } | 245 | } |
248 | 246 | ||
249 | writew(NFC_INPUT, host->regs + NFC_CONFIG2); | 247 | writew(ops, host->regs + NFC_CONFIG2); |
250 | |||
251 | /* Wait for operation to complete */ | ||
252 | wait_op_done(host, TROP_US_DELAY, spare_only, true); | ||
253 | } | ||
254 | |||
255 | /* Requests NANDFC to initated the transfer of data from the | ||
256 | * NAND device into in the NANDFC ram buffer. */ | ||
257 | static void send_read_page(struct mxc_nand_host *host, uint8_t buf_id, | ||
258 | int spare_only) | ||
259 | { | ||
260 | DEBUG(MTD_DEBUG_LEVEL3, "send_read_page (%d)\n", spare_only); | ||
261 | |||
262 | /* NANDFC buffer 0 is used for page read/write */ | ||
263 | writew(buf_id, host->regs + NFC_BUF_ADDR); | ||
264 | |||
265 | /* Configure spare or page+spare access */ | ||
266 | if (!host->pagesize_2k) { | ||
267 | uint32_t config1 = readw(host->regs + NFC_CONFIG1); | ||
268 | if (spare_only) | ||
269 | config1 |= NFC_SP_EN; | ||
270 | else | ||
271 | config1 &= ~NFC_SP_EN; | ||
272 | writew(config1, host->regs + NFC_CONFIG1); | ||
273 | } | ||
274 | |||
275 | writew(NFC_OUTPUT, host->regs + NFC_CONFIG2); | ||
276 | 248 | ||
277 | /* Wait for operation to complete */ | 249 | /* Wait for operation to complete */ |
278 | wait_op_done(host, TROP_US_DELAY, spare_only, true); | 250 | wait_op_done(host, TROP_US_DELAY, spare_only, true); |
@@ -756,13 +728,13 @@ static void mxc_nand_command(struct mtd_info *mtd, unsigned command, | |||
756 | break; | 728 | break; |
757 | 729 | ||
758 | case NAND_CMD_PAGEPROG: | 730 | case NAND_CMD_PAGEPROG: |
759 | send_prog_page(host, 0, host->spare_only); | 731 | send_page(host, 0, host->spare_only, NFC_INPUT); |
760 | 732 | ||
761 | if (host->pagesize_2k) { | 733 | if (host->pagesize_2k) { |
762 | /* data in 4 areas datas */ | 734 | /* data in 4 areas datas */ |
763 | send_prog_page(host, 1, host->spare_only); | 735 | send_page(host, 1, host->spare_only, NFC_INPUT); |
764 | send_prog_page(host, 2, host->spare_only); | 736 | send_page(host, 2, host->spare_only, NFC_INPUT); |
765 | send_prog_page(host, 3, host->spare_only); | 737 | send_page(host, 3, host->spare_only, NFC_INPUT); |
766 | } | 738 | } |
767 | 739 | ||
768 | break; | 740 | break; |
@@ -827,12 +799,12 @@ static void mxc_nand_command(struct mtd_info *mtd, unsigned command, | |||
827 | /* send read confirm command */ | 799 | /* send read confirm command */ |
828 | send_cmd(host, NAND_CMD_READSTART, true); | 800 | send_cmd(host, NAND_CMD_READSTART, true); |
829 | /* read for each AREA */ | 801 | /* read for each AREA */ |
830 | send_read_page(host, 0, host->spare_only); | 802 | send_page(host, 0, host->spare_only, NFC_OUTPUT); |
831 | send_read_page(host, 1, host->spare_only); | 803 | send_page(host, 1, host->spare_only, NFC_OUTPUT); |
832 | send_read_page(host, 2, host->spare_only); | 804 | send_page(host, 2, host->spare_only, NFC_OUTPUT); |
833 | send_read_page(host, 3, host->spare_only); | 805 | send_page(host, 3, host->spare_only, NFC_OUTPUT); |
834 | } else | 806 | } else |
835 | send_read_page(host, 0, host->spare_only); | 807 | send_page(host, 0, host->spare_only, NFC_OUTPUT); |
836 | break; | 808 | break; |
837 | 809 | ||
838 | case NAND_CMD_READID: | 810 | case NAND_CMD_READID: |