diff options
| author | Sascha Hauer <s.hauer@pengutronix.de> | 2010-08-06 09:53:07 -0400 |
|---|---|---|
| committer | David Woodhouse <David.Woodhouse@intel.com> | 2010-08-06 11:37:22 -0400 |
| commit | 7aaf28ac02ff01f4202fc2e8a71ea33775da0f6f (patch) | |
| tree | 1edf8478c5cc57e86bc93f0945dc68003636d6b4 | |
| parent | 5f97304ef12b79f1a466971eefdf93ea3b2d341f (diff) | |
mxc_nand: factor out a check_int function
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
| -rw-r--r-- | drivers/mtd/nand/mxc_nand.c | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/drivers/mtd/nand/mxc_nand.c b/drivers/mtd/nand/mxc_nand.c index 5130a8531024..ea491140e552 100644 --- a/drivers/mtd/nand/mxc_nand.c +++ b/drivers/mtd/nand/mxc_nand.c | |||
| @@ -122,6 +122,7 @@ struct mxc_nand_host { | |||
| 122 | void (*send_page)(struct mtd_info *, unsigned int); | 122 | void (*send_page)(struct mtd_info *, unsigned int); |
| 123 | void (*send_read_id)(struct mxc_nand_host *); | 123 | void (*send_read_id)(struct mxc_nand_host *); |
| 124 | uint16_t (*get_dev_status)(struct mxc_nand_host *); | 124 | uint16_t (*get_dev_status)(struct mxc_nand_host *); |
| 125 | int (*check_int)(struct mxc_nand_host *); | ||
| 125 | }; | 126 | }; |
| 126 | 127 | ||
| 127 | /* OOB placement block for use with hardware ecc generation */ | 128 | /* OOB placement block for use with hardware ecc generation */ |
| @@ -181,34 +182,38 @@ static irqreturn_t mxc_nfc_irq(int irq, void *dev_id) | |||
| 181 | return IRQ_HANDLED; | 182 | return IRQ_HANDLED; |
| 182 | } | 183 | } |
| 183 | 184 | ||
| 185 | static int check_int_v1_v2(struct mxc_nand_host *host) | ||
| 186 | { | ||
| 187 | uint32_t tmp; | ||
| 188 | |||
| 189 | tmp = readw(host->regs + NFC_CONFIG2); | ||
| 190 | if (!(tmp & NFC_INT)) | ||
| 191 | return 0; | ||
| 192 | |||
| 193 | writew(tmp & ~NFC_INT, NFC_CONFIG2); | ||
| 194 | |||
| 195 | return 1; | ||
| 196 | } | ||
| 197 | |||
| 184 | /* This function polls the NANDFC to wait for the basic operation to | 198 | /* This function polls the NANDFC to wait for the basic operation to |
| 185 | * complete by checking the INT bit of config2 register. | 199 | * complete by checking the INT bit of config2 register. |
| 186 | */ | 200 | */ |
| 187 | static void wait_op_done(struct mxc_nand_host *host, int useirq) | 201 | static void wait_op_done(struct mxc_nand_host *host, int useirq) |
| 188 | { | 202 | { |
| 189 | uint16_t tmp; | ||
| 190 | int max_retries = 8000; | 203 | int max_retries = 8000; |
| 191 | 204 | ||
| 192 | if (useirq) { | 205 | if (useirq) { |
| 193 | if ((readw(host->regs + NFC_CONFIG2) & NFC_INT) == 0) { | 206 | if (!host->check_int(host)) { |
| 194 | 207 | ||
| 195 | enable_irq(host->irq); | 208 | enable_irq(host->irq); |
| 196 | 209 | ||
| 197 | wait_event(host->irq_waitq, | 210 | wait_event(host->irq_waitq, host->check_int(host)); |
| 198 | readw(host->regs + NFC_CONFIG2) & NFC_INT); | ||
| 199 | |||
| 200 | tmp = readw(host->regs + NFC_CONFIG2); | ||
| 201 | tmp &= ~NFC_INT; | ||
| 202 | writew(tmp, host->regs + NFC_CONFIG2); | ||
| 203 | } | 211 | } |
| 204 | } else { | 212 | } else { |
| 205 | while (max_retries-- > 0) { | 213 | while (max_retries-- > 0) { |
| 206 | if (readw(host->regs + NFC_CONFIG2) & NFC_INT) { | 214 | if (host->check_int(host)) |
| 207 | tmp = readw(host->regs + NFC_CONFIG2); | ||
| 208 | tmp &= ~NFC_INT; | ||
| 209 | writew(tmp, host->regs + NFC_CONFIG2); | ||
| 210 | break; | 215 | break; |
| 211 | } | 216 | |
| 212 | udelay(1); | 217 | udelay(1); |
| 213 | } | 218 | } |
| 214 | if (max_retries < 0) | 219 | if (max_retries < 0) |
| @@ -774,6 +779,7 @@ static int __init mxcnd_probe(struct platform_device *pdev) | |||
| 774 | host->send_page = send_page_v1_v2; | 779 | host->send_page = send_page_v1_v2; |
| 775 | host->send_read_id = send_read_id_v1_v2; | 780 | host->send_read_id = send_read_id_v1_v2; |
| 776 | host->get_dev_status = get_dev_status_v1_v2; | 781 | host->get_dev_status = get_dev_status_v1_v2; |
| 782 | host->check_int = check_int_v1_v2; | ||
| 777 | } | 783 | } |
| 778 | 784 | ||
| 779 | if (nfc_is_v21()) { | 785 | if (nfc_is_v21()) { |
