
Hi Wenyou,
On 12 April 2017 at 20:29, Wenyou Yang wenyou.yang@atmel.com wrote:
Add the driver model support for Atmel mci while retaining the existing legacy code. This allows the driver to support boards that have converted to driver model as well as those that have not.
Signed-off-by: Wenyou Yang wenyou.yang@atmel.com
Changes in v6:
- Rebase the master branch (commit: 4f6d85bb51).
Changes in v5:
- Rebase on v2017.03.
Changes in v4:
- Remove unneeded #ifdef CONFIG_DM_MMC.
Changes in v3:
- Use unified #ifdef CONFIG_DM_MMC #else...#endif, instead of #ifndef CONFIG_DM_MMC #else...#endif.
Changes in v2:
- Change the return type of atmel_mci_setup_cfg() from int to void.
- Add comments on the features depends on the IP version.
- Add the error handle path of clock.
- Fix the missing use priv->bus_clk_rate.
- Return from mmc_bind() directly, instead of checking its return.
drivers/mmc/Kconfig | 9 +++ drivers/mmc/gen_atmel_mci.c | 158 +++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 166 insertions(+), 1 deletion(-)
+static int atmel_mci_bind(struct udevice *dev) +{
struct atmel_mci_priv *priv = dev_get_priv(dev);
return mmc_bind(dev, &priv->mmc, &priv->cfg);
+}
Sorry for not noticing this before, but I don't think this works as intended. The bind() method is called before the device is probed and so the device has no private data. You should use dev_get_platdata() here, and set up a new structure to hold the mmc and cfg members.
See for example omap_hsmmc.c
Regards, Simon