hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/mmc/core/sdio_ops.c
....@@ -1,12 +1,8 @@
1
+// SPDX-License-Identifier: GPL-2.0-or-later
12 /*
23 * linux/drivers/mmc/sdio_ops.c
34 *
45 * Copyright 2006-2007 Pierre Ossman
5
- *
6
- * This program is free software; you can redistribute it and/or modify
7
- * it under the terms of the GNU General Public License as published by
8
- * the Free Software Foundation; either version 2 of the License, or (at
9
- * your option) any later version.
106 */
117
128 #include <linux/scatterlist.h>
....@@ -125,6 +121,7 @@
125121 struct sg_table sgtable;
126122 unsigned int nents, left_size, i;
127123 unsigned int seg_size = card->host->max_seg_size;
124
+ int err;
128125
129126 WARN_ON(blksz == 0);
130127
....@@ -174,28 +171,32 @@
174171
175172 mmc_set_data_timeout(&data, card);
176173
174
+ mmc_pre_req(card->host, &mrq);
175
+
177176 mmc_wait_for_req(card->host, &mrq);
177
+
178
+ if (cmd.error)
179
+ err = cmd.error;
180
+ else if (data.error)
181
+ err = data.error;
182
+ else if (mmc_host_is_spi(card->host))
183
+ /* host driver already reported errors */
184
+ err = 0;
185
+ else if (cmd.resp[0] & R5_ERROR)
186
+ err = -EIO;
187
+ else if (cmd.resp[0] & R5_FUNCTION_NUMBER)
188
+ err = -EINVAL;
189
+ else if (cmd.resp[0] & R5_OUT_OF_RANGE)
190
+ err = -ERANGE;
191
+ else
192
+ err = 0;
193
+
194
+ mmc_post_req(card->host, &mrq, err);
178195
179196 if (nents > 1)
180197 sg_free_table(&sgtable);
181198
182
- if (cmd.error)
183
- return cmd.error;
184
- if (data.error)
185
- return data.error;
186
-
187
- if (mmc_host_is_spi(card->host)) {
188
- /* host driver already reported errors */
189
- } else {
190
- if (cmd.resp[0] & R5_ERROR)
191
- return -EIO;
192
- if (cmd.resp[0] & R5_FUNCTION_NUMBER)
193
- return -EINVAL;
194
- if (cmd.resp[0] & R5_OUT_OF_RANGE)
195
- return -ERANGE;
196
- }
197
-
198
- return 0;
199
+ return err;
199200 }
200201
201202 int sdio_reset(struct mmc_host *host)