mmc.c (83d290c56fab2d38cd1ab4c4cc7099559c1d5046) mmc.c (65117182543e58ba69f4abdc998423798137cbae)
1// SPDX-License-Identifier: GPL-2.0+
2/*
3 * Copyright 2008, Freescale Semiconductor, Inc
4 * Andy Fleming
5 *
6 * Based vaguely on the Linux code
7 */
8

--- 515 unchanged lines hidden (view full) ---

524 udelay(100);
525 else if (err)
526 return -ETIMEDOUT;
527
528 /*
529 * During a signal voltage level switch, the clock must be gated
530 * for 5 ms according to the SD spec
531 */
1// SPDX-License-Identifier: GPL-2.0+
2/*
3 * Copyright 2008, Freescale Semiconductor, Inc
4 * Andy Fleming
5 *
6 * Based vaguely on the Linux code
7 */
8

--- 515 unchanged lines hidden (view full) ---

524 udelay(100);
525 else if (err)
526 return -ETIMEDOUT;
527
528 /*
529 * During a signal voltage level switch, the clock must be gated
530 * for 5 ms according to the SD spec
531 */
532 mmc_set_clock(mmc, mmc->clock, true);
532 mmc_set_clock(mmc, mmc->clock, MMC_CLK_DISABLE);
533
534 err = mmc_set_signal_voltage(mmc, signal_voltage);
535 if (err)
536 return err;
537
538 /* Keep clock gated for at least 10 ms, though spec only says 5 ms */
539 mdelay(10);
533
534 err = mmc_set_signal_voltage(mmc, signal_voltage);
535 if (err)
536 return err;
537
538 /* Keep clock gated for at least 10 ms, though spec only says 5 ms */
539 mdelay(10);
540 mmc_set_clock(mmc, mmc->clock, false);
540 mmc_set_clock(mmc, mmc->clock, MMC_CLK_ENABLE);
541
542 /*
543 * Failure to switch is indicated by the card holding
544 * dat[0:3] low. Wait for at least 1 ms according to spec
545 */
546 err = mmc_wait_dat0(mmc, 1, 1000);
547 if (err == -ENOSYS)
548 udelay(1000);

--- 1118 unchanged lines hidden (view full) ---

1667
1668 /* configure the bus mode (card) */
1669 err = sd_set_card_speed(mmc, mwt->mode);
1670 if (err)
1671 goto error;
1672
1673 /* configure the bus mode (host) */
1674 mmc_select_mode(mmc, mwt->mode);
541
542 /*
543 * Failure to switch is indicated by the card holding
544 * dat[0:3] low. Wait for at least 1 ms according to spec
545 */
546 err = mmc_wait_dat0(mmc, 1, 1000);
547 if (err == -ENOSYS)
548 udelay(1000);

--- 1118 unchanged lines hidden (view full) ---

1667
1668 /* configure the bus mode (card) */
1669 err = sd_set_card_speed(mmc, mwt->mode);
1670 if (err)
1671 goto error;
1672
1673 /* configure the bus mode (host) */
1674 mmc_select_mode(mmc, mwt->mode);
1675 mmc_set_clock(mmc, mmc->tran_speed, false);
1675 mmc_set_clock(mmc, mmc->tran_speed,
1676 MMC_CLK_ENABLE);
1676
1677#ifdef MMC_SUPPORTS_TUNING
1678 /* execute tuning if needed */
1679 if (mwt->tuning && !mmc_host_is_spi(mmc)) {
1680 err = mmc_execute_tuning(mmc,
1681 mwt->tuning);
1682 if (err) {
1683 pr_debug("tuning failed\n");

--- 8 unchanged lines hidden (view full) ---

1692 pr_warn("unable to read ssr\n");
1693#endif
1694 if (!err)
1695 return 0;
1696
1697error:
1698 /* revert to a safer bus speed */
1699 mmc_select_mode(mmc, SD_LEGACY);
1677
1678#ifdef MMC_SUPPORTS_TUNING
1679 /* execute tuning if needed */
1680 if (mwt->tuning && !mmc_host_is_spi(mmc)) {
1681 err = mmc_execute_tuning(mmc,
1682 mwt->tuning);
1683 if (err) {
1684 pr_debug("tuning failed\n");

--- 8 unchanged lines hidden (view full) ---

1693 pr_warn("unable to read ssr\n");
1694#endif
1695 if (!err)
1696 return 0;
1697
1698error:
1699 /* revert to a safer bus speed */
1700 mmc_select_mode(mmc, SD_LEGACY);
1700 mmc_set_clock(mmc, mmc->tran_speed, false);
1701 mmc_set_clock(mmc, mmc->tran_speed,
1702 MMC_CLK_ENABLE);
1701 }
1702 }
1703 }
1704
1705 pr_err("unable to select a mode\n");
1706 return -ENOTSUPP;
1707}
1708

--- 144 unchanged lines hidden (view full) ---

1853 if (mmc->version < MMC_VERSION_4)
1854 return 0;
1855
1856 if (!mmc->ext_csd) {
1857 pr_debug("No ext_csd found!\n"); /* this should enver happen */
1858 return -ENOTSUPP;
1859 }
1860
1703 }
1704 }
1705 }
1706
1707 pr_err("unable to select a mode\n");
1708 return -ENOTSUPP;
1709}
1710

--- 144 unchanged lines hidden (view full) ---

