sdhci-pltfm.c (cf40a76e7d5874bb25f4404eecc58a2e033af885) | sdhci-pltfm.c (8199d312dad790327cb290e5a856fdbfbc861a96) |
---|---|
1/* 2 * sdhci-pltfm.c Support for SDHCI platform devices 3 * Copyright (c) 2009 Intel Corporation 4 * 5 * Copyright (c) 2007, 2011 Freescale Semiconductor, Inc. 6 * Copyright (c) 2009 MontaVista Software, Inc. 7 * 8 * Authors: Xiaobo Xie <X.Xie@freescale.com> --- 16 unchanged lines hidden (view full) --- 25/* Supports: 26 * SDHCI platform devices 27 * 28 * Inspired by sdhci-pci.c, by Pierre Ossman 29 */ 30 31#include <linux/err.h> 32#include <linux/module.h> | 1/* 2 * sdhci-pltfm.c Support for SDHCI platform devices 3 * Copyright (c) 2009 Intel Corporation 4 * 5 * Copyright (c) 2007, 2011 Freescale Semiconductor, Inc. 6 * Copyright (c) 2009 MontaVista Software, Inc. 7 * 8 * Authors: Xiaobo Xie <X.Xie@freescale.com> --- 16 unchanged lines hidden (view full) --- 25/* Supports: 26 * SDHCI platform devices 27 * 28 * Inspired by sdhci-pci.c, by Pierre Ossman 29 */ 30 31#include <linux/err.h> 32#include <linux/module.h> |
33#include <linux/property.h> |
|
33#include <linux/of.h> 34#ifdef CONFIG_PPC 35#include <asm/machdep.h> 36#endif 37#include "sdhci-pltfm.h" 38 39unsigned int sdhci_pltfm_clk_get_max_clock(struct sdhci_host *host) 40{ --- 5 unchanged lines hidden (view full) --- 46 47static const struct sdhci_ops sdhci_pltfm_ops = { 48 .set_clock = sdhci_set_clock, 49 .set_bus_width = sdhci_set_bus_width, 50 .reset = sdhci_reset, 51 .set_uhs_signaling = sdhci_set_uhs_signaling, 52}; 53 | 34#include <linux/of.h> 35#ifdef CONFIG_PPC 36#include <asm/machdep.h> 37#endif 38#include "sdhci-pltfm.h" 39 40unsigned int sdhci_pltfm_clk_get_max_clock(struct sdhci_host *host) 41{ --- 5 unchanged lines hidden (view full) --- 47 48static const struct sdhci_ops sdhci_pltfm_ops = { 49 .set_clock = sdhci_set_clock, 50 .set_bus_width = sdhci_set_bus_width, 51 .reset = sdhci_reset, 52 .set_uhs_signaling = sdhci_set_uhs_signaling, 53}; 54 |
54#ifdef CONFIG_OF 55static bool sdhci_of_wp_inverted(struct device_node *np) | 55static bool sdhci_wp_inverted(struct device *dev) |
56{ | 56{ |
57 if (of_get_property(np, "sdhci,wp-inverted", NULL) || 58 of_get_property(np, "wp-inverted", NULL)) | 57 if (device_property_present(dev, "sdhci,wp-inverted") || 58 device_property_present(dev, "wp-inverted")) |
59 return true; 60 61 /* Old device trees don't have the wp-inverted property. */ 62#ifdef CONFIG_PPC 63 return machine_is(mpc837x_rdb) || machine_is(mpc837x_mds); 64#else 65 return false; 66#endif /* CONFIG_PPC */ 67} 68 | 59 return true; 60 61 /* Old device trees don't have the wp-inverted property. */ 62#ifdef CONFIG_PPC 63 return machine_is(mpc837x_rdb) || machine_is(mpc837x_mds); 64#else 65 return false; 66#endif /* CONFIG_PPC */ 67} 68 |
69void sdhci_get_of_property(struct platform_device *pdev) | 69#ifdef CONFIG_OF 70static void sdhci_get_compatibility(struct platform_device *pdev) |
70{ | 71{ |
72 struct sdhci_host *host = platform_get_drvdata(pdev); |
|
71 struct device_node *np = pdev->dev.of_node; | 73 struct device_node *np = pdev->dev.of_node; |
74 75 if (!np) 76 return; 77 78 if (of_device_is_compatible(np, "fsl,p2020-rev1-esdhc")) 79 host->quirks |= SDHCI_QUIRK_BROKEN_DMA; 80 81 if (of_device_is_compatible(np, "fsl,p2020-esdhc") || 82 of_device_is_compatible(np, "fsl,p1010-esdhc") || 83 of_device_is_compatible(np, "fsl,t4240-esdhc") || 84 of_device_is_compatible(np, "fsl,mpc8536-esdhc")) 85 host->quirks |= SDHCI_QUIRK_BROKEN_TIMEOUT_VAL; 86} 87#else 88void sdhci_get_compatibility(struct platform_device *pdev) {} 89#endif /* CONFIG_OF */ 90 91void sdhci_get_property(struct platform_device *pdev) 92{ 93 struct device *dev = &pdev->dev; |
|
72 struct sdhci_host *host = platform_get_drvdata(pdev); 73 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); 74 u32 bus_width; 75 | 94 struct sdhci_host *host = platform_get_drvdata(pdev); 95 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); 96 u32 bus_width; 97 |
76 if (of_get_property(np, "sdhci,auto-cmd12", NULL)) | 98 if (device_property_present(dev, "sdhci,auto-cmd12")) |
77 host->quirks |= SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12; 78 | 99 host->quirks |= SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12; 100 |
79 if (of_get_property(np, "sdhci,1-bit-only", NULL) || 80 (of_property_read_u32(np, "bus-width", &bus_width) == 0 && | 101 if (device_property_present(dev, "sdhci,1-bit-only") || 102 (device_property_read_u32(dev, "bus-width", &bus_width) == 0 && |
81 bus_width == 1)) 82 host->quirks |= SDHCI_QUIRK_FORCE_1_BIT_DATA; 83 | 103 bus_width == 1)) 104 host->quirks |= SDHCI_QUIRK_FORCE_1_BIT_DATA; 105 |
84 if (sdhci_of_wp_inverted(np)) | 106 if (sdhci_wp_inverted(dev)) |
85 host->quirks |= SDHCI_QUIRK_INVERTED_WRITE_PROTECT; 86 | 107 host->quirks |= SDHCI_QUIRK_INVERTED_WRITE_PROTECT; 108 |
87 if (of_get_property(np, "broken-cd", NULL)) | 109 if (device_property_present(dev, "broken-cd")) |
88 host->quirks |= SDHCI_QUIRK_BROKEN_CARD_DETECTION; 89 | 110 host->quirks |= SDHCI_QUIRK_BROKEN_CARD_DETECTION; 111 |
90 if (of_get_property(np, "no-1-8-v", NULL)) | 112 if (device_property_present(dev, "no-1-8-v")) |
91 host->quirks2 |= SDHCI_QUIRK2_NO_1_8_V; 92 | 113 host->quirks2 |= SDHCI_QUIRK2_NO_1_8_V; 114 |
93 if (of_device_is_compatible(np, "fsl,p2020-rev1-esdhc")) 94 host->quirks |= SDHCI_QUIRK_BROKEN_DMA; | 115 sdhci_get_compatibility(pdev); |
95 | 116 |
96 if (of_device_is_compatible(np, "fsl,p2020-esdhc") || 97 of_device_is_compatible(np, "fsl,p1010-esdhc") || 98 of_device_is_compatible(np, "fsl,t4240-esdhc") || 99 of_device_is_compatible(np, "fsl,mpc8536-esdhc")) 100 host->quirks |= SDHCI_QUIRK_BROKEN_TIMEOUT_VAL; | 117 device_property_read_u32(dev, "clock-frequency", &pltfm_host->clock); |
101 | 118 |
102 of_property_read_u32(np, "clock-frequency", &pltfm_host->clock); 103 104 if (of_find_property(np, "keep-power-in-suspend", NULL)) | 119 if (device_property_present(dev, "keep-power-in-suspend")) |
105 host->mmc->pm_caps |= MMC_PM_KEEP_POWER; 106 | 120 host->mmc->pm_caps |= MMC_PM_KEEP_POWER; 121 |
107 if (of_property_read_bool(np, "wakeup-source") || 108 of_property_read_bool(np, "enable-sdio-wakeup")) /* legacy */ | 122 if (device_property_read_bool(dev, "wakeup-source") || 123 device_property_read_bool(dev, "enable-sdio-wakeup")) /* legacy */ |
109 host->mmc->pm_caps |= MMC_PM_WAKE_SDIO_IRQ; 110} | 124 host->mmc->pm_caps |= MMC_PM_WAKE_SDIO_IRQ; 125} |
111#else 112void sdhci_get_of_property(struct platform_device *pdev) {} 113#endif /* CONFIG_OF */ 114EXPORT_SYMBOL_GPL(sdhci_get_of_property); | 126EXPORT_SYMBOL_GPL(sdhci_get_property); |
115 116struct sdhci_host *sdhci_pltfm_init(struct platform_device *pdev, 117 const struct sdhci_pltfm_data *pdata, 118 size_t priv_size) 119{ 120 struct sdhci_host *host; 121 struct resource *iomem; 122 void __iomem *ioaddr; --- 56 unchanged lines hidden (view full) --- 179{ 180 struct sdhci_host *host; 181 int ret = 0; 182 183 host = sdhci_pltfm_init(pdev, pdata, priv_size); 184 if (IS_ERR(host)) 185 return PTR_ERR(host); 186 | 127 128struct sdhci_host *sdhci_pltfm_init(struct platform_device *pdev, 129 const struct sdhci_pltfm_data *pdata, 130 size_t priv_size) 131{ 132 struct sdhci_host *host; 133 struct resource *iomem; 134 void __iomem *ioaddr; --- 56 unchanged lines hidden (view full) --- 191{ 192 struct sdhci_host *host; 193 int ret = 0; 194 195 host = sdhci_pltfm_init(pdev, pdata, priv_size); 196 if (IS_ERR(host)) 197 return PTR_ERR(host); 198 |
187 sdhci_get_of_property(pdev); | 199 sdhci_get_property(pdev); |
188 189 ret = sdhci_add_host(host); 190 if (ret) 191 sdhci_pltfm_free(pdev); 192 193 return ret; 194} 195EXPORT_SYMBOL_GPL(sdhci_pltfm_register); --- 75 unchanged lines hidden --- | 200 201 ret = sdhci_add_host(host); 202 if (ret) 203 sdhci_pltfm_free(pdev); 204 205 return ret; 206} 207EXPORT_SYMBOL_GPL(sdhci_pltfm_register); --- 75 unchanged lines hidden --- |