[kernel] generic-2.6: yaffs cleanup
[openwrt/svn-archive/archive.git] / target / linux / generic-2.6 / patches-2.6.23 / 301-mmc_sdhci_fixes.patch
1 --- a/drivers/mmc/host/sdhci.c
2 +++ b/drivers/mmc/host/sdhci.c
3 @@ -481,16 +481,16 @@
4 * Controller doesn't count down when in single block mode.
5 */
6 if (data->blocks == 1)
7 - blocks = (data->error == MMC_ERR_NONE) ? 0 : 1;
8 + blocks = (data->error == 0) ? 0 : 1;
9 else
10 blocks = readw(host->ioaddr + SDHCI_BLOCK_COUNT);
11 data->bytes_xfered = data->blksz * (data->blocks - blocks);
12
13 - if ((data->error == MMC_ERR_NONE) && blocks) {
14 + if (!data->error && blocks) {
15 printk(KERN_ERR "%s: Controller signalled completion even "
16 "though there were blocks left.\n",
17 mmc_hostname(host->mmc));
18 - data->error = MMC_ERR_FAILED;
19 + data->error = -EIO;
20 }
21
22 if (data->stop) {
23 @@ -498,7 +498,7 @@
24 * The controller needs a reset of internal state machines
25 * upon error conditions.
26 */
27 - if (data->error != MMC_ERR_NONE) {
28 + if (data->error) {
29 sdhci_reset(host, SDHCI_RESET_CMD);
30 sdhci_reset(host, SDHCI_RESET_DATA);
31 }
32 @@ -533,7 +533,7 @@
33 printk(KERN_ERR "%s: Controller never released "
34 "inhibit bit(s).\n", mmc_hostname(host->mmc));
35 sdhci_dumpregs(host);
36 - cmd->error = MMC_ERR_FAILED;
37 + cmd->error = -EIO;
38 tasklet_schedule(&host->finish_tasklet);
39 return;
40 }
41 @@ -554,7 +554,7 @@
42 if ((cmd->flags & MMC_RSP_136) && (cmd->flags & MMC_RSP_BUSY)) {
43 printk(KERN_ERR "%s: Unsupported response type!\n",
44 mmc_hostname(host->mmc));
45 - cmd->error = MMC_ERR_INVALID;
46 + cmd->error = -EINVAL;
47 tasklet_schedule(&host->finish_tasklet);
48 return;
49 }
50 @@ -601,7 +601,7 @@
51 }
52 }
53
54 - host->cmd->error = MMC_ERR_NONE;
55 + host->cmd->error = 0;
56
57 if (host->data && host->data_early)
58 sdhci_finish_data(host);
59 @@ -722,7 +722,7 @@
60 host->mrq = mrq;
61
62 if (!(readl(host->ioaddr + SDHCI_PRESENT_STATE) & SDHCI_CARD_PRESENT)) {
63 - host->mrq->cmd->error = MMC_ERR_TIMEOUT;
64 + host->mrq->cmd->error = -ENOMEDIUM;
65 tasklet_schedule(&host->finish_tasklet);
66 } else
67 sdhci_send_command(host, mrq->cmd);
68 @@ -831,7 +831,7 @@
69 sdhci_reset(host, SDHCI_RESET_CMD);
70 sdhci_reset(host, SDHCI_RESET_DATA);
71
72 - host->mrq->cmd->error = MMC_ERR_FAILED;
73 + host->mrq->cmd->error = -ENOMEDIUM;
74 tasklet_schedule(&host->finish_tasklet);
75 }
76 }
77 @@ -859,9 +859,9 @@
78 * The controller needs a reset of internal state machines
79 * upon error conditions.
80 */
81 - if ((mrq->cmd->error != MMC_ERR_NONE) ||
82 - (mrq->data && ((mrq->data->error != MMC_ERR_NONE) ||
83 - (mrq->data->stop && (mrq->data->stop->error != MMC_ERR_NONE))))) {
84 + if (mrq->cmd->error ||
85 + (mrq->data && (mrq->data->error ||
86 + (mrq->data->stop && mrq->data->stop->error)))) {
87
88 /* Some controllers need this kick or reset won't work here */
89 if (host->chip->quirks & SDHCI_QUIRK_CLOCK_BEFORE_RESET) {
90 @@ -906,13 +906,13 @@
91 sdhci_dumpregs(host);
92
93 if (host->data) {
94 - host->data->error = MMC_ERR_TIMEOUT;
95 + host->data->error = -ETIMEDOUT;
96 sdhci_finish_data(host);
97 } else {
98 if (host->cmd)
99 - host->cmd->error = MMC_ERR_TIMEOUT;
100 + host->cmd->error = -ETIMEDOUT;
101 else
102 - host->mrq->cmd->error = MMC_ERR_TIMEOUT;
103 + host->mrq->cmd->error = -ETIMEDOUT;
104
105 tasklet_schedule(&host->finish_tasklet);
106 }
107 @@ -941,13 +941,12 @@
108 }
109
110 if (intmask & SDHCI_INT_TIMEOUT)
111 - host->cmd->error = MMC_ERR_TIMEOUT;
112 - else if (intmask & SDHCI_INT_CRC)
113 - host->cmd->error = MMC_ERR_BADCRC;
114 - else if (intmask & (SDHCI_INT_END_BIT | SDHCI_INT_INDEX))
115 - host->cmd->error = MMC_ERR_FAILED;
116 + host->cmd->error = -ETIMEDOUT;
117 + else if (intmask & (SDHCI_INT_CRC | SDHCI_INT_END_BIT |
118 + SDHCI_INT_INDEX))
119 + host->cmd->error = -EILSEQ;
120
121 - if (host->cmd->error != MMC_ERR_NONE)
122 + if (host->cmd->error)
123 tasklet_schedule(&host->finish_tasklet);
124 else if (intmask & SDHCI_INT_RESPONSE)
125 sdhci_finish_command(host);
126 @@ -974,13 +973,11 @@
127 }
128
129 if (intmask & SDHCI_INT_DATA_TIMEOUT)
130 - host->data->error = MMC_ERR_TIMEOUT;
131 - else if (intmask & SDHCI_INT_DATA_CRC)
132 - host->data->error = MMC_ERR_BADCRC;
133 - else if (intmask & SDHCI_INT_DATA_END_BIT)
134 - host->data->error = MMC_ERR_FAILED;
135 + host->data->error = -ETIMEDOUT;
136 + else if (intmask & (SDHCI_INT_DATA_CRC | SDHCI_INT_DATA_END_BIT))
137 + host->data->error = -EILSEQ;
138
139 - if (host->data->error != MMC_ERR_NONE)
140 + if (host->data->error)
141 sdhci_finish_data(host);
142 else {
143 if (intmask & (SDHCI_INT_DATA_AVAIL | SDHCI_INT_SPACE_AVAIL))
144 @@ -1312,7 +1309,7 @@
145 mmc->ops = &sdhci_ops;
146 mmc->f_min = host->max_clk / 256;
147 mmc->f_max = host->max_clk;
148 - mmc->caps = MMC_CAP_4_BIT_DATA | MMC_CAP_MULTIWRITE | MMC_CAP_BYTEBLOCK;
149 + mmc->caps = MMC_CAP_4_BIT_DATA | MMC_CAP_MULTIWRITE;
150
151 if (caps & SDHCI_CAN_DO_HISPD)
152 mmc->caps |= MMC_CAP_SD_HIGHSPEED;