On Wed, Jun 13, 2012 at 3:05 AM, Chris Ball <[email protected]> wrote:
> Tested on an OLPC XO-1.75. (MMP2, sdhci-pxav3, CONFIG_MACH_MMP2_DT=y)
>
> Signed-off-by: Chris Ball <[email protected]>
> ---
> .../devicetree/bindings/mmc/sdhci-pxa.txt | 21 ++++++++
> drivers/mmc/host/sdhci-pxav2.c | 52
> ++++++++++++++++++++
> drivers/mmc/host/sdhci-pxav3.c | 50 +++++++++++++++++++
> 3 files changed, 123 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/mmc/sdhci-pxa.txt
Thanks Chris for the great help, compile error if CONFIG_OF not defined.
>
> +#ifdef CONFIG_OF
> +static const struct of_device_id sdhci_pxav2_of_match[] = {
> + {
> + .compatible = "mrvl,pxav2-mmc",
> + },
> + {},
> +};
> +MODULE_DEVICE_TABLE(of, sdhci_pxav2_of_match);
> +
> +static struct sdhci_pxa_platdata *pxav2_get_mmc_pdata(struct device *dev)
> +{
> + struct sdhci_pxa_platdata *pdata;
> + struct device_node *np = dev->of_node;
> + u32 bus_width;
> + u32 clk_delay_cycles;
> +
> + return pdata;
> +}
> +#else
> +static inline struct sdhci_pxa_platdata pxav2_get_mmc_pdata(struct device
> *dev)
Should be static struct sdhci_pxa_platdata *pxav2_get_mmc_pdata(struct
device *dev)
> +{
> + return NULL;
> +}
> +#endif
> +
> static int __devinit sdhci_pxav2_probe(struct platform_device *pdev)
> {
> struct sdhci_pltfm_host *pltfm_host;
> @@ -128,6 +173,8 @@ static int __devinit sdhci_pxav2_probe(struct
> platform_device *pdev)
> struct device *dev = &pdev->dev;
> struct sdhci_host *host = NULL;
> struct sdhci_pxa *pxa = NULL;
> + const struct of_device_id *match;
> +
> int ret;
> struct clk *clk;
>
> @@ -156,6 +203,10 @@ static int __devinit sdhci_pxav2_probe(struct
> platform_device *pdev)
> | SDHCI_QUIRK_BROKEN_TIMEOUT_VAL
> | SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN;
>
> + match = of_match_device(of_match_ptr(sdhci_pxav2_of_match),
> &pdev->dev);
> + if (match) {
> + pdata = pxav2_get_mmc_pdata(dev);
> + }
> if (pdata) {
> if (pdata->flags & PXA_FLAG_CARD_PERMANENT) {
> /* on-chip device */
> @@ -218,6 +269,7 @@ static struct platform_driver sdhci_pxav2_driver = {
> .driver = {
> .name = "sdhci-pxav2",
> .owner = THIS_MODULE,
#ifdef CONFIG_OF required, otherwise build fail.
> + .of_match_table = sdhci_pxav2_of_match,
#endif
> .pm = SDHCI_PLTFM_PMOPS,
> },
> .probe = sdhci_pxav2_probe,
> diff --git a/drivers/mmc/host/sdhci-pxav3.c b/drivers/mmc/host/sdhci-pxav3.c
> index f296956..1835c94 100644
> --- a/drivers/mmc/host/sdhci-pxav3.c
> +++ b/drivers/mmc/host/sdhci-pxav3.c
> +#ifdef CONFIG_OF
> +static const struct of_device_id sdhci_pxav3_of_match[] = {
> + {
> + .compatible = "mrvl,pxav3-mmc",
> + },
> + {},
> +};
> +MODULE_DEVICE_TABLE(of, sdhci_pxav3_of_match);
> +
> +static struct sdhci_pxa_platdata *pxav3_get_mmc_pdata(struct device *dev)
> +{
> +}
> +#else
> +static inline struct sdhci_pxa_platdata pxav3_get_mmc_pdata(struct device
> *dev)
Should be static struct sdhci_pxa_platdata *pxav3_get_mmc_pdata(struct
device *dev)
> +{
> + return NULL;
> +}
> +#endif
> +
> @@ -263,6 +312,7 @@ static int __devexit sdhci_pxav3_remove(struct
> platform_device *pdev)
> static struct platform_driver sdhci_pxav3_driver = {
> .driver = {
> .name = "sdhci-pxav3",
#ifdef CONFIG_OF required, otherwise build fail.
> + .of_match_table = sdhci_pxav3_of_match,
#endif
> .owner = THIS_MODULE,
> .pm = SDHCI_PLTFM_PMOPS,
> },
> --
> Chris Ball <[email protected]> <http://printf.net/>
> One Laptop Per Child
> --
> To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html