mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-08 19:11:53 +00:00
dm: mmc: Remove use of fdtdec GPIO support
These functions are going away, so use the new uclass support instead. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
9762a415c8
commit
0347960b87
5 changed files with 28 additions and 41 deletions
0
arch/arm/include/asm/arch-pantheon/gpio.h
Normal file
0
arch/arm/include/asm/arch-pantheon/gpio.h
Normal file
|
@ -10,6 +10,7 @@
|
||||||
#define __TEGRA_MMC_H_
|
#define __TEGRA_MMC_H_
|
||||||
|
|
||||||
#include <fdtdec.h>
|
#include <fdtdec.h>
|
||||||
|
#include <asm/gpio.h>
|
||||||
|
|
||||||
/* for mmc_config definition */
|
/* for mmc_config definition */
|
||||||
#include <mmc.h>
|
#include <mmc.h>
|
||||||
|
@ -134,9 +135,9 @@ struct mmc_host {
|
||||||
int enabled; /* 1 to enable, 0 to disable */
|
int enabled; /* 1 to enable, 0 to disable */
|
||||||
int width; /* Bus Width, 1, 4 or 8 */
|
int width; /* Bus Width, 1, 4 or 8 */
|
||||||
enum periph_id mmc_id; /* Peripheral ID: PERIPH_ID_... */
|
enum periph_id mmc_id; /* Peripheral ID: PERIPH_ID_... */
|
||||||
struct fdt_gpio_state cd_gpio; /* Change Detect GPIO */
|
struct gpio_desc cd_gpio; /* Change Detect GPIO */
|
||||||
struct fdt_gpio_state pwr_gpio; /* Power GPIO */
|
struct gpio_desc pwr_gpio; /* Power GPIO */
|
||||||
struct fdt_gpio_state wp_gpio; /* Write Protect GPIO */
|
struct gpio_desc wp_gpio; /* Write Protect GPIO */
|
||||||
unsigned int version; /* SDHCI spec. version */
|
unsigned int version; /* SDHCI spec. version */
|
||||||
unsigned int clock; /* Current clock (MHz) */
|
unsigned int clock; /* Current clock (MHz) */
|
||||||
struct mmc_config cfg; /* mmc configuration */
|
struct mmc_config cfg; /* mmc configuration */
|
||||||
|
|
|
@ -102,17 +102,14 @@ struct sdhci_host sdhci_host[SDHCI_MAX_HOSTS];
|
||||||
|
|
||||||
static int do_sdhci_init(struct sdhci_host *host)
|
static int do_sdhci_init(struct sdhci_host *host)
|
||||||
{
|
{
|
||||||
char str[20];
|
|
||||||
int dev_id, flag;
|
int dev_id, flag;
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
||||||
flag = host->bus_width == 8 ? PINMUX_FLAG_8BIT_MODE : PINMUX_FLAG_NONE;
|
flag = host->bus_width == 8 ? PINMUX_FLAG_8BIT_MODE : PINMUX_FLAG_NONE;
|
||||||
dev_id = host->index + PERIPH_ID_SDMMC0;
|
dev_id = host->index + PERIPH_ID_SDMMC0;
|
||||||
|
|
||||||
if (fdt_gpio_isvalid(&host->pwr_gpio)) {
|
if (dm_gpio_is_valid(&host->pwr_gpio)) {
|
||||||
sprintf(str, "sdhci%d_power", host->index & 0xf);
|
dm_gpio_set_value(&host->pwr_gpio, 1);
|
||||||
gpio_request(host->pwr_gpio.gpio, str);
|
|
||||||
gpio_direction_output(host->pwr_gpio.gpio, 1);
|
|
||||||
err = exynos_pinmux_config(dev_id, flag);
|
err = exynos_pinmux_config(dev_id, flag);
|
||||||
if (err) {
|
if (err) {
|
||||||
debug("MMC not configured\n");
|
debug("MMC not configured\n");
|
||||||
|
@ -120,11 +117,8 @@ static int do_sdhci_init(struct sdhci_host *host)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fdt_gpio_isvalid(&host->cd_gpio)) {
|
if (dm_gpio_is_valid(&host->cd_gpio)) {
|
||||||
sprintf(str, "sdhci%d_cd", host->index & 0xf);
|
if (dm_gpio_get_value(&host->cd_gpio))
|
||||||
gpio_request(host->cd_gpio.gpio, str);
|
|
||||||
gpio_direction_input(host->cd_gpio.gpio);
|
|
||||||
if (gpio_get_value(host->cd_gpio.gpio))
|
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
err = exynos_pinmux_config(dev_id, flag);
|
err = exynos_pinmux_config(dev_id, flag);
|
||||||
|
@ -166,8 +160,10 @@ static int sdhci_get_config(const void *blob, int node, struct sdhci_host *host)
|
||||||
}
|
}
|
||||||
host->ioaddr = (void *)base;
|
host->ioaddr = (void *)base;
|
||||||
|
|
||||||
fdtdec_decode_gpio(blob, node, "pwr-gpios", &host->pwr_gpio);
|
gpio_request_by_name_nodev(blob, node, "pwr-gpios", 0, &host->pwr_gpio,
|
||||||
fdtdec_decode_gpio(blob, node, "cd-gpios", &host->cd_gpio);
|
GPIOD_IS_OUT);
|
||||||
|
gpio_request_by_name_nodev(blob, node, "cd-gpios", 0, &host->cd_gpio,
|
||||||
|
GPIOD_IS_IN);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -515,8 +515,8 @@ static int tegra_mmc_getcd(struct mmc *mmc)
|
||||||
|
|
||||||
debug("tegra_mmc_getcd called\n");
|
debug("tegra_mmc_getcd called\n");
|
||||||
|
|
||||||
if (fdt_gpio_isvalid(&host->cd_gpio))
|
if (dm_gpio_is_valid(&host->cd_gpio))
|
||||||
return fdtdec_get_gpio(&host->cd_gpio);
|
return dm_gpio_get_value(&host->cd_gpio);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -531,7 +531,6 @@ static const struct mmc_ops tegra_mmc_ops = {
|
||||||
static int do_mmc_init(int dev_index)
|
static int do_mmc_init(int dev_index)
|
||||||
{
|
{
|
||||||
struct mmc_host *host;
|
struct mmc_host *host;
|
||||||
char gpusage[12]; /* "SD/MMCn PWR" or "SD/MMCn CD" */
|
|
||||||
struct mmc *mmc;
|
struct mmc *mmc;
|
||||||
|
|
||||||
/* DT should have been read & host config filled in */
|
/* DT should have been read & host config filled in */
|
||||||
|
@ -539,27 +538,15 @@ static int do_mmc_init(int dev_index)
|
||||||
if (!host->enabled)
|
if (!host->enabled)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
debug(" do_mmc_init: index %d, bus width %d "
|
debug(" do_mmc_init: index %d, bus width %d pwr_gpio %d cd_gpio %d\n",
|
||||||
"pwr_gpio %d cd_gpio %d\n",
|
dev_index, host->width, gpio_get_number(&host->pwr_gpio),
|
||||||
dev_index, host->width,
|
gpio_get_number(&host->cd_gpio));
|
||||||
host->pwr_gpio.gpio, host->cd_gpio.gpio);
|
|
||||||
|
|
||||||
host->clock = 0;
|
host->clock = 0;
|
||||||
clock_start_periph_pll(host->mmc_id, CLOCK_ID_PERIPH, 20000000);
|
clock_start_periph_pll(host->mmc_id, CLOCK_ID_PERIPH, 20000000);
|
||||||
|
|
||||||
if (fdt_gpio_isvalid(&host->pwr_gpio)) {
|
if (dm_gpio_is_valid(&host->pwr_gpio))
|
||||||
sprintf(gpusage, "SD/MMC%d PWR", dev_index);
|
dm_gpio_set_value(&host->pwr_gpio, 1);
|
||||||
gpio_request(host->pwr_gpio.gpio, gpusage);
|
|
||||||
gpio_direction_output(host->pwr_gpio.gpio, 1);
|
|
||||||
debug(" Power GPIO name = %s\n", host->pwr_gpio.name);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fdt_gpio_isvalid(&host->cd_gpio)) {
|
|
||||||
sprintf(gpusage, "SD/MMC%d CD", dev_index);
|
|
||||||
gpio_request(host->cd_gpio.gpio, gpusage);
|
|
||||||
gpio_direction_input(host->cd_gpio.gpio);
|
|
||||||
debug(" CD GPIO name = %s\n", host->cd_gpio.name);
|
|
||||||
}
|
|
||||||
|
|
||||||
memset(&host->cfg, 0, sizeof(host->cfg));
|
memset(&host->cfg, 0, sizeof(host->cfg));
|
||||||
|
|
||||||
|
@ -626,9 +613,12 @@ static int mmc_get_config(const void *blob, int node, struct mmc_host *host)
|
||||||
debug("%s: no sdmmc width found\n", __func__);
|
debug("%s: no sdmmc width found\n", __func__);
|
||||||
|
|
||||||
/* These GPIOs are optional */
|
/* These GPIOs are optional */
|
||||||
fdtdec_decode_gpio(blob, node, "cd-gpios", &host->cd_gpio);
|
gpio_request_by_name_nodev(blob, node, "cd-gpios", 0, &host->cd_gpio,
|
||||||
fdtdec_decode_gpio(blob, node, "wp-gpios", &host->wp_gpio);
|
GPIOD_IS_IN);
|
||||||
fdtdec_decode_gpio(blob, node, "power-gpios", &host->pwr_gpio);
|
gpio_request_by_name_nodev(blob, node, "wp-gpios", 0, &host->wp_gpio,
|
||||||
|
GPIOD_IS_IN);
|
||||||
|
gpio_request_by_name_nodev(blob, node, "power-gpios", 0,
|
||||||
|
&host->pwr_gpio, GPIOD_IS_OUT);
|
||||||
|
|
||||||
debug("%s: found controller at %p, width = %d, periph_id = %d\n",
|
debug("%s: found controller at %p, width = %d, periph_id = %d\n",
|
||||||
__func__, host->reg, host->width, host->mmc_id);
|
__func__, host->reg, host->width, host->mmc_id);
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <mmc.h>
|
#include <mmc.h>
|
||||||
#include <fdtdec.h>
|
#include <asm/gpio.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Controller registers
|
* Controller registers
|
||||||
|
@ -246,8 +246,8 @@ struct sdhci_host {
|
||||||
int index;
|
int index;
|
||||||
|
|
||||||
int bus_width;
|
int bus_width;
|
||||||
struct fdt_gpio_state pwr_gpio; /* Power GPIO */
|
struct gpio_desc pwr_gpio; /* Power GPIO */
|
||||||
struct fdt_gpio_state cd_gpio; /* Card Detect GPIO */
|
struct gpio_desc cd_gpio; /* Card Detect GPIO */
|
||||||
|
|
||||||
void (*set_control_reg)(struct sdhci_host *host);
|
void (*set_control_reg)(struct sdhci_host *host);
|
||||||
void (*set_clock)(int dev_index, unsigned int div);
|
void (*set_clock)(int dev_index, unsigned int div);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue