static void rts5260_process_ocp(struct rtsx_pcr *pcr) { if (!pcr->option.ocp_en) return; rtsx_pci_get_ocpstat(pcr, &pcr->ocp_stat); rts5260_get_ocpstat2(pcr, &pcr->ocp_stat2); if ((pcr->ocp_stat & (SD_OC_NOW | SD_OC_EVER)) || (pcr->ocp_stat2 & (DV3318_OCP_NOW | DV3318_OCP_EVER))) { rtsx_pci_card_power_off(pcr, RTSX_SD_CARD); rtsx_pci_write_register(pcr, CARD_OE, SD_OUTPUT_EN, 0); rtsx_pci_clear_ocpstat(pcr); pcr->ocp_stat = 0; pcr->ocp_stat2 = 0; } }
static int ms_power_off(struct realtek_pci_ms *host) { struct rtsx_pcr *pcr = host->pcr; int err; rtsx_pci_init_cmd(pcr); rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_CLK_EN, MS_CLK_EN, 0); rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_OE, MS_OUTPUT_EN, 0); err = rtsx_pci_send_cmd(pcr, 100); if (err < 0) return err; err = rtsx_pci_card_power_off(pcr, RTSX_MS_CARD); if (err < 0) return err; return rtsx_pci_card_pull_ctl_disable(pcr, RTSX_MS_CARD); }