From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tom Warren Date: Wed, 20 Feb 2013 08:50:19 -0700 Subject: [U-Boot] [PATCH v4 4/4] Tegra: MMC: Add DT support to MMC driver for all T20 boards In-Reply-To: <511D6F6A.7020200@wwwdotorg.org> References: <1360875841-30594-1-git-send-email-twarren@nvidia.com> <1360875841-30594-5-git-send-email-twarren@nvidia.com> <511D6F6A.7020200@wwwdotorg.org> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Stephen, On Thu, Feb 14, 2013 at 4:12 PM, Stephen Warren wrote: > On 02/14/2013 02:04 PM, Tom Warren wrote: >> tegra_mmc_init() now parses the DT info for bus width, WP/CD GPIOs, etc. >> Tested on Seaboard, fully functional. >> >> Tamonten boards (medcom-wide, plutux, and tec) use a different/new >> dtsi file w/common settings. > >> diff --git a/drivers/mmc/tegra_mmc.c b/drivers/mmc/tegra_mmc.c > >> @@ -515,44 +483,47 @@ static int mmc_core_init(struct mmc *mmc) >> int tegra_mmc_getcd(struct mmc *mmc) >> { >> struct mmc_host *host = (struct mmc_host *)mmc->priv; >> + debug("%s called, host->cd_gpio = 0x%08X\n", __func__, >> + (unsigned)&host->cd_gpio); > > That last line should be: > > host->cd_gpio.gpio; > > The case is because it's a struct address, not the GPIO you want to print. Actually, I did want to print the address of the cd_gpio struct, so I could look at it from the cmd line w/md and/or w/JTAG. But I'll just remove the debug printf entirely, since it was only useful early on. > >> +static int do_mmc_init(int dev_index) > >> - if (host->pwr_gpio >= 0) { >> + if (fdt_gpio_isvalid(&host->pwr_gpio)) { >> sprintf(gpusage, "SD/MMC%d PWR", dev_index); >> - gpio_request(host->pwr_gpio, gpusage); >> - gpio_direction_output(host->pwr_gpio, 1); >> + gpio_request(host->pwr_gpio.gpio, gpusage); >> + fdtdec_set_gpio(&host->pwr_gpio, 1); > > That change completely removes the call to gpio_direction_output; > fdtdec_set_gpio() doesn't do that. This is the cause of the problem on > PAZ00, and Harmony. OK, cool. Good catch. I thought the fdtdec_xxx_gpio calls did it all, but now I see that they don't. > >> - if (host->cd_gpio >= 0) { >> + if (fdt_gpio_isvalid(&host->cd_gpio)) { >> sprintf(gpusage, "SD/MMC%d CD", dev_index); >> - gpio_request(host->cd_gpio, gpusage); >> - gpio_direction_input(host->cd_gpio); >> + gpio_request(host->cd_gpio.gpio, gpusage); >> + card_det = fdtdec_get_gpio(&host->cd_gpio); > > Similarly, this change removes the call to gpio_direction_input(); > fdtdec_get_gpio() just reads the GPIO's value and is pointless here. No, not pointless - I was checking the CD pin state and printing it out during debug. But it's not of much interest to anyone but me at this point, so I'll remove the card_det lines. > > I'll go retest all the boards after fixing that... Thanks