sdhci.c (db985cbd67c45f875ef43cb5febfaa8cbd203c27) | sdhci.c (6606110d89aefcb21b9e70adfe064987cbd8393a) |
---|---|
1/* 2 * linux/drivers/mmc/host/sdhci.c - Secure Digital Host Controller Interface driver 3 * 4 * Copyright (C) 2005-2008 Pierre Ossman, All Rights Reserved. 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or (at --- 693 unchanged lines hidden (view full) --- 702 host->ier = (host->ier & ~pio_irqs) | dma_irqs; 703 else 704 host->ier = (host->ier & ~dma_irqs) | pio_irqs; 705 706 sdhci_writel(host, host->ier, SDHCI_INT_ENABLE); 707 sdhci_writel(host, host->ier, SDHCI_SIGNAL_ENABLE); 708} 709 | 1/* 2 * linux/drivers/mmc/host/sdhci.c - Secure Digital Host Controller Interface driver 3 * 4 * Copyright (C) 2005-2008 Pierre Ossman, All Rights Reserved. 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or (at --- 693 unchanged lines hidden (view full) --- 702 host->ier = (host->ier & ~pio_irqs) | dma_irqs; 703 else 704 host->ier = (host->ier & ~dma_irqs) | pio_irqs; 705 706 sdhci_writel(host, host->ier, SDHCI_INT_ENABLE); 707 sdhci_writel(host, host->ier, SDHCI_SIGNAL_ENABLE); 708} 709 |
710static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_command *cmd) | 710static void sdhci_set_timeout(struct sdhci_host *host, struct mmc_command *cmd) |
711{ 712 u8 count; | 711{ 712 u8 count; |
713 714 if (host->ops->set_timeout) { 715 host->ops->set_timeout(host, cmd); 716 } else { 717 count = sdhci_calc_timeout(host, cmd); 718 sdhci_writeb(host, count, SDHCI_TIMEOUT_CONTROL); 719 } 720} 721 722static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_command *cmd) 723{ |
|
713 u8 ctrl; 714 struct mmc_data *data = cmd->data; 715 int ret; 716 717 WARN_ON(host->data); 718 | 724 u8 ctrl; 725 struct mmc_data *data = cmd->data; 726 int ret; 727 728 WARN_ON(host->data); 729 |
719 if (data || (cmd->flags & MMC_RSP_BUSY)) { 720 count = sdhci_calc_timeout(host, cmd); 721 sdhci_writeb(host, count, SDHCI_TIMEOUT_CONTROL); 722 } | 730 if (data || (cmd->flags & MMC_RSP_BUSY)) 731 sdhci_set_timeout(host, cmd); |
723 724 if (!data) 725 return; 726 727 /* Sanity checks */ 728 BUG_ON(data->blksz * data->blocks > 524288); 729 BUG_ON(data->blksz > host->mmc->max_blk_size); 730 BUG_ON(data->blocks > 65535); --- 271 unchanged lines hidden (view full) --- 1002 timeout = jiffies; 1003 if (!cmd->data && cmd->busy_timeout > 9000) 1004 timeout += DIV_ROUND_UP(cmd->busy_timeout, 1000) * HZ + HZ; 1005 else 1006 timeout += 10 * HZ; 1007 mod_timer(&host->timer, timeout); 1008 1009 host->cmd = cmd; | 732 733 if (!data) 734 return; 735 736 /* Sanity checks */ 737 BUG_ON(data->blksz * data->blocks > 524288); 738 BUG_ON(data->blksz > host->mmc->max_blk_size); 739 BUG_ON(data->blocks > 65535); --- 271 unchanged lines hidden (view full) --- 1011 timeout = jiffies; 1012 if (!cmd->data && cmd->busy_timeout > 9000) 1013 timeout += DIV_ROUND_UP(cmd->busy_timeout, 1000) * HZ + HZ; 1014 else 1015 timeout += 10 * HZ; 1016 mod_timer(&host->timer, timeout); 1017 1018 host->cmd = cmd; |
1019 host->busy_handle = 0; |
|
1010 1011 sdhci_prepare_data(host, cmd); 1012 1013 sdhci_writel(host, cmd->arg, SDHCI_ARGUMENT); 1014 1015 sdhci_set_transfer_mode(host, cmd); 1016 1017 if ((cmd->flags & MMC_RSP_136) && (cmd->flags & MMC_RSP_BUSY)) { --- 171 unchanged lines hidden (view full) --- 1189 } 1190 real_div = div; 1191 div >>= 1; 1192 } 1193 1194clock_set: 1195 if (real_div) 1196 host->mmc->actual_clock = (host->max_clk * clk_mul) / real_div; | 1020 1021 sdhci_prepare_data(host, cmd); 1022 1023 sdhci_writel(host, cmd->arg, SDHCI_ARGUMENT); 1024 1025 sdhci_set_transfer_mode(host, cmd); 1026 1027 if ((cmd->flags & MMC_RSP_136) && (cmd->flags & MMC_RSP_BUSY)) { --- 171 unchanged lines hidden (view full) --- 1199 } 1200 real_div = div; 1201 div >>= 1; 1202 } 1203 1204clock_set: 1205 if (real_div) 1206 host->mmc->actual_clock = (host->max_clk * clk_mul) / real_div; |
1197 | |
1198 clk |= (div & SDHCI_DIV_MASK) << SDHCI_DIVIDER_SHIFT; 1199 clk |= ((div & SDHCI_DIV_HI_MASK) >> SDHCI_DIV_MASK_LEN) 1200 << SDHCI_DIVIDER_HI_SHIFT; 1201 clk |= SDHCI_CLOCK_INT_EN; 1202 sdhci_writew(host, clk, SDHCI_CLOCK_CONTROL); 1203 1204 /* Wait max 20 ms */ 1205 timeout = 20; --- 260 unchanged lines hidden (view full) --- 1466 if (host->version >= SDHCI_SPEC_300 && 1467 (ios->power_mode == MMC_POWER_UP) && 1468 !(host->quirks2 & SDHCI_QUIRK2_PRESET_VALUE_BROKEN)) 1469 sdhci_enable_preset_value(host, false); 1470 1471 if (!ios->clock || ios->clock != host->clock) { 1472 host->ops->set_clock(host, ios->clock); 1473 host->clock = ios->clock; | 1207 clk |= (div & SDHCI_DIV_MASK) << SDHCI_DIVIDER_SHIFT; 1208 clk |= ((div & SDHCI_DIV_HI_MASK) >> SDHCI_DIV_MASK_LEN) 1209 << SDHCI_DIVIDER_HI_SHIFT; 1210 clk |= SDHCI_CLOCK_INT_EN; 1211 sdhci_writew(host, clk, SDHCI_CLOCK_CONTROL); 1212 1213 /* Wait max 20 ms */ 1214 timeout = 20; --- 260 unchanged lines hidden (view full) --- 1475 if (host->version >= SDHCI_SPEC_300 && 1476 (ios->power_mode == MMC_POWER_UP) && 1477 !(host->quirks2 & SDHCI_QUIRK2_PRESET_VALUE_BROKEN)) 1478 sdhci_enable_preset_value(host, false); 1479 1480 if (!ios->clock || ios->clock != host->clock) { 1481 host->ops->set_clock(host, ios->clock); 1482 host->clock = ios->clock; |
1483 1484 if (host->quirks & SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK && 1485 host->clock) { 1486 host->timeout_clk = host->mmc->actual_clock ? 1487 host->mmc->actual_clock / 1000 : 1488 host->clock / 1000; 1489 host->mmc->max_busy_timeout = 1490 host->ops->get_max_timeout_count ? 1491 host->ops->get_max_timeout_count(host) : 1492 1 << 27; 1493 host->mmc->max_busy_timeout /= host->timeout_clk; 1494 } |
|
1474 } 1475 1476 sdhci_set_power(host, ios->power_mode, ios->vdd); 1477 1478 if (host->ops->platform_send_init_74_clocks) 1479 host->ops->platform_send_init_74_clocks(host, ios->power_mode); 1480 1481 host->ops->set_bus_width(host, ios->bus_width); --- 246 unchanged lines hidden (view full) --- 1728 /* Set 1.8V Signal Enable in the Host Control2 register to 0 */ 1729 ctrl &= ~SDHCI_CTRL_VDD_180; 1730 sdhci_writew(host, ctrl, SDHCI_HOST_CONTROL2); 1731 1732 if (!IS_ERR(mmc->supply.vqmmc)) { 1733 ret = regulator_set_voltage(mmc->supply.vqmmc, 2700000, 1734 3600000); 1735 if (ret) { | 1495 } 1496 1497 sdhci_set_power(host, ios->power_mode, ios->vdd); 1498 1499 if (host->ops->platform_send_init_74_clocks) 1500 host->ops->platform_send_init_74_clocks(host, ios->power_mode); 1501 1502 host->ops->set_bus_width(host, ios->bus_width); --- 246 unchanged lines hidden (view full) --- 1749 /* Set 1.8V Signal Enable in the Host Control2 register to 0 */ 1750 ctrl &= ~SDHCI_CTRL_VDD_180; 1751 sdhci_writew(host, ctrl, SDHCI_HOST_CONTROL2); 1752 1753 if (!IS_ERR(mmc->supply.vqmmc)) { 1754 ret = regulator_set_voltage(mmc->supply.vqmmc, 2700000, 1755 3600000); 1756 if (ret) { |
1736 pr_warning("%s: Switching to 3.3V signalling voltage " 1737 " failed\n", mmc_hostname(mmc)); | 1757 pr_warn("%s: Switching to 3.3V signalling voltage failed\n", 1758 mmc_hostname(mmc)); |
1738 return -EIO; 1739 } 1740 } 1741 /* Wait for 5ms */ 1742 usleep_range(5000, 5500); 1743 1744 /* 3.3V regulator output should be stable within 5 ms */ 1745 ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2); 1746 if (!(ctrl & SDHCI_CTRL_VDD_180)) 1747 return 0; 1748 | 1759 return -EIO; 1760 } 1761 } 1762 /* Wait for 5ms */ 1763 usleep_range(5000, 5500); 1764 1765 /* 3.3V regulator output should be stable within 5 ms */ 1766 ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2); 1767 if (!(ctrl & SDHCI_CTRL_VDD_180)) 1768 return 0; 1769 |
1749 pr_warning("%s: 3.3V regulator output did not became stable\n", 1750 mmc_hostname(mmc)); | 1770 pr_warn("%s: 3.3V regulator output did not became stable\n", 1771 mmc_hostname(mmc)); |
1751 1752 return -EAGAIN; 1753 case MMC_SIGNAL_VOLTAGE_180: 1754 if (!IS_ERR(mmc->supply.vqmmc)) { 1755 ret = regulator_set_voltage(mmc->supply.vqmmc, 1756 1700000, 1950000); 1757 if (ret) { | 1772 1773 return -EAGAIN; 1774 case MMC_SIGNAL_VOLTAGE_180: 1775 if (!IS_ERR(mmc->supply.vqmmc)) { 1776 ret = regulator_set_voltage(mmc->supply.vqmmc, 1777 1700000, 1950000); 1778 if (ret) { |
1758 pr_warning("%s: Switching to 1.8V signalling voltage " 1759 " failed\n", mmc_hostname(mmc)); | 1779 pr_warn("%s: Switching to 1.8V signalling voltage failed\n", 1780 mmc_hostname(mmc)); |
1760 return -EIO; 1761 } 1762 } 1763 1764 /* 1765 * Enable 1.8V Signal Enable in the Host Control2 1766 * register 1767 */ 1768 ctrl |= SDHCI_CTRL_VDD_180; 1769 sdhci_writew(host, ctrl, SDHCI_HOST_CONTROL2); 1770 1771 /* 1.8V regulator output should be stable within 5 ms */ 1772 ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2); 1773 if (ctrl & SDHCI_CTRL_VDD_180) 1774 return 0; 1775 | 1781 return -EIO; 1782 } 1783 } 1784 1785 /* 1786 * Enable 1.8V Signal Enable in the Host Control2 1787 * register 1788 */ 1789 ctrl |= SDHCI_CTRL_VDD_180; 1790 sdhci_writew(host, ctrl, SDHCI_HOST_CONTROL2); 1791 1792 /* 1.8V regulator output should be stable within 5 ms */ 1793 ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2); 1794 if (ctrl & SDHCI_CTRL_VDD_180) 1795 return 0; 1796 |
1776 pr_warning("%s: 1.8V regulator output did not became stable\n", 1777 mmc_hostname(mmc)); | 1797 pr_warn("%s: 1.8V regulator output did not became stable\n", 1798 mmc_hostname(mmc)); |
1778 1779 return -EAGAIN; 1780 case MMC_SIGNAL_VOLTAGE_120: 1781 if (!IS_ERR(mmc->supply.vqmmc)) { 1782 ret = regulator_set_voltage(mmc->supply.vqmmc, 1100000, 1783 1300000); 1784 if (ret) { | 1799 1800 return -EAGAIN; 1801 case MMC_SIGNAL_VOLTAGE_120: 1802 if (!IS_ERR(mmc->supply.vqmmc)) { 1803 ret = regulator_set_voltage(mmc->supply.vqmmc, 1100000, 1804 1300000); 1805 if (ret) { |
1785 pr_warning("%s: Switching to 1.2V signalling voltage " 1786 " failed\n", mmc_hostname(mmc)); | 1806 pr_warn("%s: Switching to 1.2V signalling voltage failed\n", 1807 mmc_hostname(mmc)); |
1787 return -EIO; 1788 } 1789 } 1790 return 0; 1791 default: 1792 /* No signal voltage switch required */ 1793 return 0; 1794 } --- 441 unchanged lines hidden (view full) --- 2236 * Note: The 1.0 specification is a bit ambiguous about this 2237 * feature so there might be some problems with older 2238 * controllers. 2239 */ 2240 if (host->cmd->flags & MMC_RSP_BUSY) { 2241 if (host->cmd->data) 2242 DBG("Cannot wait for busy signal when also " 2243 "doing a data transfer"); | 1808 return -EIO; 1809 } 1810 } 1811 return 0; 1812 default: 1813 /* No signal voltage switch required */ 1814 return 0; 1815 } --- 441 unchanged lines hidden (view full) --- 2257 * Note: The 1.0 specification is a bit ambiguous about this 2258 * feature so there might be some problems with older 2259 * controllers. 2260 */ 2261 if (host->cmd->flags & MMC_RSP_BUSY) { 2262 if (host->cmd->data) 2263 DBG("Cannot wait for busy signal when also " 2264 "doing a data transfer"); |
2244 else if (!(host->quirks & SDHCI_QUIRK_NO_BUSY_IRQ)) | 2265 else if (!(host->quirks & SDHCI_QUIRK_NO_BUSY_IRQ) 2266 && !host->busy_handle) { 2267 /* Mark that command complete before busy is ended */ 2268 host->busy_handle = 1; |
2245 return; | 2269 return; |
2270 } |
|
2246 2247 /* The controller does not support the end-of-busy IRQ, 2248 * fall through and take the SDHCI_INT_RESPONSE */ 2249 } 2250 2251 if (intmask & SDHCI_INT_RESPONSE) 2252 sdhci_finish_command(host); 2253} --- 45 unchanged lines hidden (view full) --- 2299 2300 if (!host->data) { 2301 /* 2302 * The "data complete" interrupt is also used to 2303 * indicate that a busy state has ended. See comment 2304 * above in sdhci_cmd_irq(). 2305 */ 2306 if (host->cmd && (host->cmd->flags & MMC_RSP_BUSY)) { | 2271 2272 /* The controller does not support the end-of-busy IRQ, 2273 * fall through and take the SDHCI_INT_RESPONSE */ 2274 } 2275 2276 if (intmask & SDHCI_INT_RESPONSE) 2277 sdhci_finish_command(host); 2278} --- 45 unchanged lines hidden (view full) --- 2324 2325 if (!host->data) { 2326 /* 2327 * The "data complete" interrupt is also used to 2328 * indicate that a busy state has ended. See comment 2329 * above in sdhci_cmd_irq(). 2330 */ 2331 if (host->cmd && (host->cmd->flags & MMC_RSP_BUSY)) { |
2332 if (intmask & SDHCI_INT_DATA_TIMEOUT) { 2333 host->cmd->error = -ETIMEDOUT; 2334 tasklet_schedule(&host->finish_tasklet); 2335 return; 2336 } |
|
2307 if (intmask & SDHCI_INT_DATA_END) { | 2337 if (intmask & SDHCI_INT_DATA_END) { |
2308 sdhci_finish_command(host); | 2338 /* 2339 * Some cards handle busy-end interrupt 2340 * before the command completed, so make 2341 * sure we do things in the proper order. 2342 */ 2343 if (host->busy_handle) 2344 sdhci_finish_command(host); 2345 else 2346 host->busy_handle = 1; |
2309 return; 2310 } 2311 } 2312 2313 pr_err("%s: Got data interrupt 0x%08x even " 2314 "though no data operation was in progress.\n", 2315 mmc_hostname(host->mmc), (unsigned)intmask); 2316 sdhci_dumpregs(host); --- 212 unchanged lines hidden (view full) --- 2529 val |= mask ; 2530 /* Avoid fake wake up */ 2531 if (host->quirks & SDHCI_QUIRK_BROKEN_CARD_DETECTION) 2532 val &= ~(SDHCI_WAKE_ON_INSERT | SDHCI_WAKE_ON_REMOVE); 2533 sdhci_writeb(host, val, SDHCI_WAKE_UP_CONTROL); 2534} 2535EXPORT_SYMBOL_GPL(sdhci_enable_irq_wakeups); 2536 | 2347 return; 2348 } 2349 } 2350 2351 pr_err("%s: Got data interrupt 0x%08x even " 2352 "though no data operation was in progress.\n", 2353 mmc_hostname(host->mmc), (unsigned)intmask); 2354 sdhci_dumpregs(host); --- 212 unchanged lines hidden (view full) --- 2567 val |= mask ; 2568 /* Avoid fake wake up */ 2569 if (host->quirks & SDHCI_QUIRK_BROKEN_CARD_DETECTION) 2570 val &= ~(SDHCI_WAKE_ON_INSERT | SDHCI_WAKE_ON_REMOVE); 2571 sdhci_writeb(host, val, SDHCI_WAKE_UP_CONTROL); 2572} 2573EXPORT_SYMBOL_GPL(sdhci_enable_irq_wakeups); 2574 |
2537void sdhci_disable_irq_wakeups(struct sdhci_host *host) | 2575static void sdhci_disable_irq_wakeups(struct sdhci_host *host) |
2538{ 2539 u8 val; 2540 u8 mask = SDHCI_WAKE_ON_INSERT | SDHCI_WAKE_ON_REMOVE 2541 | SDHCI_WAKE_ON_INT; 2542 2543 val = sdhci_readb(host, SDHCI_WAKE_UP_CONTROL); 2544 val &= ~mask; 2545 sdhci_writeb(host, val, SDHCI_WAKE_UP_CONTROL); 2546} | 2576{ 2577 u8 val; 2578 u8 mask = SDHCI_WAKE_ON_INSERT | SDHCI_WAKE_ON_REMOVE 2579 | SDHCI_WAKE_ON_INT; 2580 2581 val = sdhci_readb(host, SDHCI_WAKE_UP_CONTROL); 2582 val &= ~mask; 2583 sdhci_writeb(host, val, SDHCI_WAKE_UP_CONTROL); 2584} |
2547EXPORT_SYMBOL_GPL(sdhci_disable_irq_wakeups); | |
2548 2549int sdhci_suspend_host(struct sdhci_host *host) 2550{ 2551 sdhci_disable_card_detection(host); 2552 2553 /* Disable tuning since we are suspending */ 2554 if (host->flags & SDHCI_USING_RETUNING_TIMER) { 2555 del_timer_sync(&host->tuning_timer); --- 246 unchanged lines hidden (view full) --- 2802 (host->flags & SDHCI_USE_ADMA)) { 2803 DBG("Disabling ADMA as it is marked broken\n"); 2804 host->flags &= ~SDHCI_USE_ADMA; 2805 } 2806 2807 if (host->flags & (SDHCI_USE_SDMA | SDHCI_USE_ADMA)) { 2808 if (host->ops->enable_dma) { 2809 if (host->ops->enable_dma(host)) { | 2585 2586int sdhci_suspend_host(struct sdhci_host *host) 2587{ 2588 sdhci_disable_card_detection(host); 2589 2590 /* Disable tuning since we are suspending */ 2591 if (host->flags & SDHCI_USING_RETUNING_TIMER) { 2592 del_timer_sync(&host->tuning_timer); --- 246 unchanged lines hidden (view full) --- 2839 (host->flags & SDHCI_USE_ADMA)) { 2840 DBG("Disabling ADMA as it is marked broken\n"); 2841 host->flags &= ~SDHCI_USE_ADMA; 2842 } 2843 2844 if (host->flags & (SDHCI_USE_SDMA | SDHCI_USE_ADMA)) { 2845 if (host->ops->enable_dma) { 2846 if (host->ops->enable_dma(host)) { |
2810 pr_warning("%s: No suitable DMA " 2811 "available. Falling back to PIO.\n", | 2847 pr_warn("%s: No suitable DMA available - falling back to PIO\n", |
2812 mmc_hostname(mmc)); 2813 host->flags &= 2814 ~(SDHCI_USE_SDMA | SDHCI_USE_ADMA); 2815 } 2816 } 2817 } 2818 2819 if (host->flags & SDHCI_USE_ADMA) { --- 5 unchanged lines hidden (view full) --- 2825 host->adma_desc = dma_alloc_coherent(mmc_dev(mmc), 2826 ADMA_SIZE, &host->adma_addr, 2827 GFP_KERNEL); 2828 host->align_buffer = kmalloc(128 * 4, GFP_KERNEL); 2829 if (!host->adma_desc || !host->align_buffer) { 2830 dma_free_coherent(mmc_dev(mmc), ADMA_SIZE, 2831 host->adma_desc, host->adma_addr); 2832 kfree(host->align_buffer); | 2848 mmc_hostname(mmc)); 2849 host->flags &= 2850 ~(SDHCI_USE_SDMA | SDHCI_USE_ADMA); 2851 } 2852 } 2853 } 2854 2855 if (host->flags & SDHCI_USE_ADMA) { --- 5 unchanged lines hidden (view full) --- 2861 host->adma_desc = dma_alloc_coherent(mmc_dev(mmc), 2862 ADMA_SIZE, &host->adma_addr, 2863 GFP_KERNEL); 2864 host->align_buffer = kmalloc(128 * 4, GFP_KERNEL); 2865 if (!host->adma_desc || !host->align_buffer) { 2866 dma_free_coherent(mmc_dev(mmc), ADMA_SIZE, 2867 host->adma_desc, host->adma_addr); 2868 kfree(host->align_buffer); |
2833 pr_warning("%s: Unable to allocate ADMA " 2834 "buffers. Falling back to standard DMA.\n", | 2869 pr_warn("%s: Unable to allocate ADMA buffers - falling back to standard DMA\n", |
2835 mmc_hostname(mmc)); 2836 host->flags &= ~SDHCI_USE_ADMA; 2837 host->adma_desc = NULL; 2838 host->align_buffer = NULL; 2839 } else if (host->adma_addr & 3) { | 2870 mmc_hostname(mmc)); 2871 host->flags &= ~SDHCI_USE_ADMA; 2872 host->adma_desc = NULL; 2873 host->align_buffer = NULL; 2874 } else if (host->adma_addr & 3) { |
2840 pr_warning("%s: unable to allocate aligned ADMA descriptor\n", 2841 mmc_hostname(mmc)); | 2875 pr_warn("%s: unable to allocate aligned ADMA descriptor\n", 2876 mmc_hostname(mmc)); |
2842 host->flags &= ~SDHCI_USE_ADMA; 2843 dma_free_coherent(mmc_dev(mmc), ADMA_SIZE, 2844 host->adma_desc, host->adma_addr); 2845 kfree(host->align_buffer); 2846 host->adma_desc = NULL; 2847 host->align_buffer = NULL; 2848 } 2849 } --- 53 unchanged lines hidden (view full) --- 2903 if (host->clk_mul) { 2904 mmc->f_min = (host->max_clk * host->clk_mul) / 1024; 2905 mmc->f_max = host->max_clk * host->clk_mul; 2906 } else 2907 mmc->f_min = host->max_clk / SDHCI_MAX_DIV_SPEC_300; 2908 } else 2909 mmc->f_min = host->max_clk / SDHCI_MAX_DIV_SPEC_200; 2910 | 2877 host->flags &= ~SDHCI_USE_ADMA; 2878 dma_free_coherent(mmc_dev(mmc), ADMA_SIZE, 2879 host->adma_desc, host->adma_addr); 2880 kfree(host->align_buffer); 2881 host->adma_desc = NULL; 2882 host->align_buffer = NULL; 2883 } 2884 } --- 53 unchanged lines hidden (view full) --- 2938 if (host->clk_mul) { 2939 mmc->f_min = (host->max_clk * host->clk_mul) / 1024; 2940 mmc->f_max = host->max_clk * host->clk_mul; 2941 } else 2942 mmc->f_min = host->max_clk / SDHCI_MAX_DIV_SPEC_300; 2943 } else 2944 mmc->f_min = host->max_clk / SDHCI_MAX_DIV_SPEC_200; 2945 |
2911 host->timeout_clk = 2912 (caps[0] & SDHCI_TIMEOUT_CLK_MASK) >> SDHCI_TIMEOUT_CLK_SHIFT; 2913 if (host->timeout_clk == 0) { 2914 if (host->ops->get_timeout_clock) { 2915 host->timeout_clk = host->ops->get_timeout_clock(host); 2916 } else if (!(host->quirks & 2917 SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK)) { 2918 pr_err("%s: Hardware doesn't specify timeout clock " 2919 "frequency.\n", mmc_hostname(mmc)); 2920 return -ENODEV; | 2946 if (!(host->quirks & SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK)) { 2947 host->timeout_clk = (caps[0] & SDHCI_TIMEOUT_CLK_MASK) >> 2948 SDHCI_TIMEOUT_CLK_SHIFT; 2949 if (host->timeout_clk == 0) { 2950 if (host->ops->get_timeout_clock) { 2951 host->timeout_clk = 2952 host->ops->get_timeout_clock(host); 2953 } else { 2954 pr_err("%s: Hardware doesn't specify timeout clock frequency.\n", 2955 mmc_hostname(mmc)); 2956 return -ENODEV; 2957 } |
2921 } | 2958 } |
2922 } 2923 if (caps[0] & SDHCI_TIMEOUT_CLK_UNIT) 2924 host->timeout_clk *= 1000; | |
2925 | 2959 |
2926 if (host->quirks & SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK) 2927 host->timeout_clk = mmc->f_max / 1000; | 2960 if (caps[0] & SDHCI_TIMEOUT_CLK_UNIT) 2961 host->timeout_clk *= 1000; |
2928 | 2962 |
2929 mmc->max_busy_timeout = (1 << 27) / host->timeout_clk; | 2963 mmc->max_busy_timeout = host->ops->get_max_timeout_count ? 2964 host->ops->get_max_timeout_count(host) : 1 << 27; 2965 mmc->max_busy_timeout /= host->timeout_clk; 2966 } |
2930 2931 mmc->caps |= MMC_CAP_SDIO_IRQ | MMC_CAP_ERASE | MMC_CAP_CMD23; 2932 mmc->caps2 |= MMC_CAP2_SDIO_IRQ_NOTHREAD; 2933 2934 if (host->quirks & SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12) 2935 host->flags |= SDHCI_AUTO_CMD12; 2936 2937 /* Auto-CMD23 stuff only works in ADMA or PIO. */ --- 55 unchanged lines hidden (view full) --- 2993 mmc->caps |= MMC_CAP_UHS_SDR12 | MMC_CAP_UHS_SDR25; 2994 2995 /* SDR104 supports also implies SDR50 support */ 2996 if (caps[1] & SDHCI_SUPPORT_SDR104) { 2997 mmc->caps |= MMC_CAP_UHS_SDR104 | MMC_CAP_UHS_SDR50; 2998 /* SD3.0: SDR104 is supported so (for eMMC) the caps2 2999 * field can be promoted to support HS200. 3000 */ | 2967 2968 mmc->caps |= MMC_CAP_SDIO_IRQ | MMC_CAP_ERASE | MMC_CAP_CMD23; 2969 mmc->caps2 |= MMC_CAP2_SDIO_IRQ_NOTHREAD; 2970 2971 if (host->quirks & SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12) 2972 host->flags |= SDHCI_AUTO_CMD12; 2973 2974 /* Auto-CMD23 stuff only works in ADMA or PIO. */ --- 55 unchanged lines hidden (view full) --- 3030 mmc->caps |= MMC_CAP_UHS_SDR12 | MMC_CAP_UHS_SDR25; 3031 3032 /* SDR104 supports also implies SDR50 support */ 3033 if (caps[1] & SDHCI_SUPPORT_SDR104) { 3034 mmc->caps |= MMC_CAP_UHS_SDR104 | MMC_CAP_UHS_SDR50; 3035 /* SD3.0: SDR104 is supported so (for eMMC) the caps2 3036 * field can be promoted to support HS200. 3037 */ |
3001 if (!(host->quirks2 & SDHCI_QUIRK2_BROKEN_HS200)) | 3038 if (!(host->quirks2 & SDHCI_QUIRK2_BROKEN_HS200)) { |
3002 mmc->caps2 |= MMC_CAP2_HS200; | 3039 mmc->caps2 |= MMC_CAP2_HS200; |
3040 if (IS_ERR(mmc->supply.vqmmc) || 3041 !regulator_is_supported_voltage 3042 (mmc->supply.vqmmc, 1100000, 1300000)) 3043 mmc->caps2 &= ~MMC_CAP2_HS200_1_2V_SDR; 3044 } |
|
3003 } else if (caps[1] & SDHCI_SUPPORT_SDR50) 3004 mmc->caps |= MMC_CAP_UHS_SDR50; 3005 3006 if ((caps[1] & SDHCI_SUPPORT_DDR50) && 3007 !(host->quirks2 & SDHCI_QUIRK2_BROKEN_DDR50)) 3008 mmc->caps |= MMC_CAP_UHS_DDR50; 3009 3010 /* Does the host need tuning for SDR50? */ --- 33 unchanged lines hidden (view full) --- 3044 * According to SD Host Controller spec v3.00, if the Host System 3045 * can afford more than 150mA, Host Driver should set XPC to 1. Also 3046 * the value is meaningful only if Voltage Support in the Capabilities 3047 * register is set. The actual current value is 4 times the register 3048 * value. 3049 */ 3050 max_current_caps = sdhci_readl(host, SDHCI_MAX_CURRENT); 3051 if (!max_current_caps && !IS_ERR(mmc->supply.vmmc)) { | 3045 } else if (caps[1] & SDHCI_SUPPORT_SDR50) 3046 mmc->caps |= MMC_CAP_UHS_SDR50; 3047 3048 if ((caps[1] & SDHCI_SUPPORT_DDR50) && 3049 !(host->quirks2 & SDHCI_QUIRK2_BROKEN_DDR50)) 3050 mmc->caps |= MMC_CAP_UHS_DDR50; 3051 3052 /* Does the host need tuning for SDR50? */ --- 33 unchanged lines hidden (view full) --- 3086 * According to SD Host Controller spec v3.00, if the Host System 3087 * can afford more than 150mA, Host Driver should set XPC to 1. Also 3088 * the value is meaningful only if Voltage Support in the Capabilities 3089 * register is set. The actual current value is 4 times the register 3090 * value. 3091 */ 3092 max_current_caps = sdhci_readl(host, SDHCI_MAX_CURRENT); 3093 if (!max_current_caps && !IS_ERR(mmc->supply.vmmc)) { |
3052 u32 curr = regulator_get_current_limit(mmc->supply.vmmc); | 3094 int curr = regulator_get_current_limit(mmc->supply.vmmc); |
3053 if (curr > 0) { 3054 3055 /* convert to SDHCI_MAX_CURRENT format */ 3056 curr = curr/1000; /* convert to mA */ 3057 curr = curr/SDHCI_MAX_CURRENT_MULTIPLIER; 3058 3059 curr = min_t(u32, curr, SDHCI_MAX_CURRENT_LIMIT); 3060 max_current_caps = --- 92 unchanged lines hidden (view full) --- 3153 * is specified in the capabilities register. 3154 */ 3155 if (host->quirks & SDHCI_QUIRK_FORCE_BLK_SZ_2048) { 3156 mmc->max_blk_size = 2; 3157 } else { 3158 mmc->max_blk_size = (caps[0] & SDHCI_MAX_BLOCK_MASK) >> 3159 SDHCI_MAX_BLOCK_SHIFT; 3160 if (mmc->max_blk_size >= 3) { | 3095 if (curr > 0) { 3096 3097 /* convert to SDHCI_MAX_CURRENT format */ 3098 curr = curr/1000; /* convert to mA */ 3099 curr = curr/SDHCI_MAX_CURRENT_MULTIPLIER; 3100 3101 curr = min_t(u32, curr, SDHCI_MAX_CURRENT_LIMIT); 3102 max_current_caps = --- 92 unchanged lines hidden (view full) --- 3195 * is specified in the capabilities register. 3196 */ 3197 if (host->quirks & SDHCI_QUIRK_FORCE_BLK_SZ_2048) { 3198 mmc->max_blk_size = 2; 3199 } else { 3200 mmc->max_blk_size = (caps[0] & SDHCI_MAX_BLOCK_MASK) >> 3201 SDHCI_MAX_BLOCK_SHIFT; 3202 if (mmc->max_blk_size >= 3) { |
3161 pr_warning("%s: Invalid maximum block size, " 3162 "assuming 512 bytes\n", mmc_hostname(mmc)); | 3203 pr_warn("%s: Invalid maximum block size, assuming 512 bytes\n", 3204 mmc_hostname(mmc)); |
3163 mmc->max_blk_size = 0; 3164 } 3165 } 3166 3167 mmc->max_blk_size = 512 << mmc->max_blk_size; 3168 3169 /* 3170 * Maximum block count. --- 173 unchanged lines hidden --- | 3205 mmc->max_blk_size = 0; 3206 } 3207 } 3208 3209 mmc->max_blk_size = 512 << mmc->max_blk_size; 3210 3211 /* 3212 * Maximum block count. --- 173 unchanged lines hidden --- |