[U-Boot] [PATCH v4 4/4] Tegra: MMC: Add DT support to MMC driver for all T20 boards

Tom Warren
2013-02-20T15:50:19Z

Stephen,

On Thu, Feb 14, 2013 at 4:12 PM, Stephen Warren <swarren@wwwdotorg.org> 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