1855 if (mmc->version < MMC_VERSION_4)
1856 return 0;
1857
1858 if (!mmc->ext_csd) {
1859 pr_debug("No ext_csd found!\n"); /* this should enver happen */
1860 return -ENOTSUPP;
1861 }
1862
1861 mmc_set_clock(mmc, mmc->legacy_speed, false);
1863 mmc_set_clock(mmc, mmc->legacy_speed, MMC_CLK_ENABLE);
1862
1863 for_each_mmc_mode_by_pref(card_caps, mwt) {
1864 for_each_supported_width(card_caps & mwt->widths,
1865 mmc_is_mode_ddr(mwt->mode), ecbw) {
1866 enum mmc_voltage old_voltage;
1867 pr_debug("trying mode %s width %d (at %d MHz)\n",
1868 mmc_mode_name(mwt->mode),
1869 bus_width(ecbw->cap),

--- 26 unchanged lines hidden (view full) ---

1896 EXT_CSD_BUS_WIDTH,
1897 ecbw->ext_csd_bits);
1898 if (err)
1899 goto error;
1900 }
1901
1902 /* configure the bus mode (host) */
1903 mmc_select_mode(mmc, mwt->mode);
1864
1865 for_each_mmc_mode_by_pref(card_caps, mwt) {
1866 for_each_supported_width(card_caps & mwt->widths,
1867 mmc_is_mode_ddr(mwt->mode), ecbw) {
1868 enum mmc_voltage old_voltage;
1869 pr_debug("trying mode %s width %d (at %d MHz)\n",
1870 mmc_mode_name(mwt->mode),
1871 bus_width(ecbw->cap),

--- 26 unchanged lines hidden (view full) ---

1898 EXT_CSD_BUS_WIDTH,
1899 ecbw->ext_csd_bits);
1900 if (err)
1901 goto error;
1902 }
1903
1904 /* configure the bus mode (host) */
1905 mmc_select_mode(mmc, mwt->mode);
1904 mmc_set_clock(mmc, mmc->tran_speed, false);
1906 mmc_set_clock(mmc, mmc->tran_speed, MMC_CLK_ENABLE);
1905#ifdef MMC_SUPPORTS_TUNING
1906
1907 /* execute tuning if needed */
1908 if (mwt->tuning) {
1909 err = mmc_execute_tuning(mmc, mwt->tuning);
1910 if (err) {
1911 pr_debug("tuning failed\n");
1912 goto error;

--- 508 unchanged lines hidden (view full) ---

2421 err = mmc_set_signal_voltage(mmc, MMC_SIGNAL_VOLTAGE_330);
2422 if (err != 0)
2423 err = mmc_set_signal_voltage(mmc, MMC_SIGNAL_VOLTAGE_180);
2424 if (err != 0)
2425 pr_warn("mmc: failed to set signal voltage\n");
2426
2427 mmc_select_mode(mmc, MMC_LEGACY);
2428 mmc_set_bus_width(mmc, 1);
1907#ifdef MMC_SUPPORTS_TUNING
1908
1909 /* execute tuning if needed */
1910 if (mwt->tuning) {
1911 err = mmc_execute_tuning(mmc, mwt->tuning);
1912 if (err) {
1913 pr_debug("tuning failed\n");
1914 goto error;

--- 508 unchanged lines hidden (view full) ---

2423 err = mmc_set_signal_voltage(mmc, MMC_SIGNAL_VOLTAGE_330);
2424 if (err != 0)
2425 err = mmc_set_signal_voltage(mmc, MMC_SIGNAL_VOLTAGE_180);
2426 if (err != 0)
2427 pr_warn("mmc: failed to set signal voltage\n");
2428
2429 mmc_select_mode(mmc, MMC_LEGACY);
2430 mmc_set_bus_width(mmc, 1);
2429 mmc_set_clock(mmc, 0, false);
2431 mmc_set_clock(mmc, 0, MMC_CLK_ENABLE);
2430}
2431
2432static int mmc_power_on(struct mmc *mmc)
2433{
2434#if CONFIG_IS_ENABLED(DM_MMC) && CONFIG_IS_ENABLED(DM_REGULATOR)
2435 if (mmc->vmmc_supply) {
2436 int ret = regulator_set_enable(mmc->vmmc_supply, true);
2437
2438 if (ret) {
2439 puts("Error enabling VMMC supply\n");
2440 return ret;
2441 }
2442 }
2443#endif
2444 return 0;
2445}
2446
2447static int mmc_power_off(struct mmc *mmc)
2448{
2432}
2433
2434static int mmc_power_on(struct mmc *mmc)
2435{
2436#if CONFIG_IS_ENABLED(DM_MMC) && CONFIG_IS_ENABLED(DM_REGULATOR)
2437 if (mmc->vmmc_supply) {
2438 int ret = regulator_set_enable(mmc->vmmc_supply, true);
2439
2440 if (ret) {
2441 puts("Error enabling VMMC supply\n");
2442 return ret;
2443 }
2444 }
2445#endif
2446 return 0;
2447}
2448
2449static int mmc_power_off(struct mmc *mmc)
2450{
2449 mmc_set_clock(mmc, 0, true);
2451 mmc_set_clock(mmc, 0, MMC_CLK_DISABLE);
2450#if CONFIG_IS_ENABLED(DM_MMC) && CONFIG_IS_ENABLED(DM_REGULATOR)
2451 if (mmc->vmmc_supply) {
2452 int ret = regulator_set_enable(mmc->vmmc_supply, false);
2453
2454 if (ret) {
2455 pr_debug("Error disabling VMMC supply\n");
2456 return ret;
2457 }

--- 294 unchanged lines hidden ---
2452#if CONFIG_IS_ENABLED(DM_MMC) && CONFIG_IS_ENABLED(DM_REGULATOR)
2453 if (mmc->vmmc_supply) {
2454 int ret = regulator_set_enable(mmc->vmmc_supply, false);
2455
2456 if (ret) {
2457 pr_debug("Error disabling VMMC supply\n");
2458 return ret;
2459 }

--- 294 unchanged lines hidden ---