mmc: dw_mmc: Add support for Rockchip variant
Subsystems (4)
Heiko Stübner
maintainerv4 cover mmc: dw_mmc: Add support for Rockchip variant
The driver support for the mmc host is not needed for the core SoC support and in the same way the mmc support does not need the SoC code to function. Therefore it can be submitted (and hopefully merged) on its own.
Changes since v3:
- submit mmc driver standalone
- add dt binding documentation
Changes since v2:
- split "mmc: dw_mmc-pltfm: add Rockchip variant" into move and feature parts as suggested by Andy Shevchenko
Changes since v1:
none
Dependencies:
- "mmc: dw_mmc: Add support DW SD/MMC driver on SOCFPGA" from Dinh Nguyen that moves the SDMMC_CMD_USE_HOLD_REG constant into the common header, which is required on these Rockchip SoCs
Heiko Stuebner (3):
mmc: dw_mmc-pltfm: remove static from dw_mci_pltfm_remove
mmc: dw_mmc-pltfm: move probe and remove below dt match table
mmc: dw_mmc-pltfm: add Rockchip variant
.../devicetree/bindings/mmc/rockchip-dw-mshc.txt | 23 ++++++++++ drivers/mmc/host/dw_mmc-pltfm.c | 47 ++++++++++++++------ 2 files changed, 56 insertions(+), 14 deletions(-) create mode 100644 Documentation/devicetree/bindings/mmc/rockchip-dw-mshc.txt
Signature · 1 line
1.7.10.4
Heiko Stübner
maintainerPATCH v4 1/3 mmc: dw_mmc-pltfm: remove static from dw_mci_pltfm_remove
dw_mci_pltfm_remove gets exported and used by dw_mmc-exynos, so should not be static.
--- drivers/mmc/host/dw_mmc-pltfm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/mmc/host/dw_mmc-pltfm.c +1 -1
@@ -68,7 +68,7 @@ static int dw_mci_pltfm_probe(struct platform_device *pdev)return dw_mci_pltfm_register (pdev,NULL ); } -static int dw_mci_pltfm_remove (struct platform_device *pdev) +int dw_mci_pltfm_remove (struct platform_device *pdev) {struct dw_mci *host =platform_get_drvdata (pdev);
Signature · 1 line
1.7.10.4
Heiko Stübner
maintainerPATCH v4 2/3 mmc: dw_mmc-pltfm: move probe and remove below dt match table
In reply to Heiko StübnerIn a subsquent patch probe will need to do some handling of data from the dt match table. So to prevent the need for forward declarations, move probe and remove below the match table.
--- drivers/mmc/host/dw_mmc-pltfm.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-)
drivers/mmc/host/dw_mmc-pltfm.c +14 -14
@@ -63,20 +63,6 @@ int dw_mci_pltfm_register(struct platform_device *pdev, }EXPORT_SYMBOL_GPL (dw_mci_pltfm_register); -static int dw_mci_pltfm_probe (struct platform_device *pdev) -{ -return dw_mci_pltfm_register (pdev,NULL ); -} - -int dw_mci_pltfm_remove (struct platform_device *pdev) -{ -struct dw_mci *host =platform_get_drvdata (pdev); - -dw_mci_remove (host); -return 0 ; -} -EXPORT_SYMBOL_GPL (dw_mci_pltfm_remove); -#ifdef CONFIG_PM_SLEEP /* * TODO: we should probably disable the clock to the card in the suspend path.
@@ -118,6 +104,20 @@ static const struct of_device_id dw_mci_pltfm_match[] = { };MODULE_DEVICE_TABLE (of, dw_mci_pltfm_match); +static int dw_mci_pltfm_probe (struct platform_device *pdev) +{ +return dw_mci_pltfm_register (pdev,NULL ); +} + +int dw_mci_pltfm_remove (struct platform_device *pdev) +{ +struct dw_mci *host =platform_get_drvdata (pdev); + +dw_mci_remove (host); +return 0 ; +} +EXPORT_SYMBOL_GPL (dw_mci_pltfm_remove); +static struct platform_driver dw_mci_pltfm_driver = { .probe = dw_mci_pltfm_probe, .remove = dw_mci_pltfm_remove,
Signature · 1 line
1.7.10.4
Heiko Stübner
maintainerPATCH v4 3/3 mmc: dw_mmc-pltfm: add Rockchip variant
In reply to Heiko StübnerCortex-A9 SoCs from Rockchip use a slightly modified variant of dw_mmc controllers that seems to require the SDMMC_CMD_USE_HOLD_REG bit to always be set.
There also seem to be no other modifications (additional register etc) present, so to keep the footprint low, add this small variant to the pltfm driver.
---
depends on "mmc: dw_mmc: Add support DW SD/MMC driver on SOCFPGA"
from Dinh Nguyen
.../devicetree/bindings/mmc/rockchip-dw-mshc.txt | 23 ++++++++++++++++++++ drivers/mmc/host/dw_mmc-pltfm.c | 21 +++++++++++++++++- 2 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 Documentation/devicetree/bindings/mmc/rockchip-dw-mshc.txt
Documentation/devicetree/bindings/mmc/rockchip-dw-mshc.txt new file +23 -0
@@ -0,0 +1,23 @@ +* Rockchip specific extensions to the Synopsis Designware Mobile + Storage Host Controller + +The Synopsis designware mobile storage host controller is used to interface +a SoC with storage medium such as eMMC or SD/MMC cards. This file documents +differences between the core Synopsis dw mshc controller properties described +by synopsis-dw-mshc.txt and the properties used by the Rockchip specific +extensions to the Synopsis Designware Mobile Storage Host Controller. + +Required Properties: + +* compatible: should be + - "rockchip,rk2928-dw-mshc": for Rockchip RK2928 and following + +Example: + + rkdwmmc0 at 12200000 { + compatible = "rockchip,rk2928-dw-mshc"; + reg = <0x12200000 0x1000>; + interrupts = <0 75 0>; + #address-cells = <1>; + #size-cells = <0>; + };
drivers/mmc/host/dw_mmc-pltfm.c +20 -1
@@ -24,6 +24,15 @@#include "dw_mmc.h" +static void dw_mci_rockchip_prepare_command (struct dw_mci *host,u32 *cmdr) +{ + *cmdr |=SDMMC_CMD_USE_HOLD_REG ; +} + +static const struct dw_mci_drv_data rockchip_drv_data = { + .prepare_command = dw_mci_rockchip_prepare_command, +}; +int dw_mci_pltfm_register (struct platform_device *pdev,const struct dw_mci_drv_data *drv_data) {
@@ -100,13 +109,23 @@ EXPORT_SYMBOL_GPL(dw_mci_pltfm_pmops);static const struct of_device_id dw_mci_pltfm_match[] = { { .compatible ="snps,dw-mshc" , }, + { .compatible ="rockchip,rk2928-dw-mshc" , + .data = &rockchip_drv_data }, {}, };MODULE_DEVICE_TABLE (of, dw_mci_pltfm_match);static int dw_mci_pltfm_probe (struct platform_device *pdev) { -return dw_mci_pltfm_register (pdev,NULL ); +const struct dw_mci_drv_data *drv_data =NULL ; +const struct of_device_id *match; + +if (pdev->dev.of_node) { + match =of_match_node (dw_mci_pltfm_match, pdev->dev.of_node); + drv_data = match->data; + } + +return dw_mci_pltfm_register (pdev, drv_data); }int dw_mci_pltfm_remove (struct platform_device *pdev)
Signature · 1 line
1.7.10.4
v4 cover mmc: dw_mmc: Add support for Rockchip variant
In reply to Heiko StübnerHi Heiko,
Quoted 8 lines · Heiko St?bner
The driver support for the mmc host is not needed for the core SoC support and in the same way the mmc support does not need the SoC code to function. Therefore it can be submitted (and hopefully merged) on its own.
Changes since v3:
- submit mmc driver standalone
- add dt binding documentation
Thanks, all three patches pushed to mmc-next for 3.11.
- Chris.
Signature · 2 lines
Chris Ball <[email protected]> <http://printf.net/> One Laptop Per Child