mirror of
https://github.com/archlinuxarm/PKGBUILDs.git
synced 2024-11-18 22:54:00 +00:00
68 lines
2.8 KiB
Diff
68 lines
2.8 KiB
Diff
Ralph Droms <rdroms at 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 07728b77c03d (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: Ralph Droms <rdroms at gmail.com>
|
|
Tested-by: Ralph Droms <rdroms at gmail.com>
|
|
Signed-off-by: Thomas Petazzoni <thomas.petazzoni at free-electrons.com>
|
|
---
|
|
This patch should be applied on 3.9-rcX.
|
|
|
|
Changes between v2 and v3:
|
|
* Add a reference to the commit introducing the regression. Suggested
|
|
by Russell King.
|
|
* Fix the e-mail address from Ralph Droms, and add his Tested-by.
|
|
* No code change.
|
|
|
|
Changes between v1 and v2:
|
|
* Send the patch to the MMC maintainer instead of the Marvell
|
|
maintainers.
|
|
---
|
|
drivers/mmc/host/mvsdio.c | 4 ++--
|
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/drivers/mmc/host/mvsdio.c b/drivers/mmc/host/mvsdio.c
|
|
index 145cdaf..1e4d567 100644
|
|
--- a/drivers/mmc/host/mvsdio.c
|
|
+++ b/drivers/mmc/host/mvsdio.c
|
|
@@ -741,8 +741,8 @@ static int __init mvsd_probe(struct platform_device *pdev)
|
|
goto out;
|
|
}
|
|
host->base_clock = mvsd_data->clock / 2;
|
|
- gpio_card_detect = mvsd_data->gpio_card_detect;
|
|
- gpio_write_protect = mvsd_data->gpio_write_protect;
|
|
+ gpio_card_detect = mvsd_data->gpio_card_detect ? : -EINVAL;
|
|
+ gpio_write_protect = mvsd_data->gpio_write_protect ? : -EINVAL;
|
|
}
|
|
|
|
mmc->ops = &mvsd_ops;
|
|
--
|
|
1.7.9.5
|
|
|