Commit e3913f56a26dbb49758370320dac477ab0324631

Authored by Nikita Kiryanov
Committed by Tom Rini
1 parent d23d8d7e06

omap_hsmmc: add driver check for write protection

Add check for write protection in omap mmc driver.

Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
Signed-off-by: Igor Grinberg <grinberg@compulab.co.il>
Reviewed-by: Tom Rini <trini@ti.com>

Showing 28 changed files with 47 additions and 36 deletions Side-by-side Diff

arch/arm/cpu/armv7/am33xx/board.c
... ... @@ -56,11 +56,11 @@
56 56 {
57 57 int ret;
58 58  
59   - ret = omap_mmc_init(0, 0, 0, -1);
  59 + ret = omap_mmc_init(0, 0, 0, -1, -1);
60 60 if (ret)
61 61 return ret;
62 62  
63   - return omap_mmc_init(1, 0, 0, -1);
  63 + return omap_mmc_init(1, 0, 0, -1, -1);
64 64 }
65 65 #endif
66 66  
arch/arm/cpu/armv7/omap-common/boot-common.c
... ... @@ -64,11 +64,11 @@
64 64 {
65 65 switch (spl_boot_device()) {
66 66 case BOOT_DEVICE_MMC1:
67   - omap_mmc_init(0, 0, 0, -1);
  67 + omap_mmc_init(0, 0, 0, -1, -1);
68 68 break;
69 69 case BOOT_DEVICE_MMC2:
70 70 case BOOT_DEVICE_MMC2_2:
71   - omap_mmc_init(1, 0, 0, -1);
  71 + omap_mmc_init(1, 0, 0, -1, -1);
72 72 break;
73 73 }
74 74 return 0;
arch/arm/cpu/armv7/omap3/board.c
... ... @@ -98,11 +98,11 @@
98 98 {
99 99 switch (spl_boot_device()) {
100 100 case BOOT_DEVICE_MMC1:
101   - omap_mmc_init(0, 0, 0, -1);
  101 + omap_mmc_init(0, 0, 0, -1, -1);
102 102 break;
103 103 case BOOT_DEVICE_MMC2:
104 104 case BOOT_DEVICE_MMC2_2:
105   - omap_mmc_init(1, 0, 0, -1);
  105 + omap_mmc_init(1, 0, 0, -1, -1);
106 106 break;
107 107 }
108 108 return 0;
arch/arm/include/asm/omap_mmc.h
... ... @@ -161,7 +161,8 @@
161 161 #define mmc_reg_out(addr, mask, val)\
162 162 writel((readl(addr) & (~(mask))) | ((val) & (mask)), (addr))
163 163  
164   -int omap_mmc_init(int dev_index, uint host_caps_mask, uint f_max, int cd_gpio);
  164 +int omap_mmc_init(int dev_index, uint host_caps_mask, uint f_max, int cd_gpio,
  165 + int wp_gpio);
165 166  
166 167  
167 168 #endif /* OMAP_MMC_H_ */
board/cm_t35/cm_t35.c
... ... @@ -390,7 +390,7 @@
390 390  
391 391 int board_mmc_init(bd_t *bis)
392 392 {
393   - return omap_mmc_init(0, 0, 0, -1);
  393 + return omap_mmc_init(0, 0, 0, -1, 59);
394 394 }
395 395 #endif
396 396  
board/comelit/dig297/dig297.c
... ... @@ -147,7 +147,7 @@
147 147 #ifdef CONFIG_GENERIC_MMC
148 148 int board_mmc_init(bd_t *bis)
149 149 {
150   - return omap_mmc_init(0, 0, 0, -1);
  150 + return omap_mmc_init(0, 0, 0, -1, -1);
151 151 }
152 152 #endif
153 153  
board/corscience/tricorder/tricorder.c
... ... @@ -80,7 +80,7 @@
80 80 #if defined(CONFIG_GENERIC_MMC) && !(defined(CONFIG_SPL_BUILD))
81 81 int board_mmc_init(bd_t *bis)
82 82 {
83   - return omap_mmc_init(0, 0, 0, -1);
  83 + return omap_mmc_init(0, 0, 0, -1, -1);
84 84 }
85 85 #endif
86 86  
board/htkw/mcx/mcx.c
... ... @@ -114,7 +114,7 @@
114 114 #if defined(CONFIG_OMAP_HSMMC) && !defined(CONFIG_SPL_BUILD)
115 115 int board_mmc_init(bd_t *bis)
116 116 {
117   - return omap_mmc_init(0, 0, 0, -1);
  117 + return omap_mmc_init(0, 0, 0, -1, -1);
118 118 }
119 119 #endif
120 120  
board/isee/igep00x0/igep00x0.c
... ... @@ -150,7 +150,7 @@
150 150 #if defined(CONFIG_GENERIC_MMC) && !defined(CONFIG_SPL_BUILD)
151 151 int board_mmc_init(bd_t *bis)
152 152 {
153   - return omap_mmc_init(0, 0, 0, -1);
  153 + return omap_mmc_init(0, 0, 0, -1, -1);
154 154 }
155 155 #endif
156 156  
board/logicpd/am3517evm/am3517evm.c
... ... @@ -135,7 +135,7 @@
135 135 #if defined(CONFIG_GENERIC_MMC) && !defined(CONFIG_SPL_BUILD)
136 136 int board_mmc_init(bd_t *bis)
137 137 {
138   - return omap_mmc_init(0, 0, 0, -1);
  138 + return omap_mmc_init(0, 0, 0, -1, -1);
139 139 }
140 140 #endif
141 141  
board/logicpd/omap3som/omap3logic.c
... ... @@ -140,7 +140,7 @@
140 140 #if defined(CONFIG_GENERIC_MMC) && !defined(CONFIG_SPL_BUILD)
141 141 int board_mmc_init(bd_t *bis)
142 142 {
143   - return omap_mmc_init(0, 0, 0, -1);
  143 + return omap_mmc_init(0, 0, 0, -1, -1);
144 144 }
145 145 #endif
146 146  
board/logicpd/zoom1/zoom1.c
... ... @@ -92,7 +92,7 @@
92 92 #ifdef CONFIG_GENERIC_MMC
93 93 int board_mmc_init(bd_t *bis)
94 94 {
95   - return omap_mmc_init(0, 0, 0, -1);
  95 + return omap_mmc_init(0, 0, 0, -1, -1);
96 96 }
97 97 #endif
98 98  
board/logicpd/zoom2/zoom2.c
... ... @@ -183,7 +183,7 @@
183 183 #ifdef CONFIG_GENERIC_MMC
184 184 int board_mmc_init(bd_t *bis)
185 185 {
186   - return omap_mmc_init(0, 0, 0, -1);
  186 + return omap_mmc_init(0, 0, 0, -1, -1);
187 187 }
188 188 #endif
189 189  
board/matrix_vision/mvblx/mvblx.c
... ... @@ -106,8 +106,8 @@
106 106 #ifdef CONFIG_GENERIC_MMC
107 107 int board_mmc_init(bd_t *bis)
108 108 {
109   - omap_mmc_init(0, 0, 0, -1);
110   - omap_mmc_init(1, 0, 0, -1);
  109 + omap_mmc_init(0, 0, 0, -1, -1);
  110 + omap_mmc_init(1, 0, 0, -1, -1);
111 111 return 0;
112 112 }
113 113 #endif
board/nokia/rx51/rx51.c
... ... @@ -671,8 +671,8 @@
671 671 */
672 672 int board_mmc_init(bd_t *bis)
673 673 {
674   - omap_mmc_init(0, 0, 0, -1);
675   - omap_mmc_init(1, 0, 0, -1);
  674 + omap_mmc_init(0, 0, 0, -1, -1);
  675 + omap_mmc_init(1, 0, 0, -1, -1);
676 676 return 0;
677 677 }
... ... @@ -392,7 +392,7 @@
392 392 #if defined(CONFIG_GENERIC_MMC) && !defined(CONFIG_SPL_BUILD)
393 393 int board_mmc_init(bd_t *bis)
394 394 {
395   - return omap_mmc_init(0, 0, 0, -1);
  395 + return omap_mmc_init(0, 0, 0, -1, -1);
396 396 }
397 397 #endif
board/pandora/pandora.c
... ... @@ -139,7 +139,7 @@
139 139 #ifdef CONFIG_GENERIC_MMC
140 140 int board_mmc_init(bd_t *bis)
141 141 {
142   - return omap_mmc_init(0, 0, 0, -1);
  142 + return omap_mmc_init(0, 0, 0, -1, -1);
143 143 }
144 144 #endif
board/technexion/twister/twister.c
... ... @@ -147,7 +147,7 @@
147 147 !defined(CONFIG_SPL_BUILD)
148 148 int board_mmc_init(bd_t *bis)
149 149 {
150   - return omap_mmc_init(0, 0, 0, -1);
  150 + return omap_mmc_init(0, 0, 0, -1, -1);
151 151 }
152 152 #endif
153 153  
board/teejet/mt_ventoux/mt_ventoux.c
... ... @@ -304,7 +304,7 @@
304 304 !defined(CONFIG_SPL_BUILD)
305 305 int board_mmc_init(bd_t *bis)
306 306 {
307   - return omap_mmc_init(0, 0, 0, -1);
  307 + return omap_mmc_init(0, 0, 0, -1, -1);
308 308 }
309 309 #endif
310 310  
board/ti/am3517crane/am3517crane.c
... ... @@ -78,7 +78,7 @@
78 78 #if defined(CONFIG_GENERIC_MMC) && !defined(CONFIG_SPL_BUILD)
79 79 int board_mmc_init(bd_t *bis)
80 80 {
81   - return omap_mmc_init(0, 0, 0, -1);
  81 + return omap_mmc_init(0, 0, 0, -1, -1);
82 82 }
83 83 #endif
board/ti/beagle/beagle.c
... ... @@ -532,7 +532,7 @@
532 532 #if defined(CONFIG_GENERIC_MMC) && !defined(CONFIG_SPL_BUILD)
533 533 int board_mmc_init(bd_t *bis)
534 534 {
535   - return omap_mmc_init(0, 0, 0, -1);
  535 + return omap_mmc_init(0, 0, 0, -1, -1);
536 536 }
537 537 #endif
538 538  
... ... @@ -277,7 +277,7 @@
277 277 #if defined(CONFIG_GENERIC_MMC) && !defined(CONFIG_SPL_BUILD)
278 278 int board_mmc_init(bd_t *bis)
279 279 {
280   - return omap_mmc_init(0, 0, 0, -1);
  280 + return omap_mmc_init(0, 0, 0, -1, -1);
281 281 }
282 282 #endif
board/ti/omap5_evm/evm.c
... ... @@ -94,8 +94,8 @@
94 94 #if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_GENERIC_MMC)
95 95 int board_mmc_init(bd_t *bis)
96 96 {
97   - omap_mmc_init(0, 0, 0, -1);
98   - omap_mmc_init(1, 0, 0, -1);
  97 + omap_mmc_init(0, 0, 0, -1, -1);
  98 + omap_mmc_init(1, 0, 0, -1, -1);
99 99 return 0;
100 100 }
101 101 #endif
board/ti/panda/panda.c
... ... @@ -179,7 +179,7 @@
179 179 #if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_GENERIC_MMC)
180 180 int board_mmc_init(bd_t *bis)
181 181 {
182   - return omap_mmc_init(0, 0, 0, -1);
  182 + return omap_mmc_init(0, 0, 0, -1, -1);
183 183 }
184 184 #endif
185 185  
board/ti/sdp3430/sdp.c
... ... @@ -209,7 +209,7 @@
209 209 #ifdef CONFIG_GENERIC_MMC
210 210 int board_mmc_init(bd_t *bis)
211 211 {
212   - return omap_mmc_init(0, 0, 0, -1);
  212 + return omap_mmc_init(0, 0, 0, -1, -1);
213 213 }
214 214 #endif
board/ti/sdp4430/sdp.c
... ... @@ -108,8 +108,8 @@
108 108 #if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_GENERIC_MMC)
109 109 int board_mmc_init(bd_t *bis)
110 110 {
111   - omap_mmc_init(0, 0, 0, -1);
112   - omap_mmc_init(1, 0, 0, -1);
  111 + omap_mmc_init(0, 0, 0, -1, -1);
  112 + omap_mmc_init(1, 0, 0, -1, -1);
113 113 return 0;
114 114 }
115 115 #endif
board/timll/devkit8000/devkit8000.c
... ... @@ -136,7 +136,7 @@
136 136 #if defined(CONFIG_GENERIC_MMC) && !defined(CONFIG_SPL_BUILD)
137 137 int board_mmc_init(bd_t *bis)
138 138 {
139   - return omap_mmc_init(0, 0, 0, -1);
  139 + return omap_mmc_init(0, 0, 0, -1, -1);
140 140 }
141 141 #endif
142 142  
drivers/mmc/omap_hsmmc.c
... ... @@ -42,6 +42,7 @@
42 42 struct omap_hsmmc_data {
43 43 struct hsmmc *base_addr;
44 44 int cd_gpio;
  45 + int wp_gpio;
45 46 };
46 47  
47 48 /* If we fail after 1 second wait, something is really bad */
... ... @@ -74,6 +75,12 @@
74 75 int cd_gpio = ((struct omap_hsmmc_data *)mmc->priv)->cd_gpio;
75 76 return gpio_get_value(cd_gpio);
76 77 }
  78 +
  79 +static int omap_mmc_getwp(struct mmc *mmc)
  80 +{
  81 + int wp_gpio = ((struct omap_hsmmc_data *)mmc->priv)->wp_gpio;
  82 + return gpio_get_value(wp_gpio);
  83 +}
77 84 #else
78 85 static inline int omap_mmc_setup_gpio_in(int gpio, const char *label)
79 86 {
... ... @@ -81,6 +88,7 @@
81 88 }
82 89  
83 90 #define omap_mmc_getcd NULL
  91 +#define omap_mmc_getwp NULL
84 92 #endif
85 93  
86 94 #if defined(CONFIG_OMAP44XX) && defined(CONFIG_TWL6030_POWER)
... ... @@ -580,7 +588,8 @@
580 588 writel(readl(&mmc_base->sysctl) | CEN_ENABLE, &mmc_base->sysctl);
581 589 }
582 590  
583   -int omap_mmc_init(int dev_index, uint host_caps_mask, uint f_max, int cd_gpio)
  591 +int omap_mmc_init(int dev_index, uint host_caps_mask, uint f_max, int cd_gpio,
  592 + int wp_gpio)
584 593 {
585 594 struct mmc *mmc = &hsmmc_dev[dev_index];
586 595 struct omap_hsmmc_data *priv_data = &hsmmc_dev_data[dev_index];
... ... @@ -590,7 +599,7 @@
590 599 mmc->set_ios = mmc_set_ios;
591 600 mmc->init = mmc_init_setup;
592 601 mmc->getcd = omap_mmc_getcd;
593   - mmc->getwp = NULL;
  602 + mmc->getwp = omap_mmc_getwp;
594 603 mmc->priv = priv_data;
595 604  
596 605 switch (dev_index) {
... ... @@ -612,6 +621,7 @@
612 621 return 1;
613 622 }
614 623 priv_data->cd_gpio = omap_mmc_setup_gpio_in(cd_gpio, "mmc_cd");
  624 + priv_data->wp_gpio = omap_mmc_setup_gpio_in(wp_gpio, "mmc_wp");
615 625 mmc->voltages = MMC_VDD_32_33 | MMC_VDD_33_34 | MMC_VDD_165_195;
616 626 mmc->host_caps = (MMC_MODE_4BIT | MMC_MODE_HS_52MHz | MMC_MODE_HS |
617 627 MMC_MODE_HC) & ~host_caps_mask;