mmc: tegra: Disable card and host clk separately
[linux-2.6.git] / drivers / mmc / host / sdhci-tegra.c
1 /*
2  * Copyright (C) 2010 Google, Inc.
3  *
4  * Copyright (c) 2012, NVIDIA CORPORATION.  All rights reserved.
5  *
6  * This software is licensed under the terms of the GNU General Public
7  * License version 2, as published by the Free Software Foundation, and
8  * may be copied, distributed, and modified under those terms.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  */
16
17 #include <linux/err.h>
18 #include <linux/init.h>
19 #include <linux/platform_device.h>
20 #include <linux/clk.h>
21 #include <linux/io.h>
22 #include <linux/gpio.h>
23 #include <linux/slab.h>
24 #include <linux/mmc/card.h>
25 #include <linux/mmc/host.h>
26 #include <linux/mmc/sd.h>
27 #include <linux/regulator/consumer.h>
28 #include <linux/delay.h>
29
30 #include <mach/gpio.h>
31 #include <mach/sdhci.h>
32 #include <mach/io_dpd.h>
33
34 #include "sdhci-pltfm.h"
35
36 #define SDHCI_VENDOR_CLOCK_CNTRL        0x100
37 #define SDHCI_VENDOR_CLOCK_CNTRL_SDMMC_CLK      0x1
38 #define SDHCI_VENDOR_CLOCK_CNTRL_PADPIPE_CLKEN_OVERRIDE 0x8
39 #define SDHCI_VENDOR_CLOCK_CNTRL_SPI_MODE_CLKEN_OVERRIDE        0x4
40 #define SDHCI_VENDOR_CLOCK_CNTRL_BASE_CLK_FREQ_SHIFT    8
41 #define SDHCI_VENDOR_CLOCK_CNTRL_TAP_VALUE_SHIFT        16
42 #define SDHCI_VENDOR_CLOCK_CNTRL_SDR50_TUNING           0x20
43
44 #define SDHCI_VENDOR_MISC_CNTRL         0x120
45 #define SDHCI_VENDOR_MISC_CNTRL_ENABLE_SDR104_SUPPORT   0x8
46 #define SDHCI_VENDOR_MISC_CNTRL_ENABLE_SDR50_SUPPORT    0x10
47 #define SDHCI_VENDOR_MISC_CNTRL_ENABLE_SD_3_0   0x20
48
49 #define SDMMC_SDMEMCOMPPADCTRL  0x1E0
50 #define SDMMC_SDMEMCOMPPADCTRL_VREF_SEL_MASK    0xF
51
52 #define SDMMC_AUTO_CAL_CONFIG   0x1E4
53 #define SDMMC_AUTO_CAL_CONFIG_AUTO_CAL_ENABLE   0x20000000
54 #define SDMMC_AUTO_CAL_CONFIG_AUTO_CAL_PD_OFFSET_SHIFT  0x8
55 #define SDMMC_AUTO_CAL_CONFIG_AUTO_CAL_PD_OFFSET        0x70
56 #define SDMMC_AUTO_CAL_CONFIG_AUTO_CAL_PU_OFFSET        0x62
57
58 #define SDHOST_1V8_OCR_MASK     0x8
59 #define SDHOST_HIGH_VOLT_MIN    2700000
60 #define SDHOST_HIGH_VOLT_MAX    3600000
61 #define SDHOST_LOW_VOLT_MIN     1800000
62 #define SDHOST_LOW_VOLT_MAX     1800000
63
64 #define TEGRA_SDHOST_MIN_FREQ   50000000
65 #define TEGRA2_SDHOST_STD_FREQ  50000000
66 #define TEGRA3_SDHOST_STD_FREQ  104000000
67
68 #define SD_SEND_TUNING_PATTERN  19
69 #define MAX_TAP_VALUES  256
70
71 static unsigned int tegra_sdhost_min_freq;
72 static unsigned int tegra_sdhost_std_freq;
73 static void tegra_3x_sdhci_set_card_clock(struct sdhci_host *sdhci, unsigned int clock);
74 static void tegra3_sdhci_post_reset_init(struct sdhci_host *sdhci);
75
76 static unsigned int tegra3_sdhost_max_clk[4] = {
77         208000000,      104000000,      208000000,      104000000 };
78
79 struct tegra_sdhci_hw_ops{
80         /* Set the internal clk and card clk.*/
81         void    (*set_card_clock)(struct sdhci_host *sdhci, unsigned int clock);
82         /* Post reset vendor registers configuration */
83         void    (*sdhost_init)(struct sdhci_host *sdhci);
84 };
85
86 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
87 static struct tegra_sdhci_hw_ops tegra_2x_sdhci_ops = {
88 };
89 #endif
90
91 #ifdef CONFIG_ARCH_TEGRA_3x_SOC
92 static struct tegra_sdhci_hw_ops tegra_3x_sdhci_ops = {
93         .set_card_clock = tegra_3x_sdhci_set_card_clock,
94         .sdhost_init = tegra3_sdhci_post_reset_init,
95 };
96 #endif
97
98 struct tegra_sdhci_host {
99         bool    clk_enabled;
100         struct regulator *vdd_io_reg;
101         struct regulator *vdd_slot_reg;
102         /* Pointer to the chip specific HW ops */
103         struct tegra_sdhci_hw_ops *hw_ops;
104         /* Host controller instance */
105         unsigned int instance;
106         /* vddio_min */
107         unsigned int vddio_min_uv;
108         /* vddio_max */
109         unsigned int vddio_max_uv;
110         /* max clk supported by the platform */
111         unsigned int max_clk_limit;
112         struct tegra_io_dpd *dpd;
113         bool card_present;
114         bool is_rail_enabled;
115 };
116
117 static u32 tegra_sdhci_readl(struct sdhci_host *host, int reg)
118 {
119         u32 val;
120
121         if (unlikely(reg == SDHCI_PRESENT_STATE)) {
122                 /* Use wp_gpio here instead? */
123                 val = readl(host->ioaddr + reg);
124                 return val | SDHCI_WRITE_PROTECT;
125         }
126
127         return readl(host->ioaddr + reg);
128 }
129
130 static u16 tegra_sdhci_readw(struct sdhci_host *host, int reg)
131 {
132 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
133         if (unlikely(reg == SDHCI_HOST_VERSION)) {
134                 /* Erratum: Version register is invalid in HW. */
135                 return SDHCI_SPEC_200;
136         }
137 #endif
138         return readw(host->ioaddr + reg);
139 }
140
141 static void tegra_sdhci_writel(struct sdhci_host *host, u32 val, int reg)
142 {
143         /* Seems like we're getting spurious timeout and crc errors, so
144          * disable signalling of them. In case of real errors software
145          * timers should take care of eventually detecting them.
146          */
147         if (unlikely(reg == SDHCI_SIGNAL_ENABLE))
148                 val &= ~(SDHCI_INT_TIMEOUT|SDHCI_INT_CRC);
149
150         writel(val, host->ioaddr + reg);
151
152 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
153         if (unlikely(reg == SDHCI_INT_ENABLE)) {
154                 /* Erratum: Must enable block gap interrupt detection */
155                 u8 gap_ctrl = readb(host->ioaddr + SDHCI_BLOCK_GAP_CONTROL);
156                 if (val & SDHCI_INT_CARD_INT)
157                         gap_ctrl |= 0x8;
158                 else
159                         gap_ctrl &= ~0x8;
160                 writeb(gap_ctrl, host->ioaddr + SDHCI_BLOCK_GAP_CONTROL);
161         }
162 #endif
163 }
164
165 static unsigned int tegra_sdhci_get_cd(struct sdhci_host *sdhci)
166 {
167         struct sdhci_pltfm_host *pltfm_host = sdhci_priv(sdhci);
168         struct tegra_sdhci_host *tegra_host = pltfm_host->priv;
169
170         return tegra_host->card_present;
171 }
172
173 static unsigned int tegra_sdhci_get_ro(struct sdhci_host *sdhci)
174 {
175         struct platform_device *pdev = to_platform_device(mmc_dev(sdhci->mmc));
176         struct tegra_sdhci_platform_data *plat;
177
178         plat = pdev->dev.platform_data;
179
180         if (!gpio_is_valid(plat->wp_gpio))
181                 return -1;
182
183         return gpio_get_value(plat->wp_gpio);
184 }
185
186 static void tegra3_sdhci_post_reset_init(struct sdhci_host *sdhci)
187 {
188         u16 misc_ctrl;
189         u32 vendor_ctrl;
190         struct sdhci_pltfm_host *pltfm_host = sdhci_priv(sdhci);
191         struct tegra_sdhci_host *tegra_host = pltfm_host->priv;
192         struct platform_device *pdev = to_platform_device(mmc_dev(sdhci->mmc));
193         struct tegra_sdhci_platform_data *plat;
194
195         plat = pdev->dev.platform_data;
196         /* Set the base clock frequency */
197         vendor_ctrl = sdhci_readl(sdhci, SDHCI_VENDOR_CLOCK_CNTRL);
198         vendor_ctrl &= ~(0xFF << SDHCI_VENDOR_CLOCK_CNTRL_BASE_CLK_FREQ_SHIFT);
199         vendor_ctrl |= (tegra3_sdhost_max_clk[tegra_host->instance] / 1000000) <<
200                 SDHCI_VENDOR_CLOCK_CNTRL_BASE_CLK_FREQ_SHIFT;
201         vendor_ctrl |= SDHCI_VENDOR_CLOCK_CNTRL_PADPIPE_CLKEN_OVERRIDE;
202         vendor_ctrl &= ~SDHCI_VENDOR_CLOCK_CNTRL_SPI_MODE_CLKEN_OVERRIDE;
203
204         /* Set tap delay */
205         if (plat->tap_delay) {
206                 vendor_ctrl &= ~(0xFF <<
207                         SDHCI_VENDOR_CLOCK_CNTRL_TAP_VALUE_SHIFT);
208                 vendor_ctrl |= (plat->tap_delay <<
209                         SDHCI_VENDOR_CLOCK_CNTRL_TAP_VALUE_SHIFT);
210         }
211         /* Enable frequency tuning for SDR50 mode */
212         vendor_ctrl |= SDHCI_VENDOR_CLOCK_CNTRL_SDR50_TUNING;
213         sdhci_writel(sdhci, vendor_ctrl, SDHCI_VENDOR_CLOCK_CNTRL);
214
215         /* Enable SDHOST v3.0 support */
216         misc_ctrl = sdhci_readw(sdhci, SDHCI_VENDOR_MISC_CNTRL);
217         misc_ctrl |= SDHCI_VENDOR_MISC_CNTRL_ENABLE_SD_3_0 |
218                 SDHCI_VENDOR_MISC_CNTRL_ENABLE_SDR104_SUPPORT |
219                 SDHCI_VENDOR_MISC_CNTRL_ENABLE_SDR50_SUPPORT;
220         sdhci_writew(sdhci, misc_ctrl, SDHCI_VENDOR_MISC_CNTRL);
221 }
222
223 static int tegra_sdhci_set_uhs_signaling(struct sdhci_host *host,
224                 unsigned int uhs)
225 {
226         u16 clk, ctrl_2;
227         ctrl_2 = sdhci_readw(host, SDHCI_HOST_CONTROL2);
228
229         /* Select Bus Speed Mode for host */
230         ctrl_2 &= ~SDHCI_CTRL_UHS_MASK;
231         switch (uhs) {
232         case MMC_TIMING_UHS_SDR12:
233                 ctrl_2 |= SDHCI_CTRL_UHS_SDR12;
234                 break;
235         case MMC_TIMING_UHS_SDR25:
236                 ctrl_2 |= SDHCI_CTRL_UHS_SDR25;
237                 break;
238         case MMC_TIMING_UHS_SDR50:
239                 ctrl_2 |= SDHCI_CTRL_UHS_SDR50;
240                 break;
241         case MMC_TIMING_UHS_SDR104:
242                 ctrl_2 |= SDHCI_CTRL_UHS_SDR104;
243                 break;
244         case MMC_TIMING_UHS_DDR50:
245                 ctrl_2 |= SDHCI_CTRL_UHS_DDR50;
246                 break;
247         }
248
249         sdhci_writew(host, ctrl_2, SDHCI_HOST_CONTROL2);
250
251         if (uhs == MMC_TIMING_UHS_DDR50) {
252                 clk = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
253                 clk &= ~(0xFF << SDHCI_DIVIDER_SHIFT);
254                 clk |= 1 << SDHCI_DIVIDER_SHIFT;
255                 sdhci_writew(host, clk, SDHCI_CLOCK_CONTROL);
256         }
257         return 0;
258 }
259
260 static void tegra_sdhci_reset_exit(struct sdhci_host *sdhci, u8 mask)
261 {
262         struct sdhci_pltfm_host *pltfm_host = sdhci_priv(sdhci);
263         struct tegra_sdhci_host *tegra_host = pltfm_host->priv;
264
265         if (mask & SDHCI_RESET_ALL) {
266                 if (tegra_host->hw_ops->sdhost_init)
267                         tegra_host->hw_ops->sdhost_init(sdhci);
268         }
269 }
270
271 static void sdhci_status_notify_cb(int card_present, void *dev_id)
272 {
273         struct sdhci_host *sdhci = (struct sdhci_host *)dev_id;
274         struct platform_device *pdev = to_platform_device(mmc_dev(sdhci->mmc));
275         struct tegra_sdhci_platform_data *plat;
276         unsigned int status, oldstat;
277
278         pr_debug("%s: card_present %d\n", mmc_hostname(sdhci->mmc),
279                 card_present);
280
281         plat = pdev->dev.platform_data;
282         if (!plat->mmc_data.status) {
283                 mmc_detect_change(sdhci->mmc, 0);
284                 return;
285         }
286
287         status = plat->mmc_data.status(mmc_dev(sdhci->mmc));
288
289         oldstat = plat->mmc_data.card_present;
290         plat->mmc_data.card_present = status;
291         if (status ^ oldstat) {
292                 pr_debug("%s: Slot status change detected (%d -> %d)\n",
293                         mmc_hostname(sdhci->mmc), oldstat, status);
294                 if (status && !plat->mmc_data.built_in)
295                         mmc_detect_change(sdhci->mmc, (5 * HZ) / 2);
296                 else
297                         mmc_detect_change(sdhci->mmc, 0);
298         }
299 }
300
301 static irqreturn_t carddetect_irq(int irq, void *data)
302 {
303         struct sdhci_host *sdhost = (struct sdhci_host *)data;
304         struct sdhci_pltfm_host *pltfm_host = sdhci_priv(sdhost);
305         struct tegra_sdhci_host *tegra_host = pltfm_host->priv;
306         struct platform_device *pdev = to_platform_device(mmc_dev(sdhost->mmc));
307         struct tegra_sdhci_platform_data *plat;
308
309         plat = pdev->dev.platform_data;
310
311         tegra_host->card_present = (gpio_get_value(plat->cd_gpio) == 0);
312
313         if (tegra_host->card_present) {
314                 if (!tegra_host->is_rail_enabled) {
315                         if (tegra_host->vdd_slot_reg)
316                                 regulator_enable(tegra_host->vdd_slot_reg);
317                         if (tegra_host->vdd_io_reg)
318                                 regulator_enable(tegra_host->vdd_io_reg);
319                         tegra_host->is_rail_enabled = 1;
320                 }
321         } else {
322                 if (tegra_host->is_rail_enabled) {
323                         if (tegra_host->vdd_io_reg)
324                                 regulator_disable(tegra_host->vdd_io_reg);
325                         if (tegra_host->vdd_slot_reg)
326                                 regulator_disable(tegra_host->vdd_slot_reg);
327                         tegra_host->is_rail_enabled = 0;
328                 }
329         }
330
331         tasklet_schedule(&sdhost->card_tasklet);
332         return IRQ_HANDLED;
333 };
334
335 static int tegra_sdhci_8bit(struct sdhci_host *host, int bus_width)
336 {
337         struct platform_device *pdev = to_platform_device(mmc_dev(host->mmc));
338         struct tegra_sdhci_platform_data *plat;
339         u32 ctrl;
340
341         plat = pdev->dev.platform_data;
342
343         ctrl = sdhci_readb(host, SDHCI_HOST_CONTROL);
344         if (plat->is_8bit && bus_width == MMC_BUS_WIDTH_8) {
345                 ctrl &= ~SDHCI_CTRL_4BITBUS;
346                 ctrl |= SDHCI_CTRL_8BITBUS;
347         } else {
348                 ctrl &= ~SDHCI_CTRL_8BITBUS;
349                 if (bus_width == MMC_BUS_WIDTH_4)
350                         ctrl |= SDHCI_CTRL_4BITBUS;
351                 else
352                         ctrl &= ~SDHCI_CTRL_4BITBUS;
353         }
354         sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL);
355         return 0;
356 }
357
358 static void tegra_sdhci_set_clk_rate(struct sdhci_host *sdhci,
359         unsigned int clock)
360 {
361         struct sdhci_pltfm_host *pltfm_host = sdhci_priv(sdhci);
362         struct tegra_sdhci_host *tegra_host = pltfm_host->priv;
363         unsigned int clk_rate;
364
365         if (sdhci->mmc->card &&
366                 mmc_card_ddr_mode(sdhci->mmc->card)) {
367                 /*
368                  * In ddr mode, tegra sdmmc controller clock frequency
369                  * should be double the card clock frequency.
370                  */
371                  clk_rate = clock * 2;
372         } else {
373                 if (clock <= tegra_sdhost_min_freq)
374                         clk_rate = tegra_sdhost_min_freq;
375                 else if (clock <= tegra_sdhost_std_freq)
376                         clk_rate = tegra_sdhost_std_freq;
377                 else
378                         clk_rate = clock;
379
380                 /*
381                  * In SDR50 mode, run the sdmmc controller at 208MHz to ensure
382                  * the core voltage is at 1.2V. If the core voltage is below 1.2V, CRC
383                  * errors would occur during data transfers.
384                  */
385                 if ((sdhci->mmc->ios.timing == MMC_TIMING_UHS_SDR50) &&
386                         (clk_rate == tegra_sdhost_std_freq))
387                         clk_rate <<= 1;
388         }
389
390         if (tegra_host->max_clk_limit &&
391                 (clk_rate > tegra_host->max_clk_limit))
392                 clk_rate = tegra_host->max_clk_limit;
393
394         clk_set_rate(pltfm_host->clk, clk_rate);
395         sdhci->max_clk = clk_get_rate(pltfm_host->clk);
396 }
397
398 static void tegra_3x_sdhci_set_card_clock(struct sdhci_host *sdhci, unsigned int clock)
399 {
400         int div;
401         u16 clk;
402         unsigned long timeout;
403         u8 ctrl;
404
405         if (clock && clock == sdhci->clock)
406                 return;
407
408         /*
409          * Disable the card clock before disabling the internal
410          * clock to avoid abnormal clock waveforms.
411          */
412         clk = sdhci_readw(sdhci, SDHCI_CLOCK_CONTROL);
413         clk &= ~SDHCI_CLOCK_CARD_EN;
414         sdhci_writew(sdhci, clk, SDHCI_CLOCK_CONTROL);
415         sdhci_writew(sdhci, 0, SDHCI_CLOCK_CONTROL);
416
417         if (clock == 0)
418                 goto out;
419         if (sdhci->mmc->ios.timing == MMC_TIMING_UHS_DDR50) {
420                 div = 1;
421                 goto set_clk;
422         }
423
424         if (sdhci->version >= SDHCI_SPEC_300) {
425                 /* Version 3.00 divisors must be a multiple of 2. */
426                 if (sdhci->max_clk <= clock) {
427                         div = 1;
428                 } else {
429                         for (div = 2; div < SDHCI_MAX_DIV_SPEC_300; div += 2) {
430                                 if ((sdhci->max_clk / div) <= clock)
431                                         break;
432                         }
433                 }
434         } else {
435                 /* Version 2.00 divisors must be a power of 2. */
436                 for (div = 1; div < SDHCI_MAX_DIV_SPEC_200; div *= 2) {
437                         if ((sdhci->max_clk / div) <= clock)
438                                 break;
439                 }
440         }
441         div >>= 1;
442
443         /*
444          * Tegra3 sdmmc controller internal clock will not be stabilized when
445          * we use a clock divider value greater than 4. The WAR is as follows.
446          * - Enable internal clock.
447          * - Wait for 5 usec and do a dummy write.
448          * - Poll for clk stable.
449          */
450 set_clk:
451         clk = (div & SDHCI_DIV_MASK) << SDHCI_DIVIDER_SHIFT;
452         clk |= ((div & SDHCI_DIV_HI_MASK) >> SDHCI_DIV_MASK_LEN)
453                 << SDHCI_DIVIDER_HI_SHIFT;
454         clk |= SDHCI_CLOCK_INT_EN;
455         sdhci_writew(sdhci, clk, SDHCI_CLOCK_CONTROL);
456
457         /* Wait for 5 usec */
458         udelay(5);
459
460         /* Do a dummy write */
461         ctrl = sdhci_readb(sdhci, SDHCI_CAPABILITIES);
462         ctrl |= 1;
463         sdhci_writeb(sdhci, ctrl, SDHCI_CAPABILITIES);
464
465         /* Wait max 20 ms */
466         timeout = 20;
467         while (!((clk = sdhci_readw(sdhci, SDHCI_CLOCK_CONTROL))
468                 & SDHCI_CLOCK_INT_STABLE)) {
469                 if (timeout == 0) {
470                         dev_err(mmc_dev(sdhci->mmc), "Internal clock never stabilised\n");
471                         return;
472                 }
473                 timeout--;
474                 mdelay(1);
475         }
476
477         clk |= SDHCI_CLOCK_CARD_EN;
478         sdhci_writew(sdhci, clk, SDHCI_CLOCK_CONTROL);
479 out:
480         sdhci->clock = clock;
481 }
482
483 static void tegra_sdhci_set_clock(struct sdhci_host *sdhci, unsigned int clock)
484 {
485         struct sdhci_pltfm_host *pltfm_host = sdhci_priv(sdhci);
486         struct tegra_sdhci_host *tegra_host = pltfm_host->priv;
487         u8 ctrl;
488
489         pr_debug("%s %s %u enabled=%u\n", __func__,
490                 mmc_hostname(sdhci->mmc), clock, tegra_host->clk_enabled);
491
492         if (clock) {
493                 /* bring out sd instance from io dpd mode */
494                 tegra_io_dpd_disable(tegra_host->dpd);
495
496                 if (!tegra_host->clk_enabled) {
497                         clk_enable(pltfm_host->clk);
498                         ctrl = sdhci_readb(sdhci, SDHCI_VENDOR_CLOCK_CNTRL);
499                         ctrl |= SDHCI_VENDOR_CLOCK_CNTRL_SDMMC_CLK;
500                         sdhci_writeb(sdhci, ctrl, SDHCI_VENDOR_CLOCK_CNTRL);
501                         tegra_host->clk_enabled = true;
502                 }
503                 tegra_sdhci_set_clk_rate(sdhci, clock);
504                 if (tegra_host->hw_ops->set_card_clock)
505                         tegra_host->hw_ops->set_card_clock(sdhci, clock);
506         } else if (!clock && tegra_host->clk_enabled) {
507                 if (tegra_host->hw_ops->set_card_clock)
508                         tegra_host->hw_ops->set_card_clock(sdhci, clock);
509                 ctrl = sdhci_readb(sdhci, SDHCI_VENDOR_CLOCK_CNTRL);
510                 ctrl &= ~SDHCI_VENDOR_CLOCK_CNTRL_SDMMC_CLK;
511                 sdhci_writeb(sdhci, ctrl, SDHCI_VENDOR_CLOCK_CNTRL);
512                 clk_disable(pltfm_host->clk);
513                 tegra_host->clk_enabled = false;
514                 /* io dpd enable call for sd instance */
515                 tegra_io_dpd_enable(tegra_host->dpd);
516         }
517 }
518
519 static int tegra_sdhci_signal_voltage_switch(struct sdhci_host *sdhci,
520         unsigned int signal_voltage)
521 {
522         struct sdhci_pltfm_host *pltfm_host = sdhci_priv(sdhci);
523         struct tegra_sdhci_host *tegra_host = pltfm_host->priv;
524         unsigned int min_uV = SDHOST_HIGH_VOLT_MIN;
525         unsigned int max_uV = SDHOST_HIGH_VOLT_MAX;
526         unsigned int rc = 0;
527         u16 clk, ctrl;
528         unsigned int val;
529
530         /* Switch OFF the card clock to prevent glitches on the clock line */
531         clk = sdhci_readw(sdhci, SDHCI_CLOCK_CONTROL);
532         clk &= ~SDHCI_CLOCK_CARD_EN;
533         sdhci_writew(sdhci, clk, SDHCI_CLOCK_CONTROL);
534
535         ctrl = sdhci_readw(sdhci, SDHCI_HOST_CONTROL2);
536         if (signal_voltage == MMC_SIGNAL_VOLTAGE_180) {
537                 ctrl |= SDHCI_CTRL_VDD_180;
538                 min_uV = SDHOST_LOW_VOLT_MIN;
539                 max_uV = SDHOST_LOW_VOLT_MAX;
540         } else if (signal_voltage == MMC_SIGNAL_VOLTAGE_330) {
541                 if (ctrl & SDHCI_CTRL_VDD_180)
542                         ctrl &= ~SDHCI_CTRL_VDD_180;
543         }
544         sdhci_writew(sdhci, ctrl, SDHCI_HOST_CONTROL2);
545
546         /* Switch the I/O rail voltage */
547         if (tegra_host->vdd_io_reg) {
548                 rc = regulator_set_voltage(tegra_host->vdd_io_reg,
549                         min_uV, max_uV);
550                 if (rc) {
551                         dev_err(mmc_dev(sdhci->mmc), "switching to 1.8V"
552                         "failed . Switching back to 3.3V\n");
553                         regulator_set_voltage(tegra_host->vdd_io_reg,
554                                 SDHOST_HIGH_VOLT_MIN,
555                                 SDHOST_HIGH_VOLT_MAX);
556                         goto out;
557                 }
558         }
559
560         /* Wait for 10 msec for the voltage to be switched */
561         mdelay(10);
562
563         /* Enable the card clock */
564         clk |= SDHCI_CLOCK_CARD_EN;
565         sdhci_writew(sdhci, clk, SDHCI_CLOCK_CONTROL);
566
567         /* Wait for 1 msec after enabling clock */
568         mdelay(1);
569
570         if (signal_voltage == MMC_SIGNAL_VOLTAGE_180) {
571                 /* Do Auto Calibration for 1.8V signal voltage */
572                 val = sdhci_readl(sdhci, SDMMC_AUTO_CAL_CONFIG);
573                 val |= SDMMC_AUTO_CAL_CONFIG_AUTO_CAL_ENABLE;
574                 /* Program Auto cal PD offset(bits 8:14) */
575                 val &= ~(0x7F <<
576                         SDMMC_AUTO_CAL_CONFIG_AUTO_CAL_PD_OFFSET_SHIFT);
577                 val |= (SDMMC_AUTO_CAL_CONFIG_AUTO_CAL_PD_OFFSET <<
578                         SDMMC_AUTO_CAL_CONFIG_AUTO_CAL_PD_OFFSET_SHIFT);
579                 /* Program Auto cal PU offset(bits 0:6) */
580                 val &= ~0x7F;
581                 val |= SDMMC_AUTO_CAL_CONFIG_AUTO_CAL_PU_OFFSET;
582                 sdhci_writel(sdhci, val, SDMMC_AUTO_CAL_CONFIG);
583
584                 val = sdhci_readl(sdhci, SDMMC_SDMEMCOMPPADCTRL);
585                 val &= ~SDMMC_SDMEMCOMPPADCTRL_VREF_SEL_MASK;
586                 val |= 0x7;
587                 sdhci_writel(sdhci, val, SDMMC_SDMEMCOMPPADCTRL);
588         }
589
590         return rc;
591 out:
592         /* Enable the card clock */
593         clk |= SDHCI_CLOCK_CARD_EN;
594         sdhci_writew(sdhci, clk, SDHCI_CLOCK_CONTROL);
595
596         /* Wait for 1 msec for the clock to stabilize */
597         mdelay(1);
598
599         return rc;
600 }
601
602 static void tegra_sdhci_reset(struct sdhci_host *sdhci, u8 mask)
603 {
604         unsigned long timeout;
605
606         sdhci_writeb(sdhci, mask, SDHCI_SOFTWARE_RESET);
607
608         /* Wait max 100 ms */
609         timeout = 100;
610
611         /* hw clears the bit when it's done */
612         while (sdhci_readb(sdhci, SDHCI_SOFTWARE_RESET) & mask) {
613                 if (timeout == 0) {
614                         dev_err(mmc_dev(sdhci->mmc), "Reset 0x%x never"
615                                 "completed.\n", (int)mask);
616                         return;
617                 }
618                 timeout--;
619                 mdelay(1);
620         }
621 }
622
623 static void sdhci_tegra_set_tap_delay(struct sdhci_host *sdhci,
624         unsigned int tap_delay)
625 {
626         u32 vendor_ctrl;
627
628         /* Max tap delay value is 255 */
629         BUG_ON(tap_delay > MAX_TAP_VALUES);
630
631         vendor_ctrl = sdhci_readl(sdhci, SDHCI_VENDOR_CLOCK_CNTRL);
632         vendor_ctrl &= ~(0xFF << SDHCI_VENDOR_CLOCK_CNTRL_TAP_VALUE_SHIFT);
633         vendor_ctrl |= (tap_delay << SDHCI_VENDOR_CLOCK_CNTRL_TAP_VALUE_SHIFT);
634         sdhci_writel(sdhci, vendor_ctrl, SDHCI_VENDOR_CLOCK_CNTRL);
635 }
636
637 static void sdhci_tegra_clear_set_irqs(struct sdhci_host *host,
638         u32 clear, u32 set)
639 {
640         u32 ier;
641
642         ier = sdhci_readl(host, SDHCI_INT_ENABLE);
643         ier &= ~clear;
644         ier |= set;
645         sdhci_writel(host, ier, SDHCI_INT_ENABLE);
646         sdhci_writel(host, ier, SDHCI_SIGNAL_ENABLE);
647 }
648
649 static int sdhci_tegra_run_frequency_tuning(struct sdhci_host *sdhci)
650 {
651         int err = 0;
652         u8 ctrl;
653         u32 ier;
654         u32 mask;
655         unsigned int timeout = 10;
656         int flags;
657         u32 intstatus;
658
659         /*
660          * As per the Host Controller spec v3.00, tuning command
661          * generates Buffer Read Ready interrupt only, so enable that.
662          */
663         ier = sdhci_readl(sdhci, SDHCI_INT_ENABLE);
664         sdhci_tegra_clear_set_irqs(sdhci, ier, SDHCI_INT_DATA_AVAIL |
665                 SDHCI_INT_DATA_CRC);
666
667         mask = SDHCI_CMD_INHIBIT | SDHCI_DATA_INHIBIT;
668         while (sdhci_readl(sdhci, SDHCI_PRESENT_STATE) & mask) {
669                 if (timeout == 0) {
670                         dev_err(mmc_dev(sdhci->mmc), "Controller never"
671                                 "released inhibit bit(s).\n");
672                         err = -ETIMEDOUT;
673                         goto out;
674                 }
675                 timeout--;
676                 mdelay(1);
677         }
678
679         ctrl = sdhci_readb(sdhci, SDHCI_HOST_CONTROL2);
680         ctrl &= ~SDHCI_CTRL_TUNED_CLK;
681         sdhci_writeb(sdhci, ctrl, SDHCI_HOST_CONTROL2);
682
683         ctrl = sdhci_readb(sdhci, SDHCI_HOST_CONTROL2);
684         ctrl |= SDHCI_CTRL_EXEC_TUNING;
685         sdhci_writeb(sdhci, ctrl, SDHCI_HOST_CONTROL2);
686
687         /*
688          * In response to CMD19, the card sends 64 bytes of tuning
689          * block to the Host Controller. So we set the block size
690          * to 64 here.
691          */
692         sdhci_writew(sdhci, SDHCI_MAKE_BLKSZ(7, 64), SDHCI_BLOCK_SIZE);
693
694         sdhci_writeb(sdhci, 0xE, SDHCI_TIMEOUT_CONTROL);
695
696         sdhci_writeb(sdhci, SDHCI_TRNS_READ, SDHCI_TRANSFER_MODE);
697
698         sdhci_writel(sdhci, 0x0, SDHCI_ARGUMENT);
699
700         /* Set the cmd flags */
701         flags = SDHCI_CMD_RESP_SHORT | SDHCI_CMD_CRC | SDHCI_CMD_DATA;
702         /* Issue the command */
703         sdhci_writew(sdhci, SDHCI_MAKE_CMD(
704                 SD_SEND_TUNING_PATTERN, flags), SDHCI_COMMAND);
705
706         timeout = 5;
707         do {
708                 timeout--;
709                 mdelay(1);
710                 intstatus = sdhci_readl(sdhci, SDHCI_INT_STATUS);
711                 if (intstatus) {
712                         sdhci_writel(sdhci, intstatus, SDHCI_INT_STATUS);
713                         break;
714                 }
715         } while(timeout);
716
717         if ((intstatus & SDHCI_INT_DATA_AVAIL) &&
718                 !(intstatus & SDHCI_INT_DATA_CRC)) {
719                 err = 0;
720                 sdhci->tuning_done = 1;
721         } else {
722                 tegra_sdhci_reset(sdhci, SDHCI_RESET_CMD);
723                 tegra_sdhci_reset(sdhci, SDHCI_RESET_DATA);
724                 err = -EIO;
725         }
726
727         if (sdhci->tuning_done) {
728                 sdhci->tuning_done = 0;
729                 ctrl = sdhci_readb(sdhci, SDHCI_HOST_CONTROL2);
730                 if (!(ctrl & SDHCI_CTRL_EXEC_TUNING) &&
731                         (ctrl & SDHCI_CTRL_TUNED_CLK))
732                         err = 0;
733                 else
734                         err = -EIO;
735         }
736         mdelay(1);
737 out:
738         sdhci_tegra_clear_set_irqs(sdhci, SDHCI_INT_DATA_AVAIL, ier);
739         return err;
740 }
741
742 static int sdhci_tegra_execute_tuning(struct sdhci_host *sdhci)
743 {
744         int err;
745         u16 ctrl_2;
746         u8 *tap_delay_status;
747         unsigned int i = 0;
748         unsigned int temp_low_pass_tap = 0;
749         unsigned int temp_pass_window = 0;
750         unsigned int best_low_pass_tap = 0;
751         unsigned int best_pass_window = 0;
752
753         /* Tuning is valid only in SDR104 and SDR50 modes */
754         ctrl_2 = sdhci_readw(sdhci, SDHCI_HOST_CONTROL2);
755         if (!(((ctrl_2 & SDHCI_CTRL_UHS_MASK) == SDHCI_CTRL_UHS_SDR104) ||
756                 (((ctrl_2 & SDHCI_CTRL_UHS_MASK) == SDHCI_CTRL_UHS_SDR50) &&
757                 (sdhci->flags & SDHCI_SDR50_NEEDS_TUNING))))
758                         return 0;
759
760         tap_delay_status = kzalloc(MAX_TAP_VALUES, GFP_KERNEL);
761         if (tap_delay_status == NULL) {
762                 dev_err(mmc_dev(sdhci->mmc), "failed to allocate memory"
763                         "for storing tap_delay_status\n");
764                 err = -ENOMEM;
765                 goto out;
766         }
767
768         /*
769          * Set each tap delay value and run frequency tuning. After each
770          * run, update the tap delay status as working or not working.
771          */
772         do {
773                 /* Set the tap delay */
774                 sdhci_tegra_set_tap_delay(sdhci, i);
775
776                 /* Run frequency tuning */
777                 err = sdhci_tegra_run_frequency_tuning(sdhci);
778
779                 /* Update whether the tap delay worked or not */
780                 tap_delay_status[i] = (err) ? 0: 1;
781                 i++;
782         } while (i < 0xFF);
783
784         /* Find the best possible tap range */
785         for (i = 0; i < 0xFF; i++) {
786                 temp_pass_window = 0;
787
788                 /* Find the first passing tap in the current window */
789                 if (tap_delay_status[i]) {
790                         temp_low_pass_tap = i;
791
792                         /* Find the pass window */
793                         do {
794                                 temp_pass_window++;
795                                 i++;
796                                 if (i > 0xFF)
797                                         break;
798                         } while (tap_delay_status[i]);
799
800                         if ((temp_pass_window > best_pass_window) && (temp_pass_window > 1)){
801                                 best_low_pass_tap = temp_low_pass_tap;
802                                 best_pass_window = temp_pass_window;
803                         }
804                 }
805         }
806
807
808         pr_debug("%s: best pass tap window: start %d, end %d\n",
809                 mmc_hostname(sdhci->mmc), best_low_pass_tap,
810                 (best_low_pass_tap + best_pass_window));
811
812         /* Set the best tap */
813         sdhci_tegra_set_tap_delay(sdhci,
814                 (best_low_pass_tap + ((best_pass_window * 3) / 4)));
815
816         /* Run frequency tuning */
817         err = sdhci_tegra_run_frequency_tuning(sdhci);
818
819 out:
820         if (tap_delay_status)
821                 kfree(tap_delay_status);
822
823         return err;
824 }
825
826 static int tegra_sdhci_suspend(struct sdhci_host *sdhci, pm_message_t state)
827 {
828         struct sdhci_pltfm_host *pltfm_host = sdhci_priv(sdhci);
829         struct tegra_sdhci_host *tegra_host = pltfm_host->priv;
830
831         tegra_sdhci_set_clock(sdhci, 0);
832
833         /* Disable the power rails if any */
834         if (tegra_host->card_present) {
835                 if (tegra_host->is_rail_enabled) {
836                         if (tegra_host->vdd_io_reg)
837                                 regulator_disable(tegra_host->vdd_io_reg);
838                         if (tegra_host->vdd_slot_reg)
839                                 regulator_disable(tegra_host->vdd_slot_reg);
840                         tegra_host->is_rail_enabled = 0;
841                 }
842         }
843
844         return 0;
845 }
846
847 static int tegra_sdhci_resume(struct sdhci_host *sdhci)
848 {
849         struct sdhci_pltfm_host *pltfm_host = sdhci_priv(sdhci);
850         struct tegra_sdhci_host *tegra_host = pltfm_host->priv;
851
852         /* Enable the power rails if any */
853         if (tegra_host->card_present) {
854                 if (!tegra_host->is_rail_enabled) {
855                         if (tegra_host->vdd_slot_reg)
856                                 regulator_enable(tegra_host->vdd_slot_reg);
857                         if (tegra_host->vdd_io_reg) {
858                                 regulator_enable(tegra_host->vdd_io_reg);
859                                 tegra_sdhci_signal_voltage_switch(sdhci, MMC_SIGNAL_VOLTAGE_330);
860                         }
861                         tegra_host->is_rail_enabled = 1;
862                 }
863         }
864         /* Setting the min identification clock of freq 400KHz */
865         tegra_sdhci_set_clock(sdhci, 400000);
866
867         /* Reset the controller and power on if MMC_KEEP_POWER flag is set*/
868         if (sdhci->mmc->pm_flags & MMC_PM_KEEP_POWER) {
869                 tegra_sdhci_reset(sdhci, SDHCI_RESET_ALL);
870                 sdhci_writeb(sdhci, SDHCI_POWER_ON, SDHCI_POWER_CONTROL);
871                 sdhci->pwr = 0;
872         }
873
874         return 0;
875 }
876
877 static struct sdhci_ops tegra_sdhci_ops = {
878         .get_ro     = tegra_sdhci_get_ro,
879         .get_cd     = tegra_sdhci_get_cd,
880         .read_l     = tegra_sdhci_readl,
881         .read_w     = tegra_sdhci_readw,
882         .write_l    = tegra_sdhci_writel,
883         .platform_8bit_width = tegra_sdhci_8bit,
884         .set_clock  = tegra_sdhci_set_clock,
885         .suspend    = tegra_sdhci_suspend,
886         .resume     = tegra_sdhci_resume,
887         .platform_reset_exit = tegra_sdhci_reset_exit,
888         .set_uhs_signaling = tegra_sdhci_set_uhs_signaling,
889         .switch_signal_voltage = tegra_sdhci_signal_voltage_switch,
890         .execute_freq_tuning = sdhci_tegra_execute_tuning,
891 };
892
893 static struct sdhci_pltfm_data sdhci_tegra_pdata = {
894         .quirks = SDHCI_QUIRK_BROKEN_TIMEOUT_VAL |
895 #ifndef CONFIG_ARCH_TEGRA_2x_SOC
896                   SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK |
897                   SDHCI_QUIRK_NON_STD_VOLTAGE_SWITCHING |
898 #endif
899 #ifdef CONFIG_ARCH_TEGRA_3x_SOC
900                   SDHCI_QUIRK_NONSTANDARD_CLOCK |
901                   SDHCI_QUIRK_NON_STANDARD_TUNING |
902 #endif
903                   SDHCI_QUIRK_SINGLE_POWER_WRITE |
904                   SDHCI_QUIRK_NO_HISPD_BIT |
905                   SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC |
906                   SDHCI_QUIRK_NO_CALC_MAX_DISCARD_TO |
907                   SDHCI_QUIRK_BROKEN_CARD_DETECTION,
908         .ops  = &tegra_sdhci_ops,
909 };
910
911 static int __devinit sdhci_tegra_probe(struct platform_device *pdev)
912 {
913         struct sdhci_pltfm_host *pltfm_host;
914         struct tegra_sdhci_platform_data *plat;
915         struct sdhci_host *host;
916         struct tegra_sdhci_host *tegra_host;
917         struct clk *clk;
918         int rc;
919
920         host = sdhci_pltfm_init(pdev, &sdhci_tegra_pdata);
921         if (IS_ERR(host))
922                 return PTR_ERR(host);
923
924         pltfm_host = sdhci_priv(host);
925
926         plat = pdev->dev.platform_data;
927
928         if (plat == NULL) {
929                 dev_err(mmc_dev(host->mmc), "missing platform data\n");
930                 rc = -ENXIO;
931                 goto err_no_plat;
932         }
933
934         tegra_host = kzalloc(sizeof(struct tegra_sdhci_host), GFP_KERNEL);
935         if (tegra_host == NULL) {
936                 dev_err(mmc_dev(host->mmc), "failed to allocate tegra host\n");
937                 rc = -ENOMEM;
938                 goto err_no_mem;
939         }
940
941 #ifdef CONFIG_MMC_EMBEDDED_SDIO
942         if (plat->mmc_data.embedded_sdio)
943                 mmc_set_embedded_sdio_data(host->mmc,
944                         &plat->mmc_data.embedded_sdio->cis,
945                         &plat->mmc_data.embedded_sdio->cccr,
946                         plat->mmc_data.embedded_sdio->funcs,
947                         plat->mmc_data.embedded_sdio->num_funcs);
948 #endif
949
950         if (gpio_is_valid(plat->power_gpio)) {
951                 rc = gpio_request(plat->power_gpio, "sdhci_power");
952                 if (rc) {
953                         dev_err(mmc_dev(host->mmc),
954                                 "failed to allocate power gpio\n");
955                         goto err_power_req;
956                 }
957                 tegra_gpio_enable(plat->power_gpio);
958                 gpio_direction_output(plat->power_gpio, 1);
959         }
960
961         if (gpio_is_valid(plat->cd_gpio)) {
962                 rc = gpio_request(plat->cd_gpio, "sdhci_cd");
963                 if (rc) {
964                         dev_err(mmc_dev(host->mmc),
965                                 "failed to allocate cd gpio\n");
966                         goto err_cd_req;
967                 }
968                 tegra_gpio_enable(plat->cd_gpio);
969                 gpio_direction_input(plat->cd_gpio);
970
971                 tegra_host->card_present = (gpio_get_value(plat->cd_gpio) == 0);
972
973                 rc = request_threaded_irq(gpio_to_irq(plat->cd_gpio), NULL,
974                                  carddetect_irq,
975                                  IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
976                                  mmc_hostname(host->mmc), host);
977
978                 if (rc) {
979                         dev_err(mmc_dev(host->mmc), "request irq error\n");
980                         goto err_cd_irq_req;
981                 }
982                 rc = enable_irq_wake(gpio_to_irq(plat->cd_gpio));
983                 if (rc < 0)
984                         dev_err(mmc_dev(host->mmc),
985                                 "SD card wake-up event registration"
986                                         "failed with eroor: %d\n", rc);
987
988         } else if (plat->mmc_data.register_status_notify) {
989                 plat->mmc_data.register_status_notify(sdhci_status_notify_cb, host);
990         }
991
992         if (plat->mmc_data.status) {
993                 plat->mmc_data.card_present = plat->mmc_data.status(mmc_dev(host->mmc));
994         }
995
996         if (gpio_is_valid(plat->wp_gpio)) {
997                 rc = gpio_request(plat->wp_gpio, "sdhci_wp");
998                 if (rc) {
999                         dev_err(mmc_dev(host->mmc),
1000                                 "failed to allocate wp gpio\n");
1001                         goto err_wp_req;
1002                 }
1003                 tegra_gpio_enable(plat->wp_gpio);
1004                 gpio_direction_input(plat->wp_gpio);
1005         }
1006
1007         /*
1008          * If there is no card detect gpio, assume that the
1009          * card is always present.
1010          */
1011         if (!gpio_is_valid(plat->cd_gpio))
1012                 tegra_host->card_present = 1;
1013
1014         if (!plat->mmc_data.built_in) {
1015                 if (plat->mmc_data.ocr_mask & SDHOST_1V8_OCR_MASK) {
1016                         tegra_host->vddio_min_uv = SDHOST_LOW_VOLT_MIN;
1017                         tegra_host->vddio_max_uv = SDHOST_LOW_VOLT_MAX;
1018                 } else {
1019                         /*
1020                          * Set the minV and maxV to default
1021                          * voltage range of 2.7V - 3.6V
1022                          */
1023                         tegra_host->vddio_min_uv = SDHOST_HIGH_VOLT_MIN;
1024                         tegra_host->vddio_max_uv = SDHOST_HIGH_VOLT_MAX;
1025                 }
1026                 tegra_host->vdd_io_reg = regulator_get(mmc_dev(host->mmc), "vddio_sdmmc");
1027                 if (IS_ERR_OR_NULL(tegra_host->vdd_io_reg)) {
1028                         dev_err(mmc_dev(host->mmc), "%s regulator not found: %ld\n",
1029                                 "vddio_sdmmc", PTR_ERR(tegra_host->vdd_io_reg));
1030                         tegra_host->vdd_io_reg = NULL;
1031                 } else {
1032                         rc = regulator_set_voltage(tegra_host->vdd_io_reg,
1033                                 tegra_host->vddio_min_uv,
1034                                 tegra_host->vddio_max_uv);
1035                         if (rc) {
1036                                 dev_err(mmc_dev(host->mmc), "%s regulator_set_voltage failed: %d",
1037                                         "vddio_sdmmc", rc);
1038                         }
1039                 }
1040
1041                 tegra_host->vdd_slot_reg = regulator_get(mmc_dev(host->mmc), "vddio_sd_slot");
1042                 if (IS_ERR_OR_NULL(tegra_host->vdd_slot_reg)) {
1043                         dev_err(mmc_dev(host->mmc), "%s regulator not found: %ld\n",
1044                                 "vddio_sd_slot", PTR_ERR(tegra_host->vdd_slot_reg));
1045                         tegra_host->vdd_slot_reg = NULL;
1046                 }
1047
1048                 if (tegra_host->card_present) {
1049                         if (tegra_host->vdd_slot_reg)
1050                                 regulator_enable(tegra_host->vdd_slot_reg);
1051                         if (tegra_host->vdd_io_reg)
1052                                 regulator_enable(tegra_host->vdd_io_reg);
1053                         tegra_host->is_rail_enabled = 1;
1054                 }
1055         }
1056
1057         clk = clk_get(mmc_dev(host->mmc), NULL);
1058         if (IS_ERR(clk)) {
1059                 dev_err(mmc_dev(host->mmc), "clk err\n");
1060                 rc = PTR_ERR(clk);
1061                 goto err_clk_get;
1062         }
1063         rc = clk_enable(clk);
1064         if (rc != 0)
1065                 goto err_clk_put;
1066         pltfm_host->clk = clk;
1067         pltfm_host->priv = tegra_host;
1068         tegra_host->clk_enabled = true;
1069         tegra_host->max_clk_limit = plat->max_clk_limit;
1070         tegra_host->instance = pdev->id;
1071         tegra_host->dpd = tegra_io_dpd_get(mmc_dev(host->mmc));
1072
1073         host->mmc->pm_caps |= plat->pm_caps;
1074         host->mmc->pm_flags |= plat->pm_flags;
1075
1076         host->mmc->caps |= MMC_CAP_ERASE;
1077         host->mmc->caps |= MMC_CAP_DISABLE;
1078         /* enable 1/8V DDR capable */
1079         host->mmc->caps |= MMC_CAP_1_8V_DDR;
1080         if (plat->is_8bit)
1081                 host->mmc->caps |= MMC_CAP_8_BIT_DATA;
1082         host->mmc->caps |= MMC_CAP_SDIO_IRQ;
1083
1084         host->mmc->pm_caps |= MMC_PM_KEEP_POWER | MMC_PM_IGNORE_PM_NOTIFY;
1085         if (plat->mmc_data.built_in) {
1086                 host->mmc->caps |= MMC_CAP_NONREMOVABLE;
1087                 host->mmc->pm_flags |= MMC_PM_IGNORE_PM_NOTIFY;
1088         }
1089 #ifdef CONFIG_MMC_EMBEDDED_SDIO
1090         /* Do not turn OFF embedded sdio cards as it support Wake on Wireless */
1091         if (plat->mmc_data.embedded_sdio)
1092                 host->mmc->pm_flags |= MMC_PM_KEEP_POWER;
1093 #endif
1094
1095         tegra_sdhost_min_freq = TEGRA_SDHOST_MIN_FREQ;
1096 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
1097         tegra_host->hw_ops = &tegra_2x_sdhci_ops;
1098         tegra_sdhost_std_freq = TEGRA2_SDHOST_STD_FREQ;
1099 #else
1100         tegra_host->hw_ops = &tegra_3x_sdhci_ops;
1101         tegra_sdhost_std_freq = TEGRA3_SDHOST_STD_FREQ;
1102 #endif
1103
1104         rc = sdhci_add_host(host);
1105         if (rc)
1106                 goto err_add_host;
1107
1108         return 0;
1109
1110 err_add_host:
1111         clk_disable(pltfm_host->clk);
1112 err_clk_put:
1113         clk_put(pltfm_host->clk);
1114 err_clk_get:
1115         if (gpio_is_valid(plat->wp_gpio)) {
1116                 tegra_gpio_disable(plat->wp_gpio);
1117                 gpio_free(plat->wp_gpio);
1118         }
1119 err_wp_req:
1120         if (gpio_is_valid(plat->cd_gpio))
1121                 free_irq(gpio_to_irq(plat->cd_gpio), host);
1122 err_cd_irq_req:
1123         if (gpio_is_valid(plat->cd_gpio)) {
1124                 tegra_gpio_disable(plat->cd_gpio);
1125                 gpio_free(plat->cd_gpio);
1126         }
1127 err_cd_req:
1128         if (gpio_is_valid(plat->power_gpio)) {
1129                 tegra_gpio_disable(plat->power_gpio);
1130                 gpio_free(plat->power_gpio);
1131         }
1132 err_power_req:
1133 err_no_mem:
1134         kfree(tegra_host);
1135 err_no_plat:
1136         sdhci_pltfm_free(pdev);
1137         return rc;
1138 }
1139
1140 static int __devexit sdhci_tegra_remove(struct platform_device *pdev)
1141 {
1142         struct sdhci_host *host = platform_get_drvdata(pdev);
1143         struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
1144         struct tegra_sdhci_host *tegra_host = pltfm_host->priv;
1145         struct tegra_sdhci_platform_data *plat;
1146         int dead = (readl(host->ioaddr + SDHCI_INT_STATUS) == 0xffffffff);
1147
1148         sdhci_remove_host(host, dead);
1149
1150         plat = pdev->dev.platform_data;
1151
1152         disable_irq_wake(gpio_to_irq(plat->cd_gpio));
1153
1154         if (tegra_host->vdd_slot_reg) {
1155                 regulator_disable(tegra_host->vdd_slot_reg);
1156                 regulator_put(tegra_host->vdd_slot_reg);
1157         }
1158
1159         if (tegra_host->vdd_io_reg) {
1160                 regulator_disable(tegra_host->vdd_io_reg);
1161                 regulator_put(tegra_host->vdd_io_reg);
1162         }
1163
1164         if (gpio_is_valid(plat->wp_gpio)) {
1165                 tegra_gpio_disable(plat->wp_gpio);
1166                 gpio_free(plat->wp_gpio);
1167         }
1168
1169         if (gpio_is_valid(plat->cd_gpio)) {
1170                 free_irq(gpio_to_irq(plat->cd_gpio), host);
1171                 tegra_gpio_disable(plat->cd_gpio);
1172                 gpio_free(plat->cd_gpio);
1173         }
1174
1175         if (gpio_is_valid(plat->power_gpio)) {
1176                 tegra_gpio_disable(plat->power_gpio);
1177                 gpio_free(plat->power_gpio);
1178         }
1179
1180         if (tegra_host->clk_enabled)
1181                 clk_disable(pltfm_host->clk);
1182         clk_put(pltfm_host->clk);
1183
1184         sdhci_pltfm_free(pdev);
1185         kfree(tegra_host);
1186
1187         return 0;
1188 }
1189
1190 static struct platform_driver sdhci_tegra_driver = {
1191         .driver         = {
1192                 .name   = "sdhci-tegra",
1193                 .owner  = THIS_MODULE,
1194         },
1195         .probe          = sdhci_tegra_probe,
1196         .remove         = __devexit_p(sdhci_tegra_remove),
1197 #ifdef CONFIG_PM
1198         .suspend        = sdhci_pltfm_suspend,
1199         .resume         = sdhci_pltfm_resume,
1200 #endif
1201 };
1202
1203 static int __init sdhci_tegra_init(void)
1204 {
1205         return platform_driver_register(&sdhci_tegra_driver);
1206 }
1207 module_init(sdhci_tegra_init);
1208
1209 static void __exit sdhci_tegra_exit(void)
1210 {
1211         platform_driver_unregister(&sdhci_tegra_driver);
1212 }
1213 module_exit(sdhci_tegra_exit);
1214
1215 MODULE_DESCRIPTION("SDHCI driver for Tegra");
1216 MODULE_AUTHOR(" Google, Inc.");
1217 MODULE_LICENSE("GPL v2");