|
@@ -1262,6 +1262,21 @@ static int sdhci_msm_probe(struct platform_device *pdev)
|
|
|
CORE_VENDOR_SPEC_CAPABILITIES0);
|
|
|
}
|
|
|
|
|
|
+ /*
|
|
|
+ * Power on reset state may trigger power irq if previous status of
|
|
|
+ * PWRCTL was either BUS_ON or IO_HIGH_V. So before enabling pwr irq
|
|
|
+ * interrupt in GIC, any pending power irq interrupt should be
|
|
|
+ * acknowledged. Otherwise power irq interrupt handler would be
|
|
|
+ * fired prematurely.
|
|
|
+ */
|
|
|
+ sdhci_msm_voltage_switch(host);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Ensure that above writes are propogated before interrupt enablement
|
|
|
+ * in GIC.
|
|
|
+ */
|
|
|
+ mb();
|
|
|
+
|
|
|
/* Setup IRQ for handling power/voltage tasks with PMIC */
|
|
|
msm_host->pwr_irq = platform_get_irq_byname(pdev, "pwr_irq");
|
|
|
if (msm_host->pwr_irq < 0) {
|
|
@@ -1271,6 +1286,9 @@ static int sdhci_msm_probe(struct platform_device *pdev)
|
|
|
goto clk_disable;
|
|
|
}
|
|
|
|
|
|
+ /* Enable pwr irq interrupts */
|
|
|
+ writel_relaxed(INT_MASK, msm_host->core_mem + CORE_PWRCTL_MASK);
|
|
|
+
|
|
|
ret = devm_request_threaded_irq(&pdev->dev, msm_host->pwr_irq, NULL,
|
|
|
sdhci_msm_pwr_irq, IRQF_ONESHOT,
|
|
|
dev_name(&pdev->dev), host);
|