Lines Matching refs:host

92 static void mmc_should_fail_request(struct mmc_host *host,  in mmc_should_fail_request()  argument
107 !should_fail(&host->fail_mmc_request, data->blksz * data->blocks)) in mmc_should_fail_request()
116 static inline void mmc_should_fail_request(struct mmc_host *host, in mmc_should_fail_request() argument
131 void mmc_request_done(struct mmc_host *host, struct mmc_request *mrq) in mmc_request_done() argument
142 mmc_retune_needed(host); in mmc_request_done()
144 if (err && cmd->retries && mmc_host_is_spi(host)) { in mmc_request_done()
149 if (err && cmd->retries && !mmc_card_removed(host->card)) { in mmc_request_done()
157 mmc_should_fail_request(host, mrq); in mmc_request_done()
159 led_trigger_event(host->led, LED_OFF); in mmc_request_done()
163 mmc_hostname(host), mrq->sbc->opcode, in mmc_request_done()
170 mmc_hostname(host), cmd->opcode, err, in mmc_request_done()
176 mmc_hostname(host), in mmc_request_done()
182 mmc_hostname(host), mrq->stop->opcode, in mmc_request_done()
195 static void __mmc_start_request(struct mmc_host *host, struct mmc_request *mrq) in __mmc_start_request() argument
200 err = mmc_retune(host); in __mmc_start_request()
203 mmc_request_done(host, mrq); in __mmc_start_request()
211 if (mmc_is_io_op(mrq->cmd->opcode) && host->ops->card_busy) { in __mmc_start_request()
214 while (host->ops->card_busy(host) && --tries) in __mmc_start_request()
219 mmc_request_done(host, mrq); in __mmc_start_request()
224 host->ops->request(host, mrq); in __mmc_start_request()
227 static int mmc_start_request(struct mmc_host *host, struct mmc_request *mrq) in mmc_start_request() argument
233 mmc_retune_hold(host); in mmc_start_request()
235 if (mmc_card_removed(host->card)) in mmc_start_request()
240 mmc_hostname(host), mrq->sbc->opcode, in mmc_start_request()
245 mmc_hostname(host), mrq->cmd->opcode, in mmc_start_request()
251 mmc_hostname(host), mrq->data->blksz, in mmc_start_request()
259 mmc_hostname(host), mrq->stop->opcode, in mmc_start_request()
263 WARN_ON(!host->claimed); in mmc_start_request()
272 BUG_ON(mrq->data->blksz > host->max_blk_size); in mmc_start_request()
273 BUG_ON(mrq->data->blocks > host->max_blk_count); in mmc_start_request()
275 host->max_req_size); in mmc_start_request()
293 led_trigger_event(host->led, LED_FULL); in mmc_start_request()
294 __mmc_start_request(host, mrq); in mmc_start_request()
323 mmc_hostname(card->host), err); in mmc_start_bkops()
334 mmc_claim_host(card->host); in mmc_start_bkops()
343 mmc_retune_hold(card->host); in mmc_start_bkops()
350 mmc_hostname(card->host), err); in mmc_start_bkops()
351 mmc_retune_release(card->host); in mmc_start_bkops()
363 mmc_retune_release(card->host); in mmc_start_bkops()
365 mmc_release_host(card->host); in mmc_start_bkops()
377 struct mmc_context_info *context_info = &mrq->host->context_info; in mmc_wait_data_done()
396 static int __mmc_start_data_req(struct mmc_host *host, struct mmc_request *mrq) in __mmc_start_data_req() argument
401 mrq->host = host; in __mmc_start_data_req()
403 err = mmc_start_request(host, mrq); in __mmc_start_data_req()
412 static int __mmc_start_req(struct mmc_host *host, struct mmc_request *mrq) in __mmc_start_req() argument
419 err = mmc_start_request(host, mrq); in __mmc_start_req()
439 static int mmc_wait_for_data_req_done(struct mmc_host *host, in mmc_wait_for_data_req_done() argument
444 struct mmc_context_info *context_info = &host->context_info; in mmc_wait_for_data_req_done()
461 mmc_card_removed(host->card)) { in mmc_wait_for_data_req_done()
462 err = host->areq->err_check(host->card, in mmc_wait_for_data_req_done()
463 host->areq); in mmc_wait_for_data_req_done()
466 mmc_retune_recheck(host); in mmc_wait_for_data_req_done()
468 mmc_hostname(host), in mmc_wait_for_data_req_done()
472 __mmc_start_request(host, mrq); in mmc_wait_for_data_req_done()
481 mmc_retune_release(host); in mmc_wait_for_data_req_done()
485 static void mmc_wait_for_req_done(struct mmc_host *host, in mmc_wait_for_req_done() argument
502 if (!mmc_interrupt_hpi(host->card)) { in mmc_wait_for_req_done()
504 mmc_hostname(host), __func__); in mmc_wait_for_req_done()
509 mmc_hostname(host), __func__); in mmc_wait_for_req_done()
513 mmc_card_removed(host->card)) in mmc_wait_for_req_done()
516 mmc_retune_recheck(host); in mmc_wait_for_req_done()
519 mmc_hostname(host), cmd->opcode, cmd->error); in mmc_wait_for_req_done()
522 __mmc_start_request(host, mrq); in mmc_wait_for_req_done()
525 mmc_retune_release(host); in mmc_wait_for_req_done()
539 static void mmc_pre_req(struct mmc_host *host, struct mmc_request *mrq, in mmc_pre_req() argument
542 if (host->ops->pre_req) in mmc_pre_req()
543 host->ops->pre_req(host, mrq, is_first_req); in mmc_pre_req()
555 static void mmc_post_req(struct mmc_host *host, struct mmc_request *mrq, in mmc_post_req() argument
558 if (host->ops->post_req) in mmc_post_req()
559 host->ops->post_req(host, mrq, err); in mmc_post_req()
578 struct mmc_async_req *mmc_start_req(struct mmc_host *host, in mmc_start_req() argument
583 struct mmc_async_req *data = host->areq; in mmc_start_req()
587 mmc_pre_req(host, areq->mrq, !host->areq); in mmc_start_req()
589 if (host->areq) { in mmc_start_req()
590 err = mmc_wait_for_data_req_done(host, host->areq->mrq, areq); in mmc_start_req()
603 if (host->card && mmc_card_mmc(host->card) && in mmc_start_req()
604 ((mmc_resp_type(host->areq->mrq->cmd) == MMC_RSP_R1) || in mmc_start_req()
605 (mmc_resp_type(host->areq->mrq->cmd) == MMC_RSP_R1B)) && in mmc_start_req()
606 (host->areq->mrq->cmd->resp[0] & R1_EXCEPTION_EVENT)) { in mmc_start_req()
610 mmc_post_req(host, areq->mrq, -EINVAL); in mmc_start_req()
612 mmc_start_bkops(host->card, true); in mmc_start_req()
616 mmc_pre_req(host, areq->mrq, !host->areq); in mmc_start_req()
621 start_err = __mmc_start_data_req(host, areq->mrq); in mmc_start_req()
623 if (host->areq) in mmc_start_req()
624 mmc_post_req(host, host->areq->mrq, 0); in mmc_start_req()
628 mmc_post_req(host, areq->mrq, -EINVAL); in mmc_start_req()
631 host->areq = NULL; in mmc_start_req()
633 host->areq = areq; in mmc_start_req()
650 void mmc_wait_for_req(struct mmc_host *host, struct mmc_request *mrq) in mmc_wait_for_req() argument
652 __mmc_start_req(host, mrq); in mmc_wait_for_req()
653 mmc_wait_for_req_done(host, mrq); in mmc_wait_for_req()
673 pr_info("%s: HPI enable bit unset\n", mmc_hostname(card->host)); in mmc_interrupt_hpi()
677 mmc_claim_host(card->host); in mmc_interrupt_hpi()
680 pr_err("%s: Get card status fail\n", mmc_hostname(card->host)); in mmc_interrupt_hpi()
699 mmc_hostname(card->host), R1_CURRENT_STATE(status)); in mmc_interrupt_hpi()
719 mmc_release_host(card->host); in mmc_interrupt_hpi()
734 int mmc_wait_for_cmd(struct mmc_host *host, struct mmc_command *cmd, int retries) in mmc_wait_for_cmd() argument
738 WARN_ON(!host->claimed); in mmc_wait_for_cmd()
746 mmc_wait_for_req(host, &mrq); in mmc_wait_for_cmd()
775 mmc_retune_release(card->host); in mmc_stop_bkops()
788 mmc_claim_host(card->host); in mmc_read_bkops_status()
790 mmc_release_host(card->host); in mmc_read_bkops_status()
844 if (card->host->ios.clock) in mmc_set_data_timeout()
846 (card->host->ios.clock / 1000); in mmc_set_data_timeout()
891 if (mmc_host_is_spi(card->host)) { in mmc_set_data_timeout()
940 int __mmc_claim_host(struct mmc_host *host, atomic_t *abort) in __mmc_claim_host() argument
949 add_wait_queue(&host->wq, &wait); in __mmc_claim_host()
950 spin_lock_irqsave(&host->lock, flags); in __mmc_claim_host()
954 if (stop || !host->claimed || host->claimer == current) in __mmc_claim_host()
956 spin_unlock_irqrestore(&host->lock, flags); in __mmc_claim_host()
958 spin_lock_irqsave(&host->lock, flags); in __mmc_claim_host()
962 host->claimed = 1; in __mmc_claim_host()
963 host->claimer = current; in __mmc_claim_host()
964 host->claim_cnt += 1; in __mmc_claim_host()
965 if (host->claim_cnt == 1) in __mmc_claim_host()
968 wake_up(&host->wq); in __mmc_claim_host()
969 spin_unlock_irqrestore(&host->lock, flags); in __mmc_claim_host()
970 remove_wait_queue(&host->wq, &wait); in __mmc_claim_host()
973 pm_runtime_get_sync(mmc_dev(host)); in __mmc_claim_host()
986 void mmc_release_host(struct mmc_host *host) in mmc_release_host() argument
990 WARN_ON(!host->claimed); in mmc_release_host()
992 spin_lock_irqsave(&host->lock, flags); in mmc_release_host()
993 if (--host->claim_cnt) { in mmc_release_host()
995 spin_unlock_irqrestore(&host->lock, flags); in mmc_release_host()
997 host->claimed = 0; in mmc_release_host()
998 host->claimer = NULL; in mmc_release_host()
999 spin_unlock_irqrestore(&host->lock, flags); in mmc_release_host()
1000 wake_up(&host->wq); in mmc_release_host()
1001 pm_runtime_mark_last_busy(mmc_dev(host)); in mmc_release_host()
1002 pm_runtime_put_autosuspend(mmc_dev(host)); in mmc_release_host()
1014 mmc_claim_host(card->host); in mmc_get_card()
1024 mmc_release_host(card->host); in mmc_put_card()
1034 static inline void mmc_set_ios(struct mmc_host *host) in mmc_set_ios() argument
1036 struct mmc_ios *ios = &host->ios; in mmc_set_ios()
1040 mmc_hostname(host), ios->clock, ios->bus_mode, in mmc_set_ios()
1044 host->ops->set_ios(host, ios); in mmc_set_ios()
1050 void mmc_set_chip_select(struct mmc_host *host, int mode) in mmc_set_chip_select() argument
1052 host->ios.chip_select = mode; in mmc_set_chip_select()
1053 mmc_set_ios(host); in mmc_set_chip_select()
1060 void mmc_set_clock(struct mmc_host *host, unsigned int hz) in mmc_set_clock() argument
1062 WARN_ON(hz && hz < host->f_min); in mmc_set_clock()
1064 if (hz > host->f_max) in mmc_set_clock()
1065 hz = host->f_max; in mmc_set_clock()
1067 host->ios.clock = hz; in mmc_set_clock()
1068 mmc_set_ios(host); in mmc_set_clock()
1073 struct mmc_host *host = card->host; in mmc_execute_tuning() local
1077 if (!host->ops->execute_tuning) in mmc_execute_tuning()
1085 err = host->ops->execute_tuning(host, opcode); in mmc_execute_tuning()
1088 pr_err("%s: tuning execution failed\n", mmc_hostname(host)); in mmc_execute_tuning()
1090 mmc_retune_enable(host); in mmc_execute_tuning()
1098 void mmc_set_bus_mode(struct mmc_host *host, unsigned int mode) in mmc_set_bus_mode() argument
1100 host->ios.bus_mode = mode; in mmc_set_bus_mode()
1101 mmc_set_ios(host); in mmc_set_bus_mode()
1107 void mmc_set_bus_width(struct mmc_host *host, unsigned int width) in mmc_set_bus_width() argument
1109 host->ios.bus_width = width; in mmc_set_bus_width()
1110 mmc_set_ios(host); in mmc_set_bus_width()
1116 void mmc_set_initial_state(struct mmc_host *host) in mmc_set_initial_state() argument
1118 mmc_retune_disable(host); in mmc_set_initial_state()
1120 if (mmc_host_is_spi(host)) in mmc_set_initial_state()
1121 host->ios.chip_select = MMC_CS_HIGH; in mmc_set_initial_state()
1123 host->ios.chip_select = MMC_CS_DONTCARE; in mmc_set_initial_state()
1124 host->ios.bus_mode = MMC_BUSMODE_PUSHPULL; in mmc_set_initial_state()
1125 host->ios.bus_width = MMC_BUS_WIDTH_1; in mmc_set_initial_state()
1126 host->ios.timing = MMC_TIMING_LEGACY; in mmc_set_initial_state()
1127 host->ios.drv_type = 0; in mmc_set_initial_state()
1129 mmc_set_ios(host); in mmc_set_initial_state()
1261 struct device_node *mmc_of_find_child_device(struct mmc_host *host, in mmc_of_find_child_device() argument
1266 if (!host->parent || !host->parent->of_node) in mmc_of_find_child_device()
1269 for_each_child_of_node(host->parent->of_node, node) { in mmc_of_find_child_device()
1511 u32 mmc_select_voltage(struct mmc_host *host, u32 ocr) in mmc_select_voltage() argument
1520 dev_warn(mmc_dev(host), in mmc_select_voltage()
1525 ocr &= host->ocr_avail; in mmc_select_voltage()
1527 dev_warn(mmc_dev(host), "no support for card's volts\n"); in mmc_select_voltage()
1531 if (host->caps2 & MMC_CAP2_FULL_PWR_CYCLE) { in mmc_select_voltage()
1534 mmc_power_cycle(host, ocr); in mmc_select_voltage()
1538 if (bit != host->ios.vdd) in mmc_select_voltage()
1539 dev_warn(mmc_dev(host), "exceeding card's volts\n"); in mmc_select_voltage()
1545 int __mmc_set_signal_voltage(struct mmc_host *host, int signal_voltage) in __mmc_set_signal_voltage() argument
1548 int old_signal_voltage = host->ios.signal_voltage; in __mmc_set_signal_voltage()
1550 host->ios.signal_voltage = signal_voltage; in __mmc_set_signal_voltage()
1551 if (host->ops->start_signal_voltage_switch) in __mmc_set_signal_voltage()
1552 err = host->ops->start_signal_voltage_switch(host, &host->ios); in __mmc_set_signal_voltage()
1555 host->ios.signal_voltage = old_signal_voltage; in __mmc_set_signal_voltage()
1561 int mmc_set_signal_voltage(struct mmc_host *host, int signal_voltage, u32 ocr) in mmc_set_signal_voltage() argument
1567 BUG_ON(!host); in mmc_set_signal_voltage()
1574 return __mmc_set_signal_voltage(host, signal_voltage); in mmc_set_signal_voltage()
1580 if (!host->ops->start_signal_voltage_switch) in mmc_set_signal_voltage()
1582 if (!host->ops->card_busy) in mmc_set_signal_voltage()
1584 mmc_hostname(host)); in mmc_set_signal_voltage()
1590 err = mmc_wait_for_cmd(host, &cmd, 0); in mmc_set_signal_voltage()
1594 if (!mmc_host_is_spi(host) && (cmd.resp[0] & R1_ERROR)) in mmc_set_signal_voltage()
1602 if (host->ops->card_busy && !host->ops->card_busy(host)) { in mmc_set_signal_voltage()
1610 clock = host->ios.clock; in mmc_set_signal_voltage()
1611 host->ios.clock = 0; in mmc_set_signal_voltage()
1612 mmc_set_ios(host); in mmc_set_signal_voltage()
1614 if (__mmc_set_signal_voltage(host, signal_voltage)) { in mmc_set_signal_voltage()
1625 host->ios.clock = clock; in mmc_set_signal_voltage()
1626 mmc_set_ios(host); in mmc_set_signal_voltage()
1635 if (host->ops->card_busy && host->ops->card_busy(host)) in mmc_set_signal_voltage()
1641 "power cycling card\n", mmc_hostname(host)); in mmc_set_signal_voltage()
1642 mmc_power_cycle(host, ocr); in mmc_set_signal_voltage()
1651 void mmc_set_timing(struct mmc_host *host, unsigned int timing) in mmc_set_timing() argument
1653 host->ios.timing = timing; in mmc_set_timing()
1654 mmc_set_ios(host); in mmc_set_timing()
1660 void mmc_set_driver_type(struct mmc_host *host, unsigned int drv_type) in mmc_set_driver_type() argument
1662 host->ios.drv_type = drv_type; in mmc_set_driver_type()
1663 mmc_set_ios(host); in mmc_set_driver_type()
1669 struct mmc_host *host = card->host; in mmc_select_drive_strength() local
1674 if (!host->ops->select_drive_strength) in mmc_select_drive_strength()
1678 if (host->caps & MMC_CAP_DRIVER_TYPE_A) in mmc_select_drive_strength()
1681 if (host->caps & MMC_CAP_DRIVER_TYPE_C) in mmc_select_drive_strength()
1684 if (host->caps & MMC_CAP_DRIVER_TYPE_D) in mmc_select_drive_strength()
1693 return host->ops->select_drive_strength(card, max_dtr, in mmc_select_drive_strength()
1710 void mmc_power_up(struct mmc_host *host, u32 ocr) in mmc_power_up() argument
1712 if (host->ios.power_mode == MMC_POWER_ON) in mmc_power_up()
1715 mmc_pwrseq_pre_power_on(host); in mmc_power_up()
1717 host->ios.vdd = fls(ocr) - 1; in mmc_power_up()
1718 host->ios.power_mode = MMC_POWER_UP; in mmc_power_up()
1720 mmc_set_initial_state(host); in mmc_power_up()
1723 if (__mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_330) == 0) in mmc_power_up()
1724 dev_dbg(mmc_dev(host), "Initial signal voltage of 3.3v\n"); in mmc_power_up()
1725 else if (__mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_180) == 0) in mmc_power_up()
1726 dev_dbg(mmc_dev(host), "Initial signal voltage of 1.8v\n"); in mmc_power_up()
1727 else if (__mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_120) == 0) in mmc_power_up()
1728 dev_dbg(mmc_dev(host), "Initial signal voltage of 1.2v\n"); in mmc_power_up()
1736 mmc_pwrseq_post_power_on(host); in mmc_power_up()
1738 host->ios.clock = host->f_init; in mmc_power_up()
1740 host->ios.power_mode = MMC_POWER_ON; in mmc_power_up()
1741 mmc_set_ios(host); in mmc_power_up()
1750 void mmc_power_off(struct mmc_host *host) in mmc_power_off() argument
1752 if (host->ios.power_mode == MMC_POWER_OFF) in mmc_power_off()
1755 mmc_pwrseq_power_off(host); in mmc_power_off()
1757 host->ios.clock = 0; in mmc_power_off()
1758 host->ios.vdd = 0; in mmc_power_off()
1760 host->ios.power_mode = MMC_POWER_OFF; in mmc_power_off()
1762 mmc_set_initial_state(host); in mmc_power_off()
1772 void mmc_power_cycle(struct mmc_host *host, u32 ocr) in mmc_power_cycle() argument
1774 mmc_power_off(host); in mmc_power_cycle()
1777 mmc_power_up(host, ocr); in mmc_power_cycle()
1783 static void __mmc_release_bus(struct mmc_host *host) in __mmc_release_bus() argument
1785 BUG_ON(!host); in __mmc_release_bus()
1786 BUG_ON(host->bus_refs); in __mmc_release_bus()
1787 BUG_ON(!host->bus_dead); in __mmc_release_bus()
1789 host->bus_ops = NULL; in __mmc_release_bus()
1795 static inline void mmc_bus_get(struct mmc_host *host) in mmc_bus_get() argument
1799 spin_lock_irqsave(&host->lock, flags); in mmc_bus_get()
1800 host->bus_refs++; in mmc_bus_get()
1801 spin_unlock_irqrestore(&host->lock, flags); in mmc_bus_get()
1808 static inline void mmc_bus_put(struct mmc_host *host) in mmc_bus_put() argument
1812 spin_lock_irqsave(&host->lock, flags); in mmc_bus_put()
1813 host->bus_refs--; in mmc_bus_put()
1814 if ((host->bus_refs == 0) && host->bus_ops) in mmc_bus_put()
1815 __mmc_release_bus(host); in mmc_bus_put()
1816 spin_unlock_irqrestore(&host->lock, flags); in mmc_bus_put()
1823 void mmc_attach_bus(struct mmc_host *host, const struct mmc_bus_ops *ops) in mmc_attach_bus() argument
1827 BUG_ON(!host); in mmc_attach_bus()
1830 WARN_ON(!host->claimed); in mmc_attach_bus()
1832 spin_lock_irqsave(&host->lock, flags); in mmc_attach_bus()
1834 BUG_ON(host->bus_ops); in mmc_attach_bus()
1835 BUG_ON(host->bus_refs); in mmc_attach_bus()
1837 host->bus_ops = ops; in mmc_attach_bus()
1838 host->bus_refs = 1; in mmc_attach_bus()
1839 host->bus_dead = 0; in mmc_attach_bus()
1841 spin_unlock_irqrestore(&host->lock, flags); in mmc_attach_bus()
1847 void mmc_detach_bus(struct mmc_host *host) in mmc_detach_bus() argument
1851 BUG_ON(!host); in mmc_detach_bus()
1853 WARN_ON(!host->claimed); in mmc_detach_bus()
1854 WARN_ON(!host->bus_ops); in mmc_detach_bus()
1856 spin_lock_irqsave(&host->lock, flags); in mmc_detach_bus()
1858 host->bus_dead = 1; in mmc_detach_bus()
1860 spin_unlock_irqrestore(&host->lock, flags); in mmc_detach_bus()
1862 mmc_bus_put(host); in mmc_detach_bus()
1865 static void _mmc_detect_change(struct mmc_host *host, unsigned long delay, in _mmc_detect_change() argument
1870 spin_lock_irqsave(&host->lock, flags); in _mmc_detect_change()
1871 WARN_ON(host->removed); in _mmc_detect_change()
1872 spin_unlock_irqrestore(&host->lock, flags); in _mmc_detect_change()
1879 if (cd_irq && !(host->caps & MMC_CAP_NEEDS_POLL) && in _mmc_detect_change()
1880 device_can_wakeup(mmc_dev(host))) in _mmc_detect_change()
1881 pm_wakeup_event(mmc_dev(host), 5000); in _mmc_detect_change()
1883 host->detect_change = 1; in _mmc_detect_change()
1884 mmc_schedule_delayed_work(&host->detect, delay); in _mmc_detect_change()
1897 void mmc_detect_change(struct mmc_host *host, unsigned long delay) in mmc_detect_change() argument
1899 _mmc_detect_change(host, delay, true); in mmc_detect_change()
1985 (card->host->ios.clock / 1000); in mmc_mmc_erase_timeout()
2011 if (mmc_host_is_spi(card->host) && erase_timeout < 1000) in mmc_mmc_erase_timeout()
2060 mmc_retune_hold(card->host); in mmc_do_erase()
2098 err = mmc_wait_for_cmd(card->host, &cmd, 0); in mmc_do_erase()
2113 err = mmc_wait_for_cmd(card->host, &cmd, 0); in mmc_do_erase()
2126 err = mmc_wait_for_cmd(card->host, &cmd, 0); in mmc_do_erase()
2134 if (mmc_host_is_spi(card->host)) in mmc_do_erase()
2144 err = mmc_wait_for_cmd(card->host, &cmd, 0); in mmc_do_erase()
2157 mmc_hostname(card->host), __func__); in mmc_do_erase()
2165 mmc_retune_release(card->host); in mmc_do_erase()
2184 if (!(card->host->caps & MMC_CAP_ERASE) || in mmc_erase()
2255 if ((card->host->caps & MMC_CAP_ERASE) && in mmc_can_erase()
2316 struct mmc_host *host = card->host; in mmc_do_calc_max_discard() local
2332 if (timeout > host->max_busy_timeout) in mmc_do_calc_max_discard()
2373 struct mmc_host *host = card->host; in mmc_calc_max_discard() local
2376 if (!host->max_busy_timeout) in mmc_calc_max_discard()
2396 mmc_hostname(host), max_discard, host->max_busy_timeout); in mmc_calc_max_discard()
2411 return mmc_wait_for_cmd(card->host, &cmd, 5); in mmc_set_blocklen()
2425 return mmc_wait_for_cmd(card->host, &cmd, 5); in mmc_set_blockcount()
2429 static void mmc_hw_reset_for_init(struct mmc_host *host) in mmc_hw_reset_for_init() argument
2431 if (!(host->caps & MMC_CAP_HW_RESET) || !host->ops->hw_reset) in mmc_hw_reset_for_init()
2433 host->ops->hw_reset(host); in mmc_hw_reset_for_init()
2436 int mmc_hw_reset(struct mmc_host *host) in mmc_hw_reset() argument
2440 if (!host->card) in mmc_hw_reset()
2443 mmc_bus_get(host); in mmc_hw_reset()
2444 if (!host->bus_ops || host->bus_dead || !host->bus_ops->reset) { in mmc_hw_reset()
2445 mmc_bus_put(host); in mmc_hw_reset()
2449 ret = host->bus_ops->reset(host); in mmc_hw_reset()
2450 mmc_bus_put(host); in mmc_hw_reset()
2453 pr_warn("%s: tried to reset card\n", mmc_hostname(host)); in mmc_hw_reset()
2459 static int mmc_rescan_try_freq(struct mmc_host *host, unsigned freq) in mmc_rescan_try_freq() argument
2461 host->f_init = freq; in mmc_rescan_try_freq()
2465 mmc_hostname(host), __func__, host->f_init); in mmc_rescan_try_freq()
2467 mmc_power_up(host, host->ocr_avail); in mmc_rescan_try_freq()
2473 mmc_hw_reset_for_init(host); in mmc_rescan_try_freq()
2480 sdio_reset(host); in mmc_rescan_try_freq()
2481 mmc_go_idle(host); in mmc_rescan_try_freq()
2483 mmc_send_if_cond(host, host->ocr_avail); in mmc_rescan_try_freq()
2486 if (!mmc_attach_sdio(host)) in mmc_rescan_try_freq()
2488 if (!mmc_attach_sd(host)) in mmc_rescan_try_freq()
2490 if (!mmc_attach_mmc(host)) in mmc_rescan_try_freq()
2493 mmc_power_off(host); in mmc_rescan_try_freq()
2497 int _mmc_detect_card_removed(struct mmc_host *host) in _mmc_detect_card_removed() argument
2501 if (host->caps & MMC_CAP_NONREMOVABLE) in _mmc_detect_card_removed()
2504 if (!host->card || mmc_card_removed(host->card)) in _mmc_detect_card_removed()
2507 ret = host->bus_ops->alive(host); in _mmc_detect_card_removed()
2516 if (!ret && host->ops->get_cd && !host->ops->get_cd(host)) { in _mmc_detect_card_removed()
2517 mmc_detect_change(host, msecs_to_jiffies(200)); in _mmc_detect_card_removed()
2518 pr_debug("%s: card removed too slowly\n", mmc_hostname(host)); in _mmc_detect_card_removed()
2522 mmc_card_set_removed(host->card); in _mmc_detect_card_removed()
2523 pr_debug("%s: card remove detected\n", mmc_hostname(host)); in _mmc_detect_card_removed()
2529 int mmc_detect_card_removed(struct mmc_host *host) in mmc_detect_card_removed() argument
2531 struct mmc_card *card = host->card; in mmc_detect_card_removed()
2534 WARN_ON(!host->claimed); in mmc_detect_card_removed()
2544 if (!host->detect_change && !(host->caps & MMC_CAP_NEEDS_POLL)) in mmc_detect_card_removed()
2547 host->detect_change = 0; in mmc_detect_card_removed()
2549 ret = _mmc_detect_card_removed(host); in mmc_detect_card_removed()
2550 if (ret && (host->caps & MMC_CAP_NEEDS_POLL)) { in mmc_detect_card_removed()
2555 cancel_delayed_work(&host->detect); in mmc_detect_card_removed()
2556 _mmc_detect_change(host, 0, false); in mmc_detect_card_removed()
2566 struct mmc_host *host = in mmc_rescan() local
2570 if (host->trigger_card_event && host->ops->card_event) { in mmc_rescan()
2571 host->ops->card_event(host); in mmc_rescan()
2572 host->trigger_card_event = false; in mmc_rescan()
2575 if (host->rescan_disable) in mmc_rescan()
2579 if ((host->caps & MMC_CAP_NONREMOVABLE) && host->rescan_entered) in mmc_rescan()
2581 host->rescan_entered = 1; in mmc_rescan()
2583 mmc_bus_get(host); in mmc_rescan()
2589 if (host->bus_ops && !host->bus_dead in mmc_rescan()
2590 && !(host->caps & MMC_CAP_NONREMOVABLE)) in mmc_rescan()
2591 host->bus_ops->detect(host); in mmc_rescan()
2593 host->detect_change = 0; in mmc_rescan()
2599 mmc_bus_put(host); in mmc_rescan()
2600 mmc_bus_get(host); in mmc_rescan()
2603 if (host->bus_ops != NULL) { in mmc_rescan()
2604 mmc_bus_put(host); in mmc_rescan()
2612 mmc_bus_put(host); in mmc_rescan()
2614 if (!(host->caps & MMC_CAP_NONREMOVABLE) && host->ops->get_cd && in mmc_rescan()
2615 host->ops->get_cd(host) == 0) { in mmc_rescan()
2616 mmc_claim_host(host); in mmc_rescan()
2617 mmc_power_off(host); in mmc_rescan()
2618 mmc_release_host(host); in mmc_rescan()
2622 mmc_claim_host(host); in mmc_rescan()
2624 if (!mmc_rescan_try_freq(host, max(freqs[i], host->f_min))) in mmc_rescan()
2626 if (freqs[i] <= host->f_min) in mmc_rescan()
2629 mmc_release_host(host); in mmc_rescan()
2632 if (host->caps & MMC_CAP_NEEDS_POLL) in mmc_rescan()
2633 mmc_schedule_delayed_work(&host->detect, HZ); in mmc_rescan()
2636 void mmc_start_host(struct mmc_host *host) in mmc_start_host() argument
2638 host->f_init = max(freqs[0], host->f_min); in mmc_start_host()
2639 host->rescan_disable = 0; in mmc_start_host()
2640 host->ios.power_mode = MMC_POWER_UNDEFINED; in mmc_start_host()
2642 mmc_claim_host(host); in mmc_start_host()
2643 if (host->caps2 & MMC_CAP2_NO_PRESCAN_POWERUP) in mmc_start_host()
2644 mmc_power_off(host); in mmc_start_host()
2646 mmc_power_up(host, host->ocr_avail); in mmc_start_host()
2647 mmc_release_host(host); in mmc_start_host()
2649 mmc_gpiod_request_cd_irq(host); in mmc_start_host()
2650 _mmc_detect_change(host, 0, false); in mmc_start_host()
2653 void mmc_stop_host(struct mmc_host *host) in mmc_stop_host() argument
2657 spin_lock_irqsave(&host->lock, flags); in mmc_stop_host()
2658 host->removed = 1; in mmc_stop_host()
2659 spin_unlock_irqrestore(&host->lock, flags); in mmc_stop_host()
2661 if (host->slot.cd_irq >= 0) in mmc_stop_host()
2662 disable_irq(host->slot.cd_irq); in mmc_stop_host()
2664 host->rescan_disable = 1; in mmc_stop_host()
2665 cancel_delayed_work_sync(&host->detect); in mmc_stop_host()
2669 host->pm_flags = 0; in mmc_stop_host()
2671 mmc_bus_get(host); in mmc_stop_host()
2672 if (host->bus_ops && !host->bus_dead) { in mmc_stop_host()
2674 host->bus_ops->remove(host); in mmc_stop_host()
2675 mmc_claim_host(host); in mmc_stop_host()
2676 mmc_detach_bus(host); in mmc_stop_host()
2677 mmc_power_off(host); in mmc_stop_host()
2678 mmc_release_host(host); in mmc_stop_host()
2679 mmc_bus_put(host); in mmc_stop_host()
2682 mmc_bus_put(host); in mmc_stop_host()
2684 BUG_ON(host->card); in mmc_stop_host()
2686 mmc_claim_host(host); in mmc_stop_host()
2687 mmc_power_off(host); in mmc_stop_host()
2688 mmc_release_host(host); in mmc_stop_host()
2691 int mmc_power_save_host(struct mmc_host *host) in mmc_power_save_host() argument
2696 pr_info("%s: %s: powering down\n", mmc_hostname(host), __func__); in mmc_power_save_host()
2699 mmc_bus_get(host); in mmc_power_save_host()
2701 if (!host->bus_ops || host->bus_dead) { in mmc_power_save_host()
2702 mmc_bus_put(host); in mmc_power_save_host()
2706 if (host->bus_ops->power_save) in mmc_power_save_host()
2707 ret = host->bus_ops->power_save(host); in mmc_power_save_host()
2709 mmc_bus_put(host); in mmc_power_save_host()
2711 mmc_power_off(host); in mmc_power_save_host()
2717 int mmc_power_restore_host(struct mmc_host *host) in mmc_power_restore_host() argument
2722 pr_info("%s: %s: powering up\n", mmc_hostname(host), __func__); in mmc_power_restore_host()
2725 mmc_bus_get(host); in mmc_power_restore_host()
2727 if (!host->bus_ops || host->bus_dead) { in mmc_power_restore_host()
2728 mmc_bus_put(host); in mmc_power_restore_host()
2732 mmc_power_up(host, host->card->ocr); in mmc_power_restore_host()
2733 ret = host->bus_ops->power_restore(host); in mmc_power_restore_host()
2735 mmc_bus_put(host); in mmc_power_restore_host()
2755 mmc_hostname(card->host), err); in mmc_flush_cache()
2771 struct mmc_host *host = container_of( in mmc_pm_notify() local
2780 spin_lock_irqsave(&host->lock, flags); in mmc_pm_notify()
2781 host->rescan_disable = 1; in mmc_pm_notify()
2782 spin_unlock_irqrestore(&host->lock, flags); in mmc_pm_notify()
2783 cancel_delayed_work_sync(&host->detect); in mmc_pm_notify()
2785 if (!host->bus_ops) in mmc_pm_notify()
2789 if (host->bus_ops->pre_suspend) in mmc_pm_notify()
2790 err = host->bus_ops->pre_suspend(host); in mmc_pm_notify()
2795 host->bus_ops->remove(host); in mmc_pm_notify()
2796 mmc_claim_host(host); in mmc_pm_notify()
2797 mmc_detach_bus(host); in mmc_pm_notify()
2798 mmc_power_off(host); in mmc_pm_notify()
2799 mmc_release_host(host); in mmc_pm_notify()
2800 host->pm_flags = 0; in mmc_pm_notify()
2807 spin_lock_irqsave(&host->lock, flags); in mmc_pm_notify()
2808 host->rescan_disable = 0; in mmc_pm_notify()
2809 spin_unlock_irqrestore(&host->lock, flags); in mmc_pm_notify()
2810 _mmc_detect_change(host, 0, false); in mmc_pm_notify()
2826 void mmc_init_context_info(struct mmc_host *host) in mmc_init_context_info() argument
2828 spin_lock_init(&host->context_info.lock); in mmc_init_context_info()
2829 host->context_info.is_new_req = false; in mmc_init_context_info()
2830 host->context_info.is_done_rcv = false; in mmc_init_context_info()
2831 host->context_info.is_waiting_last_req = false; in mmc_init_context_info()
2832 init_waitqueue_head(&host->context_info.wait); in mmc_init_context_info()