hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/mmc/host/meson-gx-mmc.c
....@@ -970,11 +970,8 @@
970970 if (status & (IRQ_END_OF_CHAIN | IRQ_RESP_STATUS)) {
971971 if (data && !cmd->error)
972972 data->bytes_xfered = data->blksz * data->blocks;
973
- if (meson_mmc_bounce_buf_read(data) ||
974
- meson_mmc_get_next_command(cmd))
975
- ret = IRQ_WAKE_THREAD;
976
- else
977
- ret = IRQ_HANDLED;
973
+
974
+ return IRQ_WAKE_THREAD;
978975 }
979976
980977 out:
....@@ -985,9 +982,6 @@
985982 start &= ~START_DESC_BUSY;
986983 writel(start, host->regs + SD_EMMC_START);
987984 }
988
-
989
- if (ret == IRQ_HANDLED)
990
- meson_mmc_request_done(host->mmc, cmd->mrq);
991985
992986 return ret;
993987 }
....@@ -1128,7 +1122,7 @@
11281122 struct mmc_host *mmc;
11291123 int ret;
11301124
1131
- mmc = mmc_alloc_host(sizeof(struct meson_host), &pdev->dev);
1125
+ mmc = devm_mmc_alloc_host(&pdev->dev, sizeof(struct meson_host));
11321126 if (!mmc)
11331127 return -ENOMEM;
11341128 host = mmc_priv(mmc);
....@@ -1144,46 +1138,33 @@
11441138 host->vqmmc_enabled = false;
11451139 ret = mmc_regulator_get_supply(mmc);
11461140 if (ret)
1147
- goto free_host;
1141
+ return ret;
11481142
11491143 ret = mmc_of_parse(mmc);
1150
- if (ret) {
1151
- if (ret != -EPROBE_DEFER)
1152
- dev_warn(&pdev->dev, "error parsing DT: %d\n", ret);
1153
- goto free_host;
1154
- }
1144
+ if (ret)
1145
+ return dev_err_probe(&pdev->dev, ret, "error parsing DT\n");
11551146
11561147 host->data = (struct meson_mmc_data *)
11571148 of_device_get_match_data(&pdev->dev);
1158
- if (!host->data) {
1159
- ret = -EINVAL;
1160
- goto free_host;
1161
- }
1149
+ if (!host->data)
1150
+ return -EINVAL;
11621151
11631152 ret = device_reset_optional(&pdev->dev);
1164
- if (ret) {
1165
- dev_err_probe(&pdev->dev, ret, "device reset failed\n");
1166
- goto free_host;
1167
- }
1153
+ if (ret)
1154
+ return dev_err_probe(&pdev->dev, ret, "device reset failed\n");
11681155
11691156 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
11701157 host->regs = devm_ioremap_resource(&pdev->dev, res);
1171
- if (IS_ERR(host->regs)) {
1172
- ret = PTR_ERR(host->regs);
1173
- goto free_host;
1174
- }
1158
+ if (IS_ERR(host->regs))
1159
+ return PTR_ERR(host->regs);
11751160
11761161 host->irq = platform_get_irq(pdev, 0);
1177
- if (host->irq <= 0) {
1178
- ret = -EINVAL;
1179
- goto free_host;
1180
- }
1162
+ if (host->irq < 0)
1163
+ return host->irq;
11811164
11821165 host->pinctrl = devm_pinctrl_get(&pdev->dev);
1183
- if (IS_ERR(host->pinctrl)) {
1184
- ret = PTR_ERR(host->pinctrl);
1185
- goto free_host;
1186
- }
1166
+ if (IS_ERR(host->pinctrl))
1167
+ return PTR_ERR(host->pinctrl);
11871168
11881169 host->pins_clk_gate = pinctrl_lookup_state(host->pinctrl,
11891170 "clk-gate");
....@@ -1194,14 +1175,12 @@
11941175 }
11951176
11961177 host->core_clk = devm_clk_get(&pdev->dev, "core");
1197
- if (IS_ERR(host->core_clk)) {
1198
- ret = PTR_ERR(host->core_clk);
1199
- goto free_host;
1200
- }
1178
+ if (IS_ERR(host->core_clk))
1179
+ return PTR_ERR(host->core_clk);
12011180
12021181 ret = clk_prepare_enable(host->core_clk);
12031182 if (ret)
1204
- goto free_host;
1183
+ return ret;
12051184
12061185 ret = meson_mmc_clk_init(host);
12071186 if (ret)
....@@ -1280,7 +1259,9 @@
12801259 }
12811260
12821261 mmc->ops = &meson_mmc_ops;
1283
- mmc_add_host(mmc);
1262
+ ret = mmc_add_host(mmc);
1263
+ if (ret)
1264
+ goto err_free_irq;
12841265
12851266 return 0;
12861267
....@@ -1294,8 +1275,6 @@
12941275 clk_disable_unprepare(host->mmc_clk);
12951276 err_core_clk:
12961277 clk_disable_unprepare(host->core_clk);
1297
-free_host:
1298
- mmc_free_host(mmc);
12991278 return ret;
13001279 }
13011280
....@@ -1319,7 +1298,6 @@
13191298 clk_disable_unprepare(host->mmc_clk);
13201299 clk_disable_unprepare(host->core_clk);
13211300
1322
- mmc_free_host(host->mmc);
13231301 return 0;
13241302 }
13251303