• Thomas Petazzoni's avatar
    mmc: mvsdio: fix non-DT probing of GPIOs · 5e81441e
    Thomas Petazzoni authored
    Ralph Droms <rdroms@gmail.com> reported that 3.9-rc was breaking the
    SDIO interface on his Sheevaplug platform, and that the recent changes
    to the mvsdio driver are responsible for this breakage. Precisely, the
    regression has been introduced by 07728b77 (mmc: mvsdio: use
    slot-gpio for card detect gpio).
    
    After investigation, is turns out that the Sheevaplug does not have
    any "card detect" GPIO, and the Sheevaplug has not been converted to
    the Device Tree. Therefore, the Sheevaplug board code does not define
    a value for the .gpio_card_detect field of the mvsdio_platform_data
    structure, which means that its value is 0. Unfortunately,
    gpio_is_valid() considers 0 as a valid GPIO, and therefore calls
    mmc_gpio_request_cd(), which fails and makes the entire probing of the
    driver fail.
    
    In fact, in the previous mvsdio code, before the Device Tree binding
    was introduced, 0 was not considered as a valid GPIO. Therefore, this
    fix revert back to this behavior in the non-DT case, by setting the
    gpio_card_detect and gpio_write_protect local variables to -EINVAL
    when the corresponding fields of the mvsdio_platform_data structure
    are set to zero (i.e, left undefined). Of course, it prevents to use
    GPIO 0 as a card detect or write protect GPIO, but it was a defiency
    of the previous non-DT code, and the fix moving forward is to convert
    platforms to the Device Tree.
    
    The problem has been reproduced successfully on the Kirkwood-based
    Marvell DB-88F6281-BP Development Board (that doesn't use the Device
    Tree) and the fix has proven to work properly, after of course
    removing the gpio_card_detect field of the mvsdio_platform_data
    instance for this board.
    Reported-by: default avatarRalph Droms <rdroms@gmail.com>
    Tested-by: default avatarRalph Droms <rdroms@gmail.com>
    Signed-off-by: default avatarThomas Petazzoni <thomas.petazzoni@free-electrons.com>
    Signed-off-by: default avatarChris Ball <cjb@laptop.org>
    5e81441e
mvsdio.c 24.6 KB