Lines Matching refs:omap_host

111 static void sdhci_omap_start_clock(struct sdhci_omap_host *omap_host);
112 static void sdhci_omap_stop_clock(struct sdhci_omap_host *omap_host);
126 static int sdhci_omap_set_pbias(struct sdhci_omap_host *omap_host, in sdhci_omap_set_pbias() argument
130 struct device *dev = omap_host->dev; in sdhci_omap_set_pbias()
132 if (IS_ERR(omap_host->pbias)) in sdhci_omap_set_pbias()
136 ret = regulator_set_voltage(omap_host->pbias, iov, iov); in sdhci_omap_set_pbias()
142 if (omap_host->pbias_enabled) in sdhci_omap_set_pbias()
145 ret = regulator_enable(omap_host->pbias); in sdhci_omap_set_pbias()
151 omap_host->pbias_enabled = true; in sdhci_omap_set_pbias()
153 if (!omap_host->pbias_enabled) in sdhci_omap_set_pbias()
156 ret = regulator_disable(omap_host->pbias); in sdhci_omap_set_pbias()
161 omap_host->pbias_enabled = false; in sdhci_omap_set_pbias()
167 static int sdhci_omap_enable_iov(struct sdhci_omap_host *omap_host, in sdhci_omap_enable_iov() argument
171 struct sdhci_host *host = omap_host->host; in sdhci_omap_enable_iov()
174 ret = sdhci_omap_set_pbias(omap_host, false, 0); in sdhci_omap_enable_iov()
186 ret = sdhci_omap_set_pbias(omap_host, true, iov); in sdhci_omap_enable_iov()
193 static void sdhci_omap_conf_bus_power(struct sdhci_omap_host *omap_host, in sdhci_omap_conf_bus_power() argument
199 reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_HCTL); in sdhci_omap_conf_bus_power()
207 sdhci_omap_writel(omap_host, SDHCI_OMAP_HCTL, reg); in sdhci_omap_conf_bus_power()
210 sdhci_omap_writel(omap_host, SDHCI_OMAP_HCTL, reg); in sdhci_omap_conf_bus_power()
217 if (sdhci_omap_readl(omap_host, SDHCI_OMAP_HCTL) & HCTL_SDBP) in sdhci_omap_conf_bus_power()
229 struct sdhci_omap_host *omap_host = sdhci_pltfm_priv(pltfm_host); in sdhci_omap_enable_sdio_irq() local
232 reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_CON); in sdhci_omap_enable_sdio_irq()
237 sdhci_omap_writel(omap_host, SDHCI_OMAP_CON, reg); in sdhci_omap_enable_sdio_irq()
242 static inline void sdhci_omap_set_dll(struct sdhci_omap_host *omap_host, in sdhci_omap_set_dll() argument
248 reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_DLL); in sdhci_omap_set_dll()
252 sdhci_omap_writel(omap_host, SDHCI_OMAP_DLL, reg); in sdhci_omap_set_dll()
255 sdhci_omap_writel(omap_host, SDHCI_OMAP_DLL, reg); in sdhci_omap_set_dll()
257 reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_DLL); in sdhci_omap_set_dll()
262 sdhci_omap_writel(omap_host, SDHCI_OMAP_DLL, reg); in sdhci_omap_set_dll()
265 static void sdhci_omap_disable_tuning(struct sdhci_omap_host *omap_host) in sdhci_omap_disable_tuning() argument
269 reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_AC12); in sdhci_omap_disable_tuning()
271 sdhci_omap_writel(omap_host, SDHCI_OMAP_AC12, reg); in sdhci_omap_disable_tuning()
273 reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_DLL); in sdhci_omap_disable_tuning()
275 sdhci_omap_writel(omap_host, SDHCI_OMAP_DLL, reg); in sdhci_omap_disable_tuning()
282 struct sdhci_omap_host *omap_host = sdhci_pltfm_priv(pltfm_host); in sdhci_omap_execute_tuning() local
284 struct device *dev = omap_host->dev; in sdhci_omap_execute_tuning()
301 reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_CAPA2); in sdhci_omap_execute_tuning()
315 reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_DLL); in sdhci_omap_execute_tuning()
317 sdhci_omap_writel(omap_host, SDHCI_OMAP_DLL, reg); in sdhci_omap_execute_tuning()
330 omap_host->is_tuning = true; in sdhci_omap_execute_tuning()
338 sdhci_omap_set_dll(omap_host, phase_delay); in sdhci_omap_execute_tuning()
398 sdhci_omap_set_dll(omap_host, phase_delay + i); in sdhci_omap_execute_tuning()
415 sdhci_omap_set_dll(omap_host, phase_delay + i); in sdhci_omap_execute_tuning()
434 reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_AC12); in sdhci_omap_execute_tuning()
440 sdhci_omap_set_dll(omap_host, phase_delay); in sdhci_omap_execute_tuning()
442 omap_host->is_tuning = false; in sdhci_omap_execute_tuning()
447 omap_host->is_tuning = false; in sdhci_omap_execute_tuning()
449 sdhci_omap_disable_tuning(omap_host); in sdhci_omap_execute_tuning()
467 struct sdhci_omap_host *omap_host; in sdhci_omap_card_busy() local
471 omap_host = sdhci_pltfm_priv(pltfm_host); in sdhci_omap_card_busy()
473 reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_CON); in sdhci_omap_card_busy()
474 ac12 = sdhci_omap_readl(omap_host, SDHCI_OMAP_AC12); in sdhci_omap_card_busy()
479 sdhci_omap_writel(omap_host, SDHCI_OMAP_CON, reg); in sdhci_omap_card_busy()
491 reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_PSTATE); in sdhci_omap_card_busy()
495 reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_CON); in sdhci_omap_card_busy()
497 sdhci_omap_writel(omap_host, SDHCI_OMAP_CON, reg); in sdhci_omap_card_busy()
514 struct sdhci_omap_host *omap_host; in sdhci_omap_start_signal_voltage_switch() local
518 omap_host = sdhci_pltfm_priv(pltfm_host); in sdhci_omap_start_signal_voltage_switch()
519 dev = omap_host->dev; in sdhci_omap_start_signal_voltage_switch()
522 reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_CAPA); in sdhci_omap_start_signal_voltage_switch()
526 sdhci_omap_conf_bus_power(omap_host, ios->signal_voltage); in sdhci_omap_start_signal_voltage_switch()
528 reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_AC12); in sdhci_omap_start_signal_voltage_switch()
530 sdhci_omap_writel(omap_host, SDHCI_OMAP_AC12, reg); in sdhci_omap_start_signal_voltage_switch()
534 reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_CAPA); in sdhci_omap_start_signal_voltage_switch()
538 sdhci_omap_conf_bus_power(omap_host, ios->signal_voltage); in sdhci_omap_start_signal_voltage_switch()
540 reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_AC12); in sdhci_omap_start_signal_voltage_switch()
542 sdhci_omap_writel(omap_host, SDHCI_OMAP_AC12, reg); in sdhci_omap_start_signal_voltage_switch()
549 ret = sdhci_omap_enable_iov(omap_host, iov); in sdhci_omap_start_signal_voltage_switch()
559 static void sdhci_omap_set_timing(struct sdhci_omap_host *omap_host, u8 timing) in sdhci_omap_set_timing() argument
563 struct device *dev = omap_host->dev; in sdhci_omap_set_timing()
565 if (!(omap_host->flags & SDHCI_OMAP_REQUIRE_IODELAY)) in sdhci_omap_set_timing()
568 if (omap_host->timing == timing) in sdhci_omap_set_timing()
571 sdhci_omap_stop_clock(omap_host); in sdhci_omap_set_timing()
573 pinctrl_state = omap_host->pinctrl_state[timing]; in sdhci_omap_set_timing()
574 ret = pinctrl_select_state(omap_host->pinctrl, pinctrl_state); in sdhci_omap_set_timing()
580 sdhci_omap_start_clock(omap_host); in sdhci_omap_set_timing()
581 omap_host->timing = timing; in sdhci_omap_set_timing()
584 static void sdhci_omap_set_power_mode(struct sdhci_omap_host *omap_host, in sdhci_omap_set_power_mode() argument
587 if (omap_host->bus_mode == MMC_POWER_OFF) in sdhci_omap_set_power_mode()
588 sdhci_omap_disable_tuning(omap_host); in sdhci_omap_set_power_mode()
589 omap_host->power_mode = power_mode; in sdhci_omap_set_power_mode()
592 static void sdhci_omap_set_bus_mode(struct sdhci_omap_host *omap_host, in sdhci_omap_set_bus_mode() argument
597 if (omap_host->bus_mode == mode) in sdhci_omap_set_bus_mode()
600 reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_CON); in sdhci_omap_set_bus_mode()
605 sdhci_omap_writel(omap_host, SDHCI_OMAP_CON, reg); in sdhci_omap_set_bus_mode()
607 omap_host->bus_mode = mode; in sdhci_omap_set_bus_mode()
614 struct sdhci_omap_host *omap_host; in sdhci_omap_set_ios() local
617 omap_host = sdhci_pltfm_priv(pltfm_host); in sdhci_omap_set_ios()
619 sdhci_omap_set_bus_mode(omap_host, ios->bus_mode); in sdhci_omap_set_ios()
620 sdhci_omap_set_timing(omap_host, ios->timing); in sdhci_omap_set_ios()
622 sdhci_omap_set_power_mode(omap_host, ios->power_mode); in sdhci_omap_set_ios()
637 static void sdhci_omap_start_clock(struct sdhci_omap_host *omap_host) in sdhci_omap_start_clock() argument
641 reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_SYSCTL); in sdhci_omap_start_clock()
643 sdhci_omap_writel(omap_host, SDHCI_OMAP_SYSCTL, reg); in sdhci_omap_start_clock()
646 static void sdhci_omap_stop_clock(struct sdhci_omap_host *omap_host) in sdhci_omap_stop_clock() argument
650 reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_SYSCTL); in sdhci_omap_stop_clock()
652 sdhci_omap_writel(omap_host, SDHCI_OMAP_SYSCTL, reg); in sdhci_omap_stop_clock()
658 struct sdhci_omap_host *omap_host = sdhci_pltfm_priv(pltfm_host); in sdhci_omap_set_clock() local
661 sdhci_omap_stop_clock(omap_host); in sdhci_omap_set_clock()
670 sdhci_omap_start_clock(omap_host); in sdhci_omap_set_clock()
685 struct sdhci_omap_host *omap_host = sdhci_pltfm_priv(pltfm_host); in sdhci_omap_enable_dma() local
687 reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_CON); in sdhci_omap_enable_dma()
689 sdhci_omap_writel(omap_host, SDHCI_OMAP_CON, reg); in sdhci_omap_enable_dma()
704 struct sdhci_omap_host *omap_host = sdhci_pltfm_priv(pltfm_host); in sdhci_omap_set_bus_width() local
707 reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_CON); in sdhci_omap_set_bus_width()
712 sdhci_omap_writel(omap_host, SDHCI_OMAP_CON, reg); in sdhci_omap_set_bus_width()
722 struct sdhci_omap_host *omap_host = sdhci_pltfm_priv(pltfm_host); in sdhci_omap_init_74_clocks() local
724 if (omap_host->power_mode == power_mode) in sdhci_omap_init_74_clocks()
732 reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_CON); in sdhci_omap_init_74_clocks()
734 sdhci_omap_writel(omap_host, SDHCI_OMAP_CON, reg); in sdhci_omap_init_74_clocks()
735 sdhci_omap_writel(omap_host, SDHCI_OMAP_CMD, 0x0); in sdhci_omap_init_74_clocks()
742 if (sdhci_omap_readl(omap_host, SDHCI_OMAP_STAT) & INT_CC_EN) in sdhci_omap_init_74_clocks()
749 reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_CON); in sdhci_omap_init_74_clocks()
751 sdhci_omap_writel(omap_host, SDHCI_OMAP_CON, reg); in sdhci_omap_init_74_clocks()
752 sdhci_omap_writel(omap_host, SDHCI_OMAP_STAT, INT_CC_EN); in sdhci_omap_init_74_clocks()
762 struct sdhci_omap_host *omap_host = sdhci_pltfm_priv(pltfm_host); in sdhci_omap_set_uhs_signaling() local
764 sdhci_omap_stop_clock(omap_host); in sdhci_omap_set_uhs_signaling()
766 reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_CON); in sdhci_omap_set_uhs_signaling()
771 sdhci_omap_writel(omap_host, SDHCI_OMAP_CON, reg); in sdhci_omap_set_uhs_signaling()
774 sdhci_omap_start_clock(omap_host); in sdhci_omap_set_uhs_signaling()
780 struct sdhci_omap_host *omap_host = sdhci_pltfm_priv(pltfm_host); in sdhci_omap_reset() local
783 if (omap_host->is_tuning) in sdhci_omap_reset()
796 struct sdhci_omap_host *omap_host = sdhci_pltfm_priv(pltfm_host); in sdhci_omap_irq() local
798 if (omap_host->is_tuning && host->cmd && !host->data_early && in sdhci_omap_irq()
839 static int sdhci_omap_set_capabilities(struct sdhci_omap_host *omap_host) in sdhci_omap_set_capabilities() argument
843 struct device *dev = omap_host->dev; in sdhci_omap_set_capabilities()
853 reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_CAPA); in sdhci_omap_set_capabilities()
861 sdhci_omap_writel(omap_host, SDHCI_OMAP_CAPA, reg); in sdhci_omap_set_capabilities()
899 *sdhci_omap_iodelay_pinctrl_state(struct sdhci_omap_host *omap_host, char *mode, in sdhci_omap_iodelay_pinctrl_state() argument
902 struct device *dev = omap_host->dev; in sdhci_omap_iodelay_pinctrl_state()
903 char *version = omap_host->version; in sdhci_omap_iodelay_pinctrl_state()
912 pinctrl_state = pinctrl_lookup_state(omap_host->pinctrl, str); in sdhci_omap_iodelay_pinctrl_state()
916 pinctrl_state = pinctrl_lookup_state(omap_host->pinctrl, mode); in sdhci_omap_iodelay_pinctrl_state()
928 *omap_host) in sdhci_omap_config_iodelay_pinctrl_state()
930 struct device *dev = omap_host->dev; in sdhci_omap_config_iodelay_pinctrl_state()
931 struct sdhci_host *host = omap_host->host; in sdhci_omap_config_iodelay_pinctrl_state()
938 if (!(omap_host->flags & SDHCI_OMAP_REQUIRE_IODELAY)) in sdhci_omap_config_iodelay_pinctrl_state()
948 omap_host->pinctrl = devm_pinctrl_get(omap_host->dev); in sdhci_omap_config_iodelay_pinctrl_state()
949 if (IS_ERR(omap_host->pinctrl)) { in sdhci_omap_config_iodelay_pinctrl_state()
951 return PTR_ERR(omap_host->pinctrl); in sdhci_omap_config_iodelay_pinctrl_state()
954 state = pinctrl_lookup_state(omap_host->pinctrl, "default"); in sdhci_omap_config_iodelay_pinctrl_state()
961 state = sdhci_omap_iodelay_pinctrl_state(omap_host, "sdr104", caps, in sdhci_omap_config_iodelay_pinctrl_state()
966 state = sdhci_omap_iodelay_pinctrl_state(omap_host, "ddr50", caps, in sdhci_omap_config_iodelay_pinctrl_state()
971 state = sdhci_omap_iodelay_pinctrl_state(omap_host, "sdr50", caps, in sdhci_omap_config_iodelay_pinctrl_state()
976 state = sdhci_omap_iodelay_pinctrl_state(omap_host, "sdr25", caps, in sdhci_omap_config_iodelay_pinctrl_state()
981 state = sdhci_omap_iodelay_pinctrl_state(omap_host, "sdr12", caps, in sdhci_omap_config_iodelay_pinctrl_state()
986 state = sdhci_omap_iodelay_pinctrl_state(omap_host, "ddr_1_8v", caps, in sdhci_omap_config_iodelay_pinctrl_state()
991 state = sdhci_omap_iodelay_pinctrl_state(omap_host, "ddr_3_3v", in sdhci_omap_config_iodelay_pinctrl_state()
998 state = sdhci_omap_iodelay_pinctrl_state(omap_host, "hs", caps, in sdhci_omap_config_iodelay_pinctrl_state()
1003 state = sdhci_omap_iodelay_pinctrl_state(omap_host, "hs", caps, in sdhci_omap_config_iodelay_pinctrl_state()
1008 state = sdhci_omap_iodelay_pinctrl_state(omap_host, "hs200_1_8v", caps2, in sdhci_omap_config_iodelay_pinctrl_state()
1013 omap_host->pinctrl_state = pinctrl_state; in sdhci_omap_config_iodelay_pinctrl_state()
1035 struct sdhci_omap_host *omap_host; in sdhci_omap_probe() local
1053 sizeof(*omap_host)); in sdhci_omap_probe()
1060 omap_host = sdhci_pltfm_priv(pltfm_host); in sdhci_omap_probe()
1061 omap_host->host = host; in sdhci_omap_probe()
1062 omap_host->base = host->ioaddr; in sdhci_omap_probe()
1063 omap_host->dev = dev; in sdhci_omap_probe()
1064 omap_host->power_mode = MMC_POWER_UNDEFINED; in sdhci_omap_probe()
1065 omap_host->timing = MMC_TIMING_LEGACY; in sdhci_omap_probe()
1066 omap_host->flags = data->flags; in sdhci_omap_probe()
1077 omap_host->version = "rev11"; in sdhci_omap_probe()
1101 omap_host->pbias = devm_regulator_get_optional(dev, "pbias"); in sdhci_omap_probe()
1102 if (IS_ERR(omap_host->pbias)) { in sdhci_omap_probe()
1103 ret = PTR_ERR(omap_host->pbias); in sdhci_omap_probe()
1108 omap_host->pbias_enabled = false; in sdhci_omap_probe()
1124 ret = sdhci_omap_set_capabilities(omap_host); in sdhci_omap_probe()
1141 ret = sdhci_omap_config_iodelay_pinctrl_state(omap_host); in sdhci_omap_probe()