.. | .. |
---|
1147 | 1147 | pm_runtime_set_autosuspend_delay(&pdev->dev, SPI_AUTOSUSPEND_TIMEOUT); |
---|
1148 | 1148 | pm_runtime_set_active(&pdev->dev); |
---|
1149 | 1149 | pm_runtime_enable(&pdev->dev); |
---|
| 1150 | + |
---|
| 1151 | + ret = pm_runtime_get_sync(&pdev->dev); |
---|
| 1152 | + if (ret < 0) { |
---|
| 1153 | + dev_err(&pdev->dev, "Failed to pm_runtime_get_sync: %d\n", ret); |
---|
| 1154 | + goto clk_dis_all; |
---|
| 1155 | + } |
---|
| 1156 | + |
---|
1150 | 1157 | /* QSPI controller initializations */ |
---|
1151 | 1158 | zynqmp_qspi_init_hw(xqspi); |
---|
1152 | 1159 | |
---|
1153 | | - pm_runtime_mark_last_busy(&pdev->dev); |
---|
1154 | | - pm_runtime_put_autosuspend(&pdev->dev); |
---|
1155 | 1160 | xqspi->irq = platform_get_irq(pdev, 0); |
---|
1156 | 1161 | if (xqspi->irq <= 0) { |
---|
1157 | 1162 | ret = -ENXIO; |
---|
.. | .. |
---|
1178 | 1183 | ctlr->mode_bits = SPI_CPOL | SPI_CPHA | SPI_RX_DUAL | SPI_RX_QUAD | |
---|
1179 | 1184 | SPI_TX_DUAL | SPI_TX_QUAD; |
---|
1180 | 1185 | ctlr->dev.of_node = np; |
---|
| 1186 | + ctlr->auto_runtime_pm = true; |
---|
1181 | 1187 | |
---|
1182 | 1188 | ret = devm_spi_register_controller(&pdev->dev, ctlr); |
---|
1183 | 1189 | if (ret) { |
---|
.. | .. |
---|
1185 | 1191 | goto clk_dis_all; |
---|
1186 | 1192 | } |
---|
1187 | 1193 | |
---|
| 1194 | + pm_runtime_mark_last_busy(&pdev->dev); |
---|
| 1195 | + pm_runtime_put_autosuspend(&pdev->dev); |
---|
| 1196 | + |
---|
1188 | 1197 | return 0; |
---|
1189 | 1198 | |
---|
1190 | 1199 | clk_dis_all: |
---|
1191 | | - pm_runtime_set_suspended(&pdev->dev); |
---|
1192 | 1200 | pm_runtime_disable(&pdev->dev); |
---|
| 1201 | + pm_runtime_put_noidle(&pdev->dev); |
---|
| 1202 | + pm_runtime_set_suspended(&pdev->dev); |
---|
1193 | 1203 | clk_disable_unprepare(xqspi->refclk); |
---|
1194 | 1204 | clk_dis_pclk: |
---|
1195 | 1205 | clk_disable_unprepare(xqspi->pclk); |
---|
.. | .. |
---|
1213 | 1223 | { |
---|
1214 | 1224 | struct zynqmp_qspi *xqspi = platform_get_drvdata(pdev); |
---|
1215 | 1225 | |
---|
| 1226 | + pm_runtime_get_sync(&pdev->dev); |
---|
| 1227 | + |
---|
1216 | 1228 | zynqmp_gqspi_write(xqspi, GQSPI_EN_OFST, 0x0); |
---|
| 1229 | + |
---|
| 1230 | + pm_runtime_disable(&pdev->dev); |
---|
| 1231 | + pm_runtime_put_noidle(&pdev->dev); |
---|
| 1232 | + pm_runtime_set_suspended(&pdev->dev); |
---|
1217 | 1233 | clk_disable_unprepare(xqspi->refclk); |
---|
1218 | 1234 | clk_disable_unprepare(xqspi->pclk); |
---|
1219 | | - pm_runtime_set_suspended(&pdev->dev); |
---|
1220 | | - pm_runtime_disable(&pdev->dev); |
---|
1221 | 1235 | |
---|
1222 | 1236 | return 0; |
---|
1223 | 1237 | } |
---|