mmc: tegra: Allow masking of UHS modes
[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/module.h>
19 #include <linux/init.h>
20 #include <linux/platform_device.h>
21 #include <linux/clk.h>
22 #include <linux/io.h>
23 #include <linux/of.h>
24 #include <linux/of_device.h>
25 #include <linux/of_gpio.h>
26 #include <linux/gpio.h>
27 #include <linux/slab.h>
28 #include <linux/mmc/card.h>
29 #include <linux/mmc/host.h>
30 #include <linux/module.h>
31 #include <linux/mmc/sd.h>
32 #include <linux/regulator/consumer.h>
33 #include <linux/delay.h>
34 #include <linux/pm_runtime.h>
35 #include <asm/gpio.h>
36
37 #include <mach/gpio-tegra.h>
38 #include <mach/sdhci.h>
39 #include <mach/io_dpd.h>
40 #include <mach/pinmux.h>
41
42 #include "sdhci-pltfm.h"
43
44 #define SDHCI_VENDOR_CLOCK_CNTRL        0x100
45 #define SDHCI_VENDOR_CLOCK_CNTRL_SDMMC_CLK      0x1
46 #define SDHCI_VENDOR_CLOCK_CNTRL_PADPIPE_CLKEN_OVERRIDE 0x8
47 #define SDHCI_VENDOR_CLOCK_CNTRL_SPI_MODE_CLKEN_OVERRIDE        0x4
48 #define SDHCI_VENDOR_CLOCK_CNTRL_BASE_CLK_FREQ_SHIFT    8
49 #define SDHCI_VENDOR_CLOCK_CNTRL_TAP_VALUE_SHIFT        16
50 #define SDHCI_VENDOR_CLOCK_CNTRL_TRIM_VALUE_SHIFT       24
51 #define SDHCI_VENDOR_CLOCK_CNTRL_SDR50_TUNING           0x20
52
53 #define SDHCI_VENDOR_MISC_CNTRL         0x120
54 #define SDHCI_VENDOR_MISC_CNTRL_ENABLE_SDR104_SUPPORT   0x8
55 #define SDHCI_VENDOR_MISC_CNTRL_ENABLE_SDR50_SUPPORT    0x10
56 #define SDHCI_VENDOR_MISC_CNTRL_ENABLE_DDR50_SUPPORT    0x200
57 #define SDHCI_VENDOR_MISC_CNTRL_ENABLE_SD_3_0   0x20
58 #define SDHCI_VENDOR_MISC_CNTRL_INFINITE_ERASE_TIMEOUT  0x1
59
60 #define SDMMC_SDMEMCOMPPADCTRL  0x1E0
61 #define SDMMC_SDMEMCOMPPADCTRL_VREF_SEL_MASK    0xF
62
63 #define SDMMC_AUTO_CAL_CONFIG   0x1E4
64 #define SDMMC_AUTO_CAL_CONFIG_AUTO_CAL_START    0x80000000
65 #define SDMMC_AUTO_CAL_CONFIG_AUTO_CAL_ENABLE   0x20000000
66 #define SDMMC_AUTO_CAL_CONFIG_AUTO_CAL_PD_OFFSET_SHIFT  0x8
67 #define SDMMC_AUTO_CAL_CONFIG_AUTO_CAL_PD_OFFSET        0x70
68 #define SDMMC_AUTO_CAL_CONFIG_AUTO_CAL_PU_OFFSET        0x62
69
70 #define SDMMC_AUTO_CAL_STATUS   0x1EC
71 #define SDMMC_AUTO_CAL_STATUS_AUTO_CAL_ACTIVE   0x80000000
72 #define SDMMC_AUTO_CAL_STATUS_PULLDOWN_OFFSET   24
73 #define PULLUP_ADJUSTMENT_OFFSET        20
74
75 #define SDHOST_1V8_OCR_MASK     0x8
76 #define SDHOST_HIGH_VOLT_MIN    2700000
77 #define SDHOST_HIGH_VOLT_MAX    3600000
78 #define SDHOST_HIGH_VOLT_2V8    2800000
79 #define SDHOST_LOW_VOLT_MIN     1800000
80 #define SDHOST_LOW_VOLT_MAX     1800000
81
82 #define TEGRA_SDHOST_MIN_FREQ   50000000
83 #define TEGRA2_SDHOST_STD_FREQ  50000000
84 #define TEGRA3_SDHOST_STD_FREQ  104000000
85
86 #define MMC_TUNING_BLOCK_SIZE_BUS_WIDTH_8       128
87 #define MMC_TUNING_BLOCK_SIZE_BUS_WIDTH_4       64
88 #define MAX_TAP_VALUES  256
89
90 #if defined(CONFIG_ARCH_TEGRA_3x_SOC)
91 static void tegra_3x_sdhci_set_card_clock(struct sdhci_host *sdhci, unsigned int clock);
92 static void tegra3_sdhci_post_reset_init(struct sdhci_host *sdhci);
93 #endif
94
95 #if !defined(CONFIG_ARCH_TEGRA_2x_SOC) && !defined(CONFIG_ARCH_TEGRA_3x_SOC)
96 static void tegra11x_sdhci_post_reset_init(struct sdhci_host *sdhci);
97 #endif
98
99 static unsigned int tegra_sdhost_min_freq;
100 static unsigned int tegra_sdhost_std_freq;
101
102 #ifndef CONFIG_ARCH_TEGRA_2x_SOC
103 static unsigned int tegra3_sdhost_max_clk[4] = {
104         208000000,      104000000,      208000000,      104000000 };
105 #endif
106
107 struct tegra_sdhci_hw_ops{
108         /* Set the internal clk and card clk.*/
109         void    (*set_card_clock)(struct sdhci_host *sdhci, unsigned int clock);
110         /* Post reset vendor registers configuration */
111         void    (*sdhost_init)(struct sdhci_host *sdhci);
112 };
113
114 #if defined(CONFIG_ARCH_TEGRA_2x_SOC)
115 static struct tegra_sdhci_hw_ops tegra_2x_sdhci_ops = {
116 };
117 #elif defined(CONFIG_ARCH_TEGRA_3x_SOC)
118 static struct tegra_sdhci_hw_ops tegra_3x_sdhci_ops = {
119         .set_card_clock = tegra_3x_sdhci_set_card_clock,
120         .sdhost_init = tegra3_sdhci_post_reset_init,
121 };
122 #else
123 static struct tegra_sdhci_hw_ops tegra_11x_sdhci_ops = {
124         .sdhost_init = tegra11x_sdhci_post_reset_init,
125 };
126 #endif
127
128 #define NVQUIRK_FORCE_SDHCI_SPEC_200            BIT(0)
129 #define NVQUIRK_ENABLE_BLOCK_GAP_DET            BIT(1)
130 #define NVQUIRK_DISABLE_AUTO_CALIBRATION        BIT(2)
131 #define NVQUIRK_SET_CALIBRATION_OFFSETS BIT(3)
132 #define NVQUIRK_SET_DRIVE_STRENGTH              BIT(4)
133
134 struct sdhci_tegra_soc_data {
135         struct sdhci_pltfm_data *pdata;
136         u32 nvquirks;
137 };
138
139 struct sdhci_tegra {
140         const struct tegra_sdhci_platform_data *plat;
141         const struct sdhci_tegra_soc_data *soc_data;
142         bool    clk_enabled;
143         struct regulator *vdd_io_reg;
144         struct regulator *vdd_slot_reg;
145         /* Pointer to the chip specific HW ops */
146         struct tegra_sdhci_hw_ops *hw_ops;
147         /* Host controller instance */
148         unsigned int instance;
149         /* vddio_min */
150         unsigned int vddio_min_uv;
151         /* vddio_max */
152         unsigned int vddio_max_uv;
153         /* max clk supported by the platform */
154         unsigned int max_clk_limit;
155         /* max ddr clk supported by the platform */
156         unsigned int ddr_clk_limit;
157         struct tegra_io_dpd *dpd;
158         bool card_present;
159         bool is_rail_enabled;
160         struct clk *emc_clk;
161         unsigned int emc_max_clk;
162 };
163
164 static u32 tegra_sdhci_readl(struct sdhci_host *host, int reg)
165 {
166 #ifndef CONFIG_ARCH_TEGRA_11x_SOC
167         u32 val;
168
169         if (unlikely(reg == SDHCI_PRESENT_STATE)) {
170                 /* Use wp_gpio here instead? */
171                 val = readl(host->ioaddr + reg);
172                 return val | SDHCI_WRITE_PROTECT;
173         }
174 #endif
175         return readl(host->ioaddr + reg);
176 }
177
178 static u16 tegra_sdhci_readw(struct sdhci_host *host, int reg)
179 {
180 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
181         struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
182         struct sdhci_tegra *tegra_host = pltfm_host->priv;
183         const struct sdhci_tegra_soc_data *soc_data = tegra_host->soc_data;
184
185         if (unlikely((soc_data->nvquirks & NVQUIRK_FORCE_SDHCI_SPEC_200) &&
186                         (reg == SDHCI_HOST_VERSION))) {
187                 /* Erratum: Version register is invalid in HW. */
188                 return SDHCI_SPEC_200;
189         }
190 #endif
191         return readw(host->ioaddr + reg);
192 }
193
194 static void tegra_sdhci_writel(struct sdhci_host *host, u32 val, int reg)
195 {
196 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
197         struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
198         struct sdhci_tegra *tegra_host = pltfm_host->priv;
199         const struct sdhci_tegra_soc_data *soc_data = tegra_host->soc_data;
200 #endif
201
202         /* Seems like we're getting spurious timeout and crc errors, so
203          * disable signalling of them. In case of real errors software
204          * timers should take care of eventually detecting them.
205          */
206         if (unlikely(reg == SDHCI_SIGNAL_ENABLE))
207                 val &= ~(SDHCI_INT_TIMEOUT|SDHCI_INT_CRC);
208
209         writel(val, host->ioaddr + reg);
210
211 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
212         if (unlikely((soc_data->nvquirks & NVQUIRK_ENABLE_BLOCK_GAP_DET) &&
213                         (reg == SDHCI_INT_ENABLE))) {
214                 /* Erratum: Must enable block gap interrupt detection */
215                 u8 gap_ctrl = readb(host->ioaddr + SDHCI_BLOCK_GAP_CONTROL);
216                 if (val & SDHCI_INT_CARD_INT)
217                         gap_ctrl |= 0x8;
218                 else
219                         gap_ctrl &= ~0x8;
220                 writeb(gap_ctrl, host->ioaddr + SDHCI_BLOCK_GAP_CONTROL);
221         }
222 #endif
223 }
224
225 static unsigned int tegra_sdhci_get_cd(struct sdhci_host *sdhci)
226 {
227         struct sdhci_pltfm_host *pltfm_host = sdhci_priv(sdhci);
228         struct sdhci_tegra *tegra_host = pltfm_host->priv;
229
230         return tegra_host->card_present;
231 }
232
233 #ifndef CONFIG_ARCH_TEGRA_11x_SOC
234 static unsigned int tegra_sdhci_get_ro(struct sdhci_host *sdhci)
235 {
236         struct sdhci_pltfm_host *pltfm_host = sdhci_priv(sdhci);
237         struct sdhci_tegra *tegra_host = pltfm_host->priv;
238         const struct tegra_sdhci_platform_data *plat = tegra_host->plat;
239
240         if (!gpio_is_valid(plat->wp_gpio))
241                 return -1;
242
243         return gpio_get_value(plat->wp_gpio);
244 }
245 #endif
246
247 #if defined(CONFIG_ARCH_TEGRA_3x_SOC)
248 static void tegra3_sdhci_post_reset_init(struct sdhci_host *sdhci)
249 {
250         u16 misc_ctrl;
251         u32 vendor_ctrl;
252         struct sdhci_pltfm_host *pltfm_host = sdhci_priv(sdhci);
253         struct sdhci_tegra *tegra_host = pltfm_host->priv;
254         const struct tegra_sdhci_platform_data *plat = tegra_host->plat;
255
256         /* Set the base clock frequency */
257         vendor_ctrl = sdhci_readl(sdhci, SDHCI_VENDOR_CLOCK_CNTRL);
258         vendor_ctrl &= ~(0xFF << SDHCI_VENDOR_CLOCK_CNTRL_BASE_CLK_FREQ_SHIFT);
259         vendor_ctrl |= (tegra3_sdhost_max_clk[tegra_host->instance] / 1000000) <<
260                 SDHCI_VENDOR_CLOCK_CNTRL_BASE_CLK_FREQ_SHIFT;
261         vendor_ctrl |= SDHCI_VENDOR_CLOCK_CNTRL_PADPIPE_CLKEN_OVERRIDE;
262         vendor_ctrl &= ~SDHCI_VENDOR_CLOCK_CNTRL_SPI_MODE_CLKEN_OVERRIDE;
263
264         /* Set tap delay */
265         if (plat->tap_delay) {
266                 vendor_ctrl &= ~(0xFF <<
267                         SDHCI_VENDOR_CLOCK_CNTRL_TAP_VALUE_SHIFT);
268                 vendor_ctrl |= (plat->tap_delay <<
269                         SDHCI_VENDOR_CLOCK_CNTRL_TAP_VALUE_SHIFT);
270         }
271         /* Enable frequency tuning for SDR50 mode */
272         vendor_ctrl |= SDHCI_VENDOR_CLOCK_CNTRL_SDR50_TUNING;
273         sdhci_writel(sdhci, vendor_ctrl, SDHCI_VENDOR_CLOCK_CNTRL);
274
275         /* Enable SDHOST v3.0 support */
276         misc_ctrl = sdhci_readw(sdhci, SDHCI_VENDOR_MISC_CNTRL);
277         misc_ctrl |= SDHCI_VENDOR_MISC_CNTRL_ENABLE_SD_3_0 |
278                 SDHCI_VENDOR_MISC_CNTRL_ENABLE_SDR104_SUPPORT |
279                 SDHCI_VENDOR_MISC_CNTRL_ENABLE_SDR50_SUPPORT;
280         sdhci_writew(sdhci, misc_ctrl, SDHCI_VENDOR_MISC_CNTRL);
281 }
282 #endif
283
284 #if !defined(CONFIG_ARCH_TEGRA_2x_SOC) && !defined(CONFIG_ARCH_TEGRA_3x_SOC)
285 static void tegra11x_sdhci_post_reset_init(struct sdhci_host *sdhci)
286 {
287         u16 misc_ctrl;
288         u32 vendor_ctrl;
289         struct sdhci_pltfm_host *pltfm_host = sdhci_priv(sdhci);
290         struct sdhci_tegra *tegra_host = pltfm_host->priv;
291         struct platform_device *pdev = to_platform_device(mmc_dev(sdhci->mmc));
292         struct tegra_sdhci_platform_data *plat;
293
294         plat = pdev->dev.platform_data;
295         /* Set the base clock frequency */
296         vendor_ctrl = sdhci_readl(sdhci, SDHCI_VENDOR_CLOCK_CNTRL);
297         vendor_ctrl &= ~(0xFF << SDHCI_VENDOR_CLOCK_CNTRL_BASE_CLK_FREQ_SHIFT);
298         vendor_ctrl |= (tegra3_sdhost_max_clk[tegra_host->instance] / 1000000) <<
299                 SDHCI_VENDOR_CLOCK_CNTRL_BASE_CLK_FREQ_SHIFT;
300         vendor_ctrl |= SDHCI_VENDOR_CLOCK_CNTRL_PADPIPE_CLKEN_OVERRIDE;
301         vendor_ctrl &= ~SDHCI_VENDOR_CLOCK_CNTRL_SPI_MODE_CLKEN_OVERRIDE;
302
303         /* Set tap delay */
304         if (plat->tap_delay) {
305                 vendor_ctrl &= ~(0xFF <<
306                         SDHCI_VENDOR_CLOCK_CNTRL_TAP_VALUE_SHIFT);
307                 vendor_ctrl |= (plat->tap_delay <<
308                         SDHCI_VENDOR_CLOCK_CNTRL_TAP_VALUE_SHIFT);
309         }
310
311         /* Set trim delay */
312         if (plat->trim_delay) {
313                 vendor_ctrl &= ~(0x1F <<
314                         SDHCI_VENDOR_CLOCK_CNTRL_TRIM_VALUE_SHIFT);
315                 vendor_ctrl |= (plat->trim_delay <<
316                         SDHCI_VENDOR_CLOCK_CNTRL_TRIM_VALUE_SHIFT);
317         }
318         sdhci_writel(sdhci, vendor_ctrl, SDHCI_VENDOR_CLOCK_CNTRL);
319
320         /* Enable SDHOST v3.0 support */
321         misc_ctrl = sdhci_readw(sdhci, SDHCI_VENDOR_MISC_CNTRL);
322         misc_ctrl |= SDHCI_VENDOR_MISC_CNTRL_ENABLE_SDR104_SUPPORT |
323                 SDHCI_VENDOR_MISC_CNTRL_ENABLE_SDR50_SUPPORT |
324                 SDHCI_VENDOR_MISC_CNTRL_ENABLE_DDR50_SUPPORT;
325         misc_ctrl |= SDHCI_VENDOR_MISC_CNTRL_INFINITE_ERASE_TIMEOUT;
326         sdhci_writew(sdhci, misc_ctrl, SDHCI_VENDOR_MISC_CNTRL);
327 }
328 #endif
329
330 static int tegra_sdhci_set_uhs_signaling(struct sdhci_host *host,
331                 unsigned int uhs)
332 {
333         u16 clk, ctrl_2;
334         ctrl_2 = sdhci_readw(host, SDHCI_HOST_CONTROL2);
335
336         /* Select Bus Speed Mode for host */
337         /* For HS200 we need to set UHS_MODE_SEL to SDR104.
338          * It works as SDR 104 in SD 4-bit mode and HS200 in eMMC 8-bit mode.
339          */
340         ctrl_2 &= ~SDHCI_CTRL_UHS_MASK;
341         switch (uhs) {
342         case MMC_TIMING_UHS_SDR12:
343                 ctrl_2 |= SDHCI_CTRL_UHS_SDR12;
344                 break;
345         case MMC_TIMING_UHS_SDR25:
346                 ctrl_2 |= SDHCI_CTRL_UHS_SDR25;
347                 break;
348         case MMC_TIMING_UHS_SDR50:
349                 ctrl_2 |= SDHCI_CTRL_UHS_SDR50;
350                 break;
351         case MMC_TIMING_UHS_SDR104:
352         case MMC_TIMING_MMC_HS200:
353                 ctrl_2 |= SDHCI_CTRL_UHS_SDR104;
354                 break;
355         case MMC_TIMING_UHS_DDR50:
356                 ctrl_2 |= SDHCI_CTRL_UHS_DDR50;
357                 break;
358         }
359
360         sdhci_writew(host, ctrl_2, SDHCI_HOST_CONTROL2);
361
362         if (uhs == MMC_TIMING_UHS_DDR50) {
363                 clk = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
364                 clk &= ~(0xFF << SDHCI_DIVIDER_SHIFT);
365                 clk |= 1 << SDHCI_DIVIDER_SHIFT;
366                 sdhci_writew(host, clk, SDHCI_CLOCK_CONTROL);
367         }
368         return 0;
369 }
370
371 static void tegra_sdhci_reset_exit(struct sdhci_host *sdhci, u8 mask)
372 {
373         struct sdhci_pltfm_host *pltfm_host = sdhci_priv(sdhci);
374         struct sdhci_tegra *tegra_host = pltfm_host->priv;
375         const struct tegra_sdhci_platform_data *plat = tegra_host->plat;
376
377         if (mask & SDHCI_RESET_ALL) {
378                 if (tegra_host->hw_ops->sdhost_init)
379                         tegra_host->hw_ops->sdhost_init(sdhci);
380
381                 /* Mask the support for any UHS modes if specified */
382                 if (plat->uhs_mask & MMC_UHS_MASK_SDR104)
383                         sdhci->mmc->caps &= ~MMC_CAP_UHS_SDR104;
384
385                 if (plat->uhs_mask & MMC_UHS_MASK_DDR50)
386                         sdhci->mmc->caps &= ~MMC_CAP_UHS_DDR50;
387
388                 if (plat->uhs_mask & MMC_UHS_MASK_SDR50)
389                         sdhci->mmc->caps &= ~MMC_CAP_UHS_SDR50;
390
391                 if (plat->uhs_mask & MMC_UHS_MASK_SDR25)
392                         sdhci->mmc->caps &= ~MMC_CAP_UHS_SDR25;
393         }
394 }
395
396 static void sdhci_status_notify_cb(int card_present, void *dev_id)
397 {
398         struct sdhci_host *sdhci = (struct sdhci_host *)dev_id;
399         struct platform_device *pdev = to_platform_device(mmc_dev(sdhci->mmc));
400         struct tegra_sdhci_platform_data *plat;
401         unsigned int status, oldstat;
402
403         pr_debug("%s: card_present %d\n", mmc_hostname(sdhci->mmc),
404                 card_present);
405
406         plat = pdev->dev.platform_data;
407         if (!plat->mmc_data.status) {
408                 mmc_detect_change(sdhci->mmc, 0);
409                 return;
410         }
411
412         status = plat->mmc_data.status(mmc_dev(sdhci->mmc));
413
414         oldstat = plat->mmc_data.card_present;
415         plat->mmc_data.card_present = status;
416         if (status ^ oldstat) {
417                 pr_debug("%s: Slot status change detected (%d -> %d)\n",
418                         mmc_hostname(sdhci->mmc), oldstat, status);
419                 if (status && !plat->mmc_data.built_in)
420                         mmc_detect_change(sdhci->mmc, (5 * HZ) / 2);
421                 else
422                         mmc_detect_change(sdhci->mmc, 0);
423         }
424 }
425
426 static irqreturn_t carddetect_irq(int irq, void *data)
427 {
428         struct sdhci_host *sdhost = (struct sdhci_host *)data;
429         struct sdhci_pltfm_host *pltfm_host = sdhci_priv(sdhost);
430         struct sdhci_tegra *tegra_host = pltfm_host->priv;
431         struct platform_device *pdev = to_platform_device(mmc_dev(sdhost->mmc));
432         struct tegra_sdhci_platform_data *plat;
433
434         plat = pdev->dev.platform_data;
435
436         tegra_host->card_present = (gpio_get_value(plat->cd_gpio) == 0);
437
438         if (tegra_host->card_present) {
439                 if (!tegra_host->is_rail_enabled) {
440                         if (tegra_host->vdd_slot_reg)
441                                 regulator_enable(tegra_host->vdd_slot_reg);
442                         if (tegra_host->vdd_io_reg)
443                                 regulator_enable(tegra_host->vdd_io_reg);
444                         tegra_host->is_rail_enabled = 1;
445                 }
446         } else {
447                 if (tegra_host->is_rail_enabled) {
448                         if (tegra_host->vdd_io_reg)
449                                 regulator_disable(tegra_host->vdd_io_reg);
450                         if (tegra_host->vdd_slot_reg)
451                                 regulator_disable(tegra_host->vdd_slot_reg);
452                         tegra_host->is_rail_enabled = 0;
453                 }
454         }
455
456         tasklet_schedule(&sdhost->card_tasklet);
457         return IRQ_HANDLED;
458 };
459
460 static int tegra_sdhci_8bit(struct sdhci_host *sdhci, int bus_width)
461 {
462         struct platform_device *pdev = to_platform_device(mmc_dev(sdhci->mmc));
463         const struct tegra_sdhci_platform_data *plat;
464         u32 ctrl;
465
466         plat = pdev->dev.platform_data;
467
468         ctrl = sdhci_readb(sdhci, SDHCI_HOST_CONTROL);
469         if (plat->is_8bit && bus_width == MMC_BUS_WIDTH_8) {
470                 ctrl &= ~SDHCI_CTRL_4BITBUS;
471                 ctrl |= SDHCI_CTRL_8BITBUS;
472         } else {
473                 ctrl &= ~SDHCI_CTRL_8BITBUS;
474                 if (bus_width == MMC_BUS_WIDTH_4)
475                         ctrl |= SDHCI_CTRL_4BITBUS;
476                 else
477                         ctrl &= ~SDHCI_CTRL_4BITBUS;
478         }
479         sdhci_writeb(sdhci, ctrl, SDHCI_HOST_CONTROL);
480         return 0;
481 }
482
483 static void tegra_sdhci_set_clk_rate(struct sdhci_host *sdhci,
484         unsigned int clock)
485 {
486         struct sdhci_pltfm_host *pltfm_host = sdhci_priv(sdhci);
487         struct sdhci_tegra *tegra_host = pltfm_host->priv;
488         unsigned int clk_rate;
489         unsigned int emc_clk;
490
491         if (sdhci->mmc->ios.timing == MMC_TIMING_UHS_DDR50) {
492                 /*
493                  * In ddr mode, tegra sdmmc controller clock frequency
494                  * should be double the card clock frequency.
495                  */
496                 if (tegra_host->ddr_clk_limit) {
497                         clk_rate = tegra_host->ddr_clk_limit * 2;
498                         if (tegra_host->emc_clk) {
499                                 emc_clk = clk_get_rate(tegra_host->emc_clk);
500                                 if (emc_clk == tegra_host->emc_max_clk)
501                                         clk_rate = clock * 2;
502                         }
503                 } else {
504                         clk_rate = clock * 2;
505                 }
506         } else  if (sdhci->mmc->ios.timing == MMC_TIMING_UHS_SDR50) {
507                 /*
508                  * In SDR50 mode, run the sdmmc controller at freq greater than
509                  * 104MHz to ensure the core voltage is at 1.2V. If the core voltage
510                  * is below 1.2V, CRC errors would occur during data transfers.
511                  */
512                 clk_rate = clock * 2;
513         } else {
514                 if (clock <= tegra_sdhost_min_freq)
515                         clk_rate = tegra_sdhost_min_freq;
516                 else if (clock <= tegra_sdhost_std_freq)
517                         clk_rate = tegra_sdhost_std_freq;
518                 else
519                         clk_rate = clock;
520         }
521
522         if (tegra_host->max_clk_limit &&
523                 (clk_rate > tegra_host->max_clk_limit))
524                 clk_rate = tegra_host->max_clk_limit;
525
526         clk_set_rate(pltfm_host->clk, clk_rate);
527         sdhci->max_clk = clk_get_rate(pltfm_host->clk);
528 #ifdef CONFIG_TEGRA_FPGA_PLATFORM
529         /* FPGA supports 26MHz of clock for SDMMC. */
530         sdhci->max_clk = 26000000;
531 #endif
532 }
533 #ifdef CONFIG_ARCH_TEGRA_3x_SOC
534 static void tegra_3x_sdhci_set_card_clock(struct sdhci_host *sdhci, unsigned int clock)
535 {
536         int div;
537         u16 clk;
538         unsigned long timeout;
539         u8 ctrl;
540
541         if (clock && clock == sdhci->clock)
542                 return;
543
544         /*
545          * Disable the card clock before disabling the internal
546          * clock to avoid abnormal clock waveforms.
547          */
548         clk = sdhci_readw(sdhci, SDHCI_CLOCK_CONTROL);
549         clk &= ~SDHCI_CLOCK_CARD_EN;
550         sdhci_writew(sdhci, clk, SDHCI_CLOCK_CONTROL);
551         sdhci_writew(sdhci, 0, SDHCI_CLOCK_CONTROL);
552
553         if (clock == 0)
554                 goto out;
555         if (sdhci->mmc->ios.timing == MMC_TIMING_UHS_DDR50) {
556                 div = 1;
557                 goto set_clk;
558         }
559
560         if (sdhci->version >= SDHCI_SPEC_300) {
561                 /* Version 3.00 divisors must be a multiple of 2. */
562                 if (sdhci->max_clk <= clock) {
563                         div = 1;
564                 } else {
565                         for (div = 2; div < SDHCI_MAX_DIV_SPEC_300; div += 2) {
566                                 if ((sdhci->max_clk / div) <= clock)
567                                         break;
568                         }
569                 }
570         } else {
571                 /* Version 2.00 divisors must be a power of 2. */
572                 for (div = 1; div < SDHCI_MAX_DIV_SPEC_200; div *= 2) {
573                         if ((sdhci->max_clk / div) <= clock)
574                                 break;
575                 }
576         }
577         div >>= 1;
578
579         /*
580          * Tegra3 sdmmc controller internal clock will not be stabilized when
581          * we use a clock divider value greater than 4. The WAR is as follows.
582          * - Enable internal clock.
583          * - Wait for 5 usec and do a dummy write.
584          * - Poll for clk stable.
585          */
586 set_clk:
587         clk = (div & SDHCI_DIV_MASK) << SDHCI_DIVIDER_SHIFT;
588         clk |= ((div & SDHCI_DIV_HI_MASK) >> SDHCI_DIV_MASK_LEN)
589                 << SDHCI_DIVIDER_HI_SHIFT;
590         clk |= SDHCI_CLOCK_INT_EN;
591         sdhci_writew(sdhci, clk, SDHCI_CLOCK_CONTROL);
592
593         /* Wait for 5 usec */
594         udelay(5);
595
596         /* Do a dummy write */
597         ctrl = sdhci_readb(sdhci, SDHCI_CAPABILITIES);
598         ctrl |= 1;
599         sdhci_writeb(sdhci, ctrl, SDHCI_CAPABILITIES);
600
601         /* Wait max 20 ms */
602         timeout = 20;
603         while (!((clk = sdhci_readw(sdhci, SDHCI_CLOCK_CONTROL))
604                 & SDHCI_CLOCK_INT_STABLE)) {
605                 if (timeout == 0) {
606                         dev_err(mmc_dev(sdhci->mmc), "Internal clock never stabilised\n");
607                         return;
608                 }
609                 timeout--;
610                 mdelay(1);
611         }
612
613         clk |= SDHCI_CLOCK_CARD_EN;
614         sdhci_writew(sdhci, clk, SDHCI_CLOCK_CONTROL);
615 out:
616         sdhci->clock = clock;
617 }
618 #endif /*       #ifdef CONFIG_ARCH_TEGRA_3x_SOC */
619
620 static void tegra_sdhci_set_clock(struct sdhci_host *sdhci, unsigned int clock)
621 {
622         struct sdhci_pltfm_host *pltfm_host = sdhci_priv(sdhci);
623         struct sdhci_tegra *tegra_host = pltfm_host->priv;
624         struct platform_device *pdev = to_platform_device(mmc_dev(sdhci->mmc));
625         u8 ctrl;
626
627         pr_debug("%s %s %u enabled=%u\n", __func__,
628                 mmc_hostname(sdhci->mmc), clock, tegra_host->clk_enabled);
629
630         if (clock) {
631                 /* bring out sd instance from io dpd mode */
632                 if (tegra_host->dpd) {
633                         mutex_lock(&tegra_host->dpd->delay_lock);
634                         cancel_delayed_work_sync(&tegra_host->dpd->delay_dpd);
635                         tegra_io_dpd_disable(tegra_host->dpd);
636                         mutex_unlock(&tegra_host->dpd->delay_lock);
637                 }
638
639                 if (!tegra_host->clk_enabled) {
640                         pm_runtime_get_sync(&pdev->dev);
641                         clk_prepare_enable(pltfm_host->clk);
642                         ctrl = sdhci_readb(sdhci, SDHCI_VENDOR_CLOCK_CNTRL);
643                         ctrl |= SDHCI_VENDOR_CLOCK_CNTRL_SDMMC_CLK;
644                         sdhci_writeb(sdhci, ctrl, SDHCI_VENDOR_CLOCK_CNTRL);
645                         tegra_host->clk_enabled = true;
646                 }
647                 tegra_sdhci_set_clk_rate(sdhci, clock);
648                 if (tegra_host->hw_ops->set_card_clock)
649                         tegra_host->hw_ops->set_card_clock(sdhci, clock);
650         } else if (!clock && tegra_host->clk_enabled) {
651                 if (tegra_host->hw_ops->set_card_clock)
652                         tegra_host->hw_ops->set_card_clock(sdhci, clock);
653                 ctrl = sdhci_readb(sdhci, SDHCI_VENDOR_CLOCK_CNTRL);
654                 ctrl &= ~SDHCI_VENDOR_CLOCK_CNTRL_SDMMC_CLK;
655                 sdhci_writeb(sdhci, ctrl, SDHCI_VENDOR_CLOCK_CNTRL);
656                 clk_disable_unprepare(pltfm_host->clk);
657                 pm_runtime_put_sync(&pdev->dev);
658                 tegra_host->clk_enabled = false;
659                 /* io dpd enable call for sd instance */
660
661                 if (tegra_host->dpd) {
662                         mutex_lock(&tegra_host->dpd->delay_lock);
663                         if (tegra_host->dpd->need_delay_dpd) {
664                                 schedule_delayed_work(
665                                         &tegra_host->dpd->delay_dpd,
666                                         msecs_to_jiffies(100));
667                         } else {
668                                 tegra_io_dpd_enable(tegra_host->dpd);
669                         }
670                         mutex_unlock(&tegra_host->dpd->delay_lock);
671                 }
672         }
673 }
674 static void tegra_sdhci_do_calibration(struct sdhci_host *sdhci)
675 {
676         unsigned int val;
677         struct sdhci_pltfm_host *pltfm_host = sdhci_priv(sdhci);
678         struct sdhci_tegra *tegra_host = pltfm_host->priv;
679         const struct sdhci_tegra_soc_data *soc_data = tegra_host->soc_data;
680         unsigned int timeout = 10;
681
682         /* No Calibration for sdmmc4 */
683         if (tegra_host->instance == 3)
684                 return;
685
686         /*
687          * Do not enable auto calibration if the platform doesn't
688          * support it.
689          */
690         if (unlikely(soc_data->nvquirks & NVQUIRK_DISABLE_AUTO_CALIBRATION))
691                 return;
692
693         val = sdhci_readl(sdhci, SDMMC_SDMEMCOMPPADCTRL);
694         val &= ~SDMMC_SDMEMCOMPPADCTRL_VREF_SEL_MASK;
695         val |= 0x7;
696         sdhci_writel(sdhci, val, SDMMC_SDMEMCOMPPADCTRL);
697
698         /* Enable Auto Calibration*/
699         val = sdhci_readl(sdhci, SDMMC_AUTO_CAL_CONFIG);
700         val |= SDMMC_AUTO_CAL_CONFIG_AUTO_CAL_ENABLE;
701         val |= SDMMC_AUTO_CAL_CONFIG_AUTO_CAL_START;
702         if (unlikely(soc_data->nvquirks & NVQUIRK_SET_CALIBRATION_OFFSETS)) {
703                 /* Program Auto cal PD offset(bits 8:14) */
704                 val &= ~(0x7F <<
705                         SDMMC_AUTO_CAL_CONFIG_AUTO_CAL_PD_OFFSET_SHIFT);
706                 val |= (SDMMC_AUTO_CAL_CONFIG_AUTO_CAL_PD_OFFSET <<
707                         SDMMC_AUTO_CAL_CONFIG_AUTO_CAL_PD_OFFSET_SHIFT);
708                 /* Program Auto cal PU offset(bits 0:6) */
709                 val &= ~0x7F;
710                 val |= SDMMC_AUTO_CAL_CONFIG_AUTO_CAL_PU_OFFSET;
711         }
712         sdhci_writel(sdhci, val, SDMMC_AUTO_CAL_CONFIG);
713
714         /* Wait until the calibration is done */
715         do {
716                 if (!(sdhci_readl(sdhci, SDMMC_AUTO_CAL_STATUS) &
717                         SDMMC_AUTO_CAL_STATUS_AUTO_CAL_ACTIVE))
718                         break;
719
720                 mdelay(1);
721                 timeout--;
722         } while (timeout);
723
724         if (!timeout)
725                 dev_err(mmc_dev(sdhci->mmc), "Auto calibration failed\n");
726
727         /* Disable Auto calibration */
728         val = sdhci_readl(sdhci, SDMMC_AUTO_CAL_CONFIG);
729         val &= ~SDMMC_AUTO_CAL_CONFIG_AUTO_CAL_ENABLE;
730         sdhci_writel(sdhci, val, SDMMC_AUTO_CAL_CONFIG);
731
732         if (unlikely(soc_data->nvquirks & NVQUIRK_SET_DRIVE_STRENGTH)) {
733                 unsigned int pulldown_code;
734                 unsigned int pullup_code;
735                 int pg;
736                 int err;
737
738                 pg = tegra_drive_get_pingroup(mmc_dev(sdhci->mmc));
739                 if (pg != -1) {
740                         /* Get the pull down codes from auto cal status reg */
741                         pulldown_code = (
742                                 sdhci_readl(sdhci, SDMMC_AUTO_CAL_STATUS) >>
743                                 SDMMC_AUTO_CAL_STATUS_PULLDOWN_OFFSET);
744                         /* Set the pull down in the pinmux reg */
745                         err = tegra_drive_pinmux_set_pull_down(pg,
746                                 pulldown_code);
747                         if (err)
748                                 dev_err(mmc_dev(sdhci->mmc),
749                                 "Failed to set pulldown codes %d err %d\n",
750                                 pulldown_code, err);
751
752                         /* Calculate the pull up codes */
753                         pullup_code = pulldown_code + PULLUP_ADJUSTMENT_OFFSET;
754                         if (pullup_code >= TEGRA_MAX_PULL)
755                                 pullup_code = TEGRA_MAX_PULL - 1;
756                         /* Set the pull up code in the pinmux reg */
757                         err = tegra_drive_pinmux_set_pull_up(pg, pullup_code);
758                         if (err)
759                                 dev_err(mmc_dev(sdhci->mmc),
760                                 "Failed to set pullup codes %d err %d\n",
761                                 pullup_code, err);
762                 }
763         }
764 }
765
766 static int tegra_sdhci_signal_voltage_switch(struct sdhci_host *sdhci,
767         unsigned int signal_voltage)
768 {
769         struct sdhci_pltfm_host *pltfm_host = sdhci_priv(sdhci);
770         struct sdhci_tegra *tegra_host = pltfm_host->priv;
771         unsigned int min_uV = tegra_host->vddio_min_uv;
772         unsigned int max_uV = tegra_host->vddio_max_uv;
773         unsigned int rc = 0;
774         u16 clk, ctrl;
775
776
777         ctrl = sdhci_readw(sdhci, SDHCI_HOST_CONTROL2);
778         if (signal_voltage == MMC_SIGNAL_VOLTAGE_180) {
779                 ctrl |= SDHCI_CTRL_VDD_180;
780                 min_uV = SDHOST_LOW_VOLT_MIN;
781                 max_uV = SDHOST_LOW_VOLT_MAX;
782         } else if (signal_voltage == MMC_SIGNAL_VOLTAGE_330) {
783                 if (ctrl & SDHCI_CTRL_VDD_180)
784                         ctrl &= ~SDHCI_CTRL_VDD_180;
785         }
786
787         /* Check if the slot can support the required voltage */
788         if (min_uV > tegra_host->vddio_max_uv)
789                 return 0;
790
791         /* Switch OFF the card clock to prevent glitches on the clock line */
792         clk = sdhci_readw(sdhci, SDHCI_CLOCK_CONTROL);
793         clk &= ~SDHCI_CLOCK_CARD_EN;
794         sdhci_writew(sdhci, clk, SDHCI_CLOCK_CONTROL);
795
796         /* Set/clear the 1.8V signalling */
797         sdhci_writew(sdhci, ctrl, SDHCI_HOST_CONTROL2);
798
799         /* Switch the I/O rail voltage */
800         if (tegra_host->vdd_io_reg) {
801                 rc = regulator_set_voltage(tegra_host->vdd_io_reg,
802                         min_uV, max_uV);
803                 if (rc) {
804                         dev_err(mmc_dev(sdhci->mmc), "switching to 1.8V"
805                         "failed . Switching back to 3.3V\n");
806                         rc = regulator_set_voltage(tegra_host->vdd_io_reg,
807                                 SDHOST_HIGH_VOLT_MIN,
808                                 SDHOST_HIGH_VOLT_MAX);
809                         if (rc)
810                                 dev_err(mmc_dev(sdhci->mmc),
811                                 "switching to 3.3V also failed\n");
812                 }
813         }
814
815         /* Wait for 10 msec for the voltage to be switched */
816         mdelay(10);
817
818         /* Enable the card clock */
819         clk |= SDHCI_CLOCK_CARD_EN;
820         sdhci_writew(sdhci, clk, SDHCI_CLOCK_CONTROL);
821
822         /* Wait for 1 msec after enabling clock */
823         mdelay(1);
824
825         return rc;
826 }
827
828 static void tegra_sdhci_reset(struct sdhci_host *sdhci, u8 mask)
829 {
830         unsigned long timeout;
831
832         sdhci_writeb(sdhci, mask, SDHCI_SOFTWARE_RESET);
833
834         /* Wait max 100 ms */
835         timeout = 100;
836
837         /* hw clears the bit when it's done */
838         while (sdhci_readb(sdhci, SDHCI_SOFTWARE_RESET) & mask) {
839                 if (timeout == 0) {
840                         dev_err(mmc_dev(sdhci->mmc), "Reset 0x%x never"
841                                 "completed.\n", (int)mask);
842                         return;
843                 }
844                 timeout--;
845                 mdelay(1);
846         }
847 }
848
849 static void sdhci_tegra_set_tap_delay(struct sdhci_host *sdhci,
850         unsigned int tap_delay)
851 {
852         u32 vendor_ctrl;
853
854         /* Max tap delay value is 255 */
855         BUG_ON(tap_delay > MAX_TAP_VALUES);
856
857         vendor_ctrl = sdhci_readl(sdhci, SDHCI_VENDOR_CLOCK_CNTRL);
858         vendor_ctrl &= ~(0xFF << SDHCI_VENDOR_CLOCK_CNTRL_TAP_VALUE_SHIFT);
859         vendor_ctrl |= (tap_delay << SDHCI_VENDOR_CLOCK_CNTRL_TAP_VALUE_SHIFT);
860         sdhci_writel(sdhci, vendor_ctrl, SDHCI_VENDOR_CLOCK_CNTRL);
861 }
862
863 static int sdhci_tegra_run_frequency_tuning(struct sdhci_host *sdhci, u32 opcode, u32 block_size)
864 {
865         int err = 0;
866         u8 ctrl;
867         u32 mask;
868         unsigned int timeout = 10;
869         int flags;
870         u32 intstatus;
871
872         mask = SDHCI_CMD_INHIBIT | SDHCI_DATA_INHIBIT;
873         while (sdhci_readl(sdhci, SDHCI_PRESENT_STATE) & mask) {
874                 if (timeout == 0) {
875                         dev_err(mmc_dev(sdhci->mmc), "Controller never"
876                                 "released inhibit bit(s).\n");
877                         err = -ETIMEDOUT;
878                         goto out;
879                 }
880                 timeout--;
881                 mdelay(1);
882         }
883
884         ctrl = sdhci_readb(sdhci, SDHCI_HOST_CONTROL2);
885         ctrl &= ~SDHCI_CTRL_TUNED_CLK;
886         sdhci_writeb(sdhci, ctrl, SDHCI_HOST_CONTROL2);
887
888         ctrl = sdhci_readb(sdhci, SDHCI_HOST_CONTROL2);
889         ctrl |= SDHCI_CTRL_EXEC_TUNING;
890         sdhci_writeb(sdhci, ctrl, SDHCI_HOST_CONTROL2);
891
892         /*
893          * In response to CMD19, the card sends 64 bytes of tuning
894          * block to the Host Controller. So we set the block size
895          * to 64 here.
896          * In response to CMD21, the card sends 128 bytes of tuning
897          * block for MMC_BUS_WIDTH_8 and 64 bytes for MMC_BUS_WIDTH_4
898          * to the Host Controller. So we set the block size to 64 here.
899          */
900         sdhci_writew(sdhci, SDHCI_MAKE_BLKSZ(7, block_size), SDHCI_BLOCK_SIZE);
901
902         sdhci_writeb(sdhci, 0xE, SDHCI_TIMEOUT_CONTROL);
903
904         sdhci_writeb(sdhci, SDHCI_TRNS_READ, SDHCI_TRANSFER_MODE);
905
906         sdhci_writel(sdhci, 0x0, SDHCI_ARGUMENT);
907
908         /* Set the cmd flags */
909         flags = SDHCI_CMD_RESP_SHORT | SDHCI_CMD_CRC | SDHCI_CMD_DATA;
910         /* Issue the command */
911         sdhci_writew(sdhci, SDHCI_MAKE_CMD(
912                 opcode, flags), SDHCI_COMMAND);
913
914         timeout = 5;
915         do {
916                 timeout--;
917                 mdelay(1);
918                 intstatus = sdhci_readl(sdhci, SDHCI_INT_STATUS);
919                 if (intstatus) {
920                         sdhci_writel(sdhci, intstatus, SDHCI_INT_STATUS);
921                         break;
922                 }
923         } while(timeout);
924
925         if ((intstatus & SDHCI_INT_DATA_AVAIL) &&
926                 !(intstatus & SDHCI_INT_DATA_CRC)) {
927                 err = 0;
928                 sdhci->tuning_done = 1;
929         } else {
930                 tegra_sdhci_reset(sdhci, SDHCI_RESET_CMD);
931                 tegra_sdhci_reset(sdhci, SDHCI_RESET_DATA);
932                 err = -EIO;
933         }
934
935         if (sdhci->tuning_done) {
936                 sdhci->tuning_done = 0;
937                 ctrl = sdhci_readb(sdhci, SDHCI_HOST_CONTROL2);
938                 if (!(ctrl & SDHCI_CTRL_EXEC_TUNING) &&
939                         (ctrl & SDHCI_CTRL_TUNED_CLK))
940                         err = 0;
941                 else
942                         err = -EIO;
943         }
944         mdelay(1);
945 out:
946         return err;
947 }
948
949 static int sdhci_tegra_execute_tuning(struct sdhci_host *sdhci, u32 opcode)
950 {
951         int err;
952         u32 block_size;
953         u16 ctrl_2;
954         u8 *tap_delay_status;
955         unsigned int i = 0;
956         unsigned int temp_low_pass_tap = 0;
957         unsigned int temp_pass_window = 0;
958         unsigned int best_low_pass_tap = 0;
959         unsigned int best_pass_window = 0;
960         u32 ier;
961
962         /* Tuning is valid only in SDR104 and SDR50 modes */
963         ctrl_2 = sdhci_readw(sdhci, SDHCI_HOST_CONTROL2);
964         if (!(((ctrl_2 & SDHCI_CTRL_UHS_MASK) == SDHCI_CTRL_UHS_SDR104) ||
965                 (((ctrl_2 & SDHCI_CTRL_UHS_MASK) == SDHCI_CTRL_UHS_SDR50) &&
966                 (sdhci->flags & SDHCI_SDR50_NEEDS_TUNING))))
967                         return 0;
968
969         tap_delay_status = kzalloc(MAX_TAP_VALUES, GFP_KERNEL);
970         if (tap_delay_status == NULL) {
971                 dev_err(mmc_dev(sdhci->mmc), "failed to allocate memory"
972                         "for storing tap_delay_status\n");
973                 return -ENOMEM;
974         }
975
976         /* Tuning should be done only for MMC_BUS_WIDTH_8 and MMC_BUS_WIDTH_4 */
977         if (sdhci->mmc->ios.bus_width == MMC_BUS_WIDTH_8)
978                 block_size = MMC_TUNING_BLOCK_SIZE_BUS_WIDTH_8;
979         else if (sdhci->mmc->ios.bus_width == MMC_BUS_WIDTH_4)
980                 block_size = MMC_TUNING_BLOCK_SIZE_BUS_WIDTH_4;
981         else
982                 return -EINVAL;
983         /*
984          * Disable all interrupts signalling.Enable interrupt status
985          * detection for buffer read ready and data crc. We use
986          * polling for tuning as it involves less overhead.
987          */
988         ier = sdhci_readl(sdhci, SDHCI_INT_ENABLE);
989         sdhci_writel(sdhci, 0, SDHCI_SIGNAL_ENABLE);
990         sdhci_writel(sdhci, SDHCI_INT_DATA_AVAIL |
991                 SDHCI_INT_DATA_CRC, SDHCI_INT_ENABLE);
992
993         /*
994          * Set each tap delay value and run frequency tuning. After each
995          * run, update the tap delay status as working or not working.
996          */
997         do {
998                 /* Set the tap delay */
999                 sdhci_tegra_set_tap_delay(sdhci, i);
1000
1001                 /* Run frequency tuning */
1002                 err = sdhci_tegra_run_frequency_tuning(sdhci, opcode, block_size);
1003
1004                 /* Update whether the tap delay worked or not */
1005                 tap_delay_status[i] = (err) ? 0: 1;
1006                 i++;
1007         } while (i < 0xFF);
1008
1009         /* Find the best possible tap range */
1010         for (i = 0; i < 0xFF; i++) {
1011                 temp_pass_window = 0;
1012
1013                 /* Find the first passing tap in the current window */
1014                 if (tap_delay_status[i]) {
1015                         temp_low_pass_tap = i;
1016
1017                         /* Find the pass window */
1018                         do {
1019                                 temp_pass_window++;
1020                                 i++;
1021                                 if (i > 0xFF)
1022                                         break;
1023                         } while (tap_delay_status[i]);
1024
1025                         if ((temp_pass_window > best_pass_window) && (temp_pass_window > 1)){
1026                                 best_low_pass_tap = temp_low_pass_tap;
1027                                 best_pass_window = temp_pass_window;
1028                         }
1029                 }
1030         }
1031
1032
1033         pr_debug("%s: best pass tap window: start %d, end %d\n",
1034                 mmc_hostname(sdhci->mmc), best_low_pass_tap,
1035                 (best_low_pass_tap + best_pass_window));
1036
1037         /* Set the best tap */
1038         sdhci_tegra_set_tap_delay(sdhci,
1039                 (best_low_pass_tap + ((best_pass_window * 3) / 4)));
1040
1041         /* Run frequency tuning */
1042         err = sdhci_tegra_run_frequency_tuning(sdhci, opcode, block_size);
1043
1044         /* Enable the normal interrupts signalling */
1045         sdhci_writel(sdhci, ier, SDHCI_INT_ENABLE);
1046         sdhci_writel(sdhci, ier, SDHCI_SIGNAL_ENABLE);
1047
1048         if (tap_delay_status)
1049                 kfree(tap_delay_status);
1050
1051         return err;
1052 }
1053
1054 static int tegra_sdhci_suspend(struct sdhci_host *sdhci)
1055 {
1056         struct sdhci_pltfm_host *pltfm_host = sdhci_priv(sdhci);
1057         struct sdhci_tegra *tegra_host = pltfm_host->priv;
1058
1059         tegra_sdhci_set_clock(sdhci, 0);
1060
1061         /* Disable the power rails if any */
1062         if (tegra_host->card_present) {
1063                 if (tegra_host->is_rail_enabled) {
1064                         if (tegra_host->vdd_io_reg)
1065                                 regulator_disable(tegra_host->vdd_io_reg);
1066                         if (tegra_host->vdd_slot_reg)
1067                                 regulator_disable(tegra_host->vdd_slot_reg);
1068                         tegra_host->is_rail_enabled = 0;
1069                 }
1070         }
1071
1072         if (tegra_host->dpd) {
1073                 mutex_lock(&tegra_host->dpd->delay_lock);
1074                 tegra_host->dpd->need_delay_dpd = 1;
1075                 mutex_unlock(&tegra_host->dpd->delay_lock);
1076         }
1077
1078         return 0;
1079 }
1080
1081 static int tegra_sdhci_resume(struct sdhci_host *sdhci)
1082 {
1083         struct sdhci_pltfm_host *pltfm_host = sdhci_priv(sdhci);
1084         struct sdhci_tegra *tegra_host = pltfm_host->priv;
1085         struct platform_device *pdev;
1086         struct tegra_sdhci_platform_data *plat;
1087
1088         pdev = to_platform_device(mmc_dev(sdhci->mmc));
1089         plat = pdev->dev.platform_data;
1090         /* Enable the power rails if any */
1091         if (tegra_host->card_present) {
1092                 if (!tegra_host->is_rail_enabled) {
1093                         if (tegra_host->vdd_slot_reg)
1094                                 regulator_enable(tegra_host->vdd_slot_reg);
1095                         if (tegra_host->vdd_io_reg) {
1096                                 regulator_enable(tegra_host->vdd_io_reg);
1097                                 if (plat->mmc_data.ocr_mask &
1098                                                         SDHOST_1V8_OCR_MASK)
1099                                         tegra_sdhci_signal_voltage_switch(sdhci,
1100                                                         MMC_SIGNAL_VOLTAGE_180);
1101                                 else
1102                                         tegra_sdhci_signal_voltage_switch(sdhci,
1103                                                         MMC_SIGNAL_VOLTAGE_330);
1104                         }
1105                         tegra_host->is_rail_enabled = 1;
1106                 }
1107         }
1108         /* Setting the min identification clock of freq 400KHz */
1109         tegra_sdhci_set_clock(sdhci, 400000);
1110
1111         /* Reset the controller and power on if MMC_KEEP_POWER flag is set*/
1112         if (sdhci->mmc->pm_flags & MMC_PM_KEEP_POWER) {
1113                 tegra_sdhci_reset(sdhci, SDHCI_RESET_ALL);
1114                 sdhci_writeb(sdhci, SDHCI_POWER_ON, SDHCI_POWER_CONTROL);
1115                 sdhci->pwr = 0;
1116         }
1117
1118         return 0;
1119 }
1120
1121 static struct sdhci_ops tegra_sdhci_ops = {
1122 #ifndef CONFIG_ARCH_TEGRA_11x_SOC
1123         .get_ro     = tegra_sdhci_get_ro,
1124 #endif
1125         .get_cd     = tegra_sdhci_get_cd,
1126         .read_l     = tegra_sdhci_readl,
1127         .read_w     = tegra_sdhci_readw,
1128         .write_l    = tegra_sdhci_writel,
1129         .platform_8bit_width = tegra_sdhci_8bit,
1130         .set_clock              = tegra_sdhci_set_clock,
1131         .suspend                = tegra_sdhci_suspend,
1132         .resume                 = tegra_sdhci_resume,
1133         .platform_reset_exit    = tegra_sdhci_reset_exit,
1134         .set_uhs_signaling      = tegra_sdhci_set_uhs_signaling,
1135         .switch_signal_voltage  = tegra_sdhci_signal_voltage_switch,
1136         .switch_signal_voltage_exit = tegra_sdhci_do_calibration,
1137         .execute_freq_tuning    = sdhci_tegra_execute_tuning,
1138 };
1139
1140 static struct sdhci_pltfm_data sdhci_tegra20_pdata = {
1141         .quirks = SDHCI_QUIRK_BROKEN_TIMEOUT_VAL |
1142 #ifndef CONFIG_ARCH_TEGRA_2x_SOC
1143                   SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK |
1144                   SDHCI_QUIRK_NON_STD_VOLTAGE_SWITCHING |
1145                   SDHCI_QUIRK_NON_STANDARD_TUNING |
1146 #endif
1147 #ifdef CONFIG_ARCH_TEGRA_3x_SOC
1148                   SDHCI_QUIRK_NONSTANDARD_CLOCK |
1149 #endif
1150                   SDHCI_QUIRK_SINGLE_POWER_WRITE |
1151                   SDHCI_QUIRK_NO_HISPD_BIT |
1152                   SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC |
1153                   SDHCI_QUIRK_BROKEN_CARD_DETECTION |
1154                   SDHCI_QUIRK_NO_CALC_MAX_DISCARD_TO,
1155         .quirks2 = SDHCI_QUIRK2_BROKEN_PRESET_VALUES,
1156         .ops  = &tegra_sdhci_ops,
1157 };
1158
1159 static struct sdhci_tegra_soc_data soc_data_tegra20 = {
1160         .pdata = &sdhci_tegra20_pdata,
1161         .nvquirks = NVQUIRK_FORCE_SDHCI_SPEC_200 |
1162 #if defined(CONFIG_ARCH_TEGRA_11x_SOC)
1163                     NVQUIRK_SET_DRIVE_STRENGTH |
1164 #elif defined(CONFIG_ARCH_TEGRA_2x_SOC)
1165                     NVQUIRK_DISABLE_AUTO_CALIBRATION |
1166 #elif defined(CONFIG_ARCH_TEGRA_3x_SOC)
1167                     NVQUIRK_SET_CALIBRATION_OFFSETS |
1168 #endif
1169                     NVQUIRK_ENABLE_BLOCK_GAP_DET,
1170 };
1171
1172 #ifdef CONFIG_ARCH_TEGRA_3x_SOC
1173 static struct sdhci_pltfm_data sdhci_tegra30_pdata = {
1174         .quirks = SDHCI_QUIRK_BROKEN_TIMEOUT_VAL |
1175                   SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK |
1176                   SDHCI_QUIRK_SINGLE_POWER_WRITE |
1177                   SDHCI_QUIRK_NO_HISPD_BIT |
1178                   SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC,
1179         .ops  = &tegra_sdhci_ops,
1180 };
1181
1182 static struct sdhci_tegra_soc_data soc_data_tegra30 = {
1183         .pdata = &sdhci_tegra30_pdata,
1184 };
1185 #endif
1186
1187 static const struct of_device_id sdhci_tegra_dt_match[] __devinitdata = {
1188 #ifdef CONFIG_ARCH_TEGRA_3x_SOC
1189         { .compatible = "nvidia,tegra30-sdhci", .data = &soc_data_tegra30 },
1190 #endif
1191 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
1192         { .compatible = "nvidia,tegra20-sdhci", .data = &soc_data_tegra20 },
1193 #endif
1194         {}
1195 };
1196 MODULE_DEVICE_TABLE(of, sdhci_dt_ids);
1197
1198 static struct tegra_sdhci_platform_data * __devinit sdhci_tegra_dt_parse_pdata(
1199                                                 struct platform_device *pdev)
1200 {
1201         struct tegra_sdhci_platform_data *plat;
1202         struct device_node *np = pdev->dev.of_node;
1203
1204         if (!np)
1205                 return NULL;
1206
1207         plat = devm_kzalloc(&pdev->dev, sizeof(*plat), GFP_KERNEL);
1208         if (!plat) {
1209                 dev_err(&pdev->dev, "Can't allocate platform data\n");
1210                 return NULL;
1211         }
1212
1213         plat->cd_gpio = of_get_named_gpio(np, "cd-gpios", 0);
1214         plat->wp_gpio = of_get_named_gpio(np, "wp-gpios", 0);
1215         plat->power_gpio = of_get_named_gpio(np, "power-gpios", 0);
1216         if (of_find_property(np, "support-8bit", NULL))
1217                 plat->is_8bit = 1;
1218
1219         return plat;
1220 }
1221
1222 static int __devinit sdhci_tegra_probe(struct platform_device *pdev)
1223 {
1224         const struct of_device_id *match;
1225         const struct sdhci_tegra_soc_data *soc_data;
1226         struct sdhci_host *host;
1227         struct sdhci_pltfm_host *pltfm_host;
1228         struct tegra_sdhci_platform_data *plat;
1229         struct sdhci_tegra *tegra_host;
1230         int rc;
1231
1232         match = of_match_device(sdhci_tegra_dt_match, &pdev->dev);
1233         if (match)
1234                 soc_data = match->data;
1235         else
1236                 soc_data = &soc_data_tegra20;
1237
1238         host = sdhci_pltfm_init(pdev, soc_data->pdata);
1239         if (IS_ERR(host))
1240                 return PTR_ERR(host);
1241
1242         pltfm_host = sdhci_priv(host);
1243
1244         plat = pdev->dev.platform_data;
1245
1246         if (plat == NULL)
1247                 plat = sdhci_tegra_dt_parse_pdata(pdev);
1248
1249         if (plat == NULL) {
1250                 dev_err(mmc_dev(host->mmc), "missing platform data\n");
1251                 rc = -ENXIO;
1252                 goto err_no_plat;
1253         }
1254
1255         tegra_host = devm_kzalloc(&pdev->dev, sizeof(*tegra_host), GFP_KERNEL);
1256         if (!tegra_host) {
1257                 dev_err(mmc_dev(host->mmc), "failed to allocate tegra_host\n");
1258                 rc = -ENOMEM;
1259                 goto err_no_plat;
1260         }
1261
1262         tegra_host->plat = plat;
1263         tegra_host->soc_data = soc_data;
1264
1265         pltfm_host->priv = tegra_host;
1266
1267 #ifdef CONFIG_MMC_EMBEDDED_SDIO
1268         if (plat->mmc_data.embedded_sdio)
1269                 mmc_set_embedded_sdio_data(host->mmc,
1270                         &plat->mmc_data.embedded_sdio->cis,
1271                         &plat->mmc_data.embedded_sdio->cccr,
1272                         plat->mmc_data.embedded_sdio->funcs,
1273                         plat->mmc_data.embedded_sdio->num_funcs);
1274 #endif
1275
1276         if (gpio_is_valid(plat->power_gpio)) {
1277                 rc = gpio_request(plat->power_gpio, "sdhci_power");
1278                 if (rc) {
1279                         dev_err(mmc_dev(host->mmc),
1280                                 "failed to allocate power gpio\n");
1281                         goto err_power_req;
1282                 }
1283                 gpio_direction_output(plat->power_gpio, 1);
1284         }
1285
1286         if (gpio_is_valid(plat->cd_gpio)) {
1287                 rc = gpio_request(plat->cd_gpio, "sdhci_cd");
1288                 if (rc) {
1289                         dev_err(mmc_dev(host->mmc),
1290                                 "failed to allocate cd gpio\n");
1291                         goto err_cd_req;
1292                 }
1293                 gpio_direction_input(plat->cd_gpio);
1294
1295                 tegra_host->card_present = (gpio_get_value(plat->cd_gpio) == 0);
1296
1297                 rc = request_threaded_irq(gpio_to_irq(plat->cd_gpio), NULL,
1298                                  carddetect_irq,
1299                                  IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
1300                                  mmc_hostname(host->mmc), host);
1301
1302                 if (rc) {
1303                         dev_err(mmc_dev(host->mmc), "request irq error\n");
1304                         goto err_cd_irq_req;
1305                 }
1306                 rc = enable_irq_wake(gpio_to_irq(plat->cd_gpio));
1307                 if (rc < 0)
1308                         dev_err(mmc_dev(host->mmc),
1309                                 "SD card wake-up event registration"
1310                                         "failed with eroor: %d\n", rc);
1311
1312         } else if (plat->mmc_data.register_status_notify) {
1313                 plat->mmc_data.register_status_notify(sdhci_status_notify_cb, host);
1314         }
1315
1316         if (plat->mmc_data.status) {
1317                 plat->mmc_data.card_present = plat->mmc_data.status(mmc_dev(host->mmc));
1318         }
1319
1320         if (gpio_is_valid(plat->wp_gpio)) {
1321                 rc = gpio_request(plat->wp_gpio, "sdhci_wp");
1322                 if (rc) {
1323                         dev_err(mmc_dev(host->mmc),
1324                                 "failed to allocate wp gpio\n");
1325                         goto err_wp_req;
1326                 }
1327                 gpio_direction_input(plat->wp_gpio);
1328         }
1329
1330         /*
1331          * If there is no card detect gpio, assume that the
1332          * card is always present.
1333          */
1334         if (!gpio_is_valid(plat->cd_gpio))
1335                 tegra_host->card_present = 1;
1336
1337         if (plat->mmc_data.ocr_mask & SDHOST_1V8_OCR_MASK) {
1338                 tegra_host->vddio_min_uv = SDHOST_LOW_VOLT_MIN;
1339                 tegra_host->vddio_max_uv = SDHOST_LOW_VOLT_MAX;
1340         } else if (plat->mmc_data.ocr_mask & MMC_OCR_2V8_MASK) {
1341                         tegra_host->vddio_min_uv = SDHOST_HIGH_VOLT_2V8;
1342                         tegra_host->vddio_max_uv = SDHOST_HIGH_VOLT_MAX;
1343         } else {
1344                 /*
1345                  * Set the minV and maxV to default
1346                  * voltage range of 2.7V - 3.6V
1347                  */
1348                 tegra_host->vddio_min_uv = SDHOST_HIGH_VOLT_MIN;
1349                 tegra_host->vddio_max_uv = SDHOST_HIGH_VOLT_MAX;
1350         }
1351
1352         tegra_host->vdd_io_reg = regulator_get(mmc_dev(host->mmc),
1353                                                         "vddio_sdmmc");
1354         if (IS_ERR_OR_NULL(tegra_host->vdd_io_reg)) {
1355                 dev_info(mmc_dev(host->mmc), "%s regulator not found: %ld."
1356                         "Assuming vddio_sdmmc is not required.\n",
1357                         "vddio_sdmmc", PTR_ERR(tegra_host->vdd_io_reg));
1358                 tegra_host->vdd_io_reg = NULL;
1359         } else {
1360                 rc = regulator_set_voltage(tegra_host->vdd_io_reg,
1361                         tegra_host->vddio_min_uv,
1362                         tegra_host->vddio_max_uv);
1363                 if (rc) {
1364                         dev_err(mmc_dev(host->mmc), "%s regulator_set_voltage failed: %d",
1365                                 "vddio_sdmmc", rc);
1366                         regulator_put(tegra_host->vdd_io_reg);
1367                         tegra_host->vdd_io_reg = NULL;
1368                 }
1369         }
1370
1371         tegra_host->vdd_slot_reg = regulator_get(mmc_dev(host->mmc),
1372                                                         "vddio_sd_slot");
1373         if (IS_ERR_OR_NULL(tegra_host->vdd_slot_reg)) {
1374                 dev_info(mmc_dev(host->mmc), "%s regulator not found: %ld."
1375                         " Assuming vddio_sd_slot is not required.\n",
1376                         "vddio_sd_slot", PTR_ERR(tegra_host->vdd_slot_reg));
1377                 tegra_host->vdd_slot_reg = NULL;
1378         }
1379
1380         if (tegra_host->card_present) {
1381                 if (tegra_host->vdd_slot_reg)
1382                         regulator_enable(tegra_host->vdd_slot_reg);
1383                 if (tegra_host->vdd_io_reg)
1384                         regulator_enable(tegra_host->vdd_io_reg);
1385                 tegra_host->is_rail_enabled = 1;
1386         }
1387
1388         pm_runtime_enable(&pdev->dev);
1389         pltfm_host->clk = clk_get(mmc_dev(host->mmc), NULL);
1390         if (IS_ERR(pltfm_host->clk)) {
1391                 dev_err(mmc_dev(host->mmc), "clk err\n");
1392                 rc = PTR_ERR(pltfm_host->clk);
1393                 goto err_clk_get;
1394         }
1395         pm_runtime_get_sync(&pdev->dev);
1396         rc = clk_prepare_enable(pltfm_host->clk);
1397         if (rc != 0)
1398                 goto err_clk_put;
1399
1400         if (!strcmp(dev_name(mmc_dev(host->mmc)), "sdhci-tegra.3")) {
1401                 tegra_host->emc_clk = clk_get(mmc_dev(host->mmc), "emc");
1402                 if (IS_ERR(tegra_host->emc_clk)) {
1403                         dev_err(mmc_dev(host->mmc), "clk err\n");
1404                         rc = PTR_ERR(tegra_host->emc_clk);
1405                         goto err_clk_put;
1406                 }
1407                 tegra_host->emc_max_clk =
1408                         clk_round_rate(tegra_host->emc_clk, ULONG_MAX);
1409         }
1410
1411         pltfm_host->priv = tegra_host;
1412         tegra_host->clk_enabled = true;
1413         tegra_host->max_clk_limit = plat->max_clk_limit;
1414         tegra_host->ddr_clk_limit = plat->ddr_clk_limit;
1415         tegra_host->instance = pdev->id;
1416         tegra_host->dpd = tegra_io_dpd_get(mmc_dev(host->mmc));
1417
1418         host->mmc->pm_caps |= plat->pm_caps;
1419         host->mmc->pm_flags |= plat->pm_flags;
1420
1421         /*
1422          * tegra sd controller is not able to reset the command inhibit
1423          * bit for the mmc sleep/awake command
1424          */
1425         host->mmc->caps2 |= MMC_CAP2_NO_SLEEP_CMD;
1426
1427         host->mmc->caps |= MMC_CAP_ERASE;
1428         /* enable 1/8V DDR capable */
1429         host->mmc->caps |= MMC_CAP_1_8V_DDR;
1430         if (plat->is_8bit)
1431                 host->mmc->caps |= MMC_CAP_8_BIT_DATA;
1432         host->mmc->caps |= MMC_CAP_SDIO_IRQ;
1433         host->mmc->pm_caps |= MMC_PM_KEEP_POWER | MMC_PM_IGNORE_PM_NOTIFY;
1434         if (plat->mmc_data.built_in) {
1435                 host->mmc->caps |= MMC_CAP_NONREMOVABLE;
1436         }
1437         host->mmc->pm_flags |= MMC_PM_IGNORE_PM_NOTIFY;
1438
1439 #ifdef CONFIG_MMC_BKOPS
1440         host->mmc->caps2 |= MMC_CAP2_BKOPS;
1441 #endif
1442
1443         tegra_sdhost_min_freq = TEGRA_SDHOST_MIN_FREQ;
1444 #if defined(CONFIG_ARCH_TEGRA_2x_SOC)
1445         tegra_host->hw_ops = &tegra_2x_sdhci_ops;
1446         tegra_sdhost_std_freq = TEGRA2_SDHOST_STD_FREQ;
1447 #elif defined(CONFIG_ARCH_TEGRA_3x_SOC)
1448         tegra_host->hw_ops = &tegra_3x_sdhci_ops;
1449         tegra_sdhost_std_freq = TEGRA3_SDHOST_STD_FREQ;
1450 #else
1451         tegra_host->hw_ops = &tegra_11x_sdhci_ops;
1452         tegra_sdhost_std_freq = TEGRA3_SDHOST_STD_FREQ;
1453 #endif
1454         rc = sdhci_add_host(host);
1455         if (rc)
1456                 goto err_add_host;
1457
1458         /* Enable async suspend/resume to reduce LP0 latency */
1459         device_enable_async_suspend(&pdev->dev);
1460
1461         return 0;
1462
1463 err_add_host:
1464         clk_put(tegra_host->emc_clk);
1465         clk_disable_unprepare(pltfm_host->clk);
1466         pm_runtime_put_sync(&pdev->dev);
1467 err_clk_put:
1468         clk_put(pltfm_host->clk);
1469 err_clk_get:
1470         if (gpio_is_valid(plat->wp_gpio))
1471                 gpio_free(plat->wp_gpio);
1472 err_wp_req:
1473         if (gpio_is_valid(plat->cd_gpio))
1474                 free_irq(gpio_to_irq(plat->cd_gpio), host);
1475 err_cd_irq_req:
1476         if (gpio_is_valid(plat->cd_gpio))
1477                 gpio_free(plat->cd_gpio);
1478 err_cd_req:
1479         if (gpio_is_valid(plat->power_gpio))
1480                 gpio_free(plat->power_gpio);
1481 err_power_req:
1482 err_no_plat:
1483         sdhci_pltfm_free(pdev);
1484         return rc;
1485 }
1486
1487 static int __devexit sdhci_tegra_remove(struct platform_device *pdev)
1488 {
1489         struct sdhci_host *host = platform_get_drvdata(pdev);
1490         struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
1491         struct sdhci_tegra *tegra_host = pltfm_host->priv;
1492         const struct tegra_sdhci_platform_data *plat = tegra_host->plat;
1493         int dead = (readl(host->ioaddr + SDHCI_INT_STATUS) == 0xffffffff);
1494
1495         sdhci_remove_host(host, dead);
1496
1497         disable_irq_wake(gpio_to_irq(plat->cd_gpio));
1498
1499         if (tegra_host->vdd_slot_reg) {
1500                 regulator_disable(tegra_host->vdd_slot_reg);
1501                 regulator_put(tegra_host->vdd_slot_reg);
1502         }
1503
1504         if (tegra_host->vdd_io_reg) {
1505                 regulator_disable(tegra_host->vdd_io_reg);
1506                 regulator_put(tegra_host->vdd_io_reg);
1507         }
1508
1509         if (gpio_is_valid(plat->wp_gpio))
1510                 gpio_free(plat->wp_gpio);
1511
1512         if (gpio_is_valid(plat->cd_gpio)) {
1513                 free_irq(gpio_to_irq(plat->cd_gpio), host);
1514                 gpio_free(plat->cd_gpio);
1515         }
1516
1517         if (gpio_is_valid(plat->power_gpio))
1518                 gpio_free(plat->power_gpio);
1519
1520         if (tegra_host->clk_enabled) {
1521                 clk_disable_unprepare(pltfm_host->clk);
1522                 pm_runtime_put_sync(&pdev->dev);
1523         }
1524         clk_put(pltfm_host->clk);
1525
1526         sdhci_pltfm_free(pdev);
1527
1528         return 0;
1529 }
1530
1531 static struct platform_driver sdhci_tegra_driver = {
1532         .driver         = {
1533                 .name   = "sdhci-tegra",
1534                 .owner  = THIS_MODULE,
1535                 .of_match_table = sdhci_tegra_dt_match,
1536                 .pm     = SDHCI_PLTFM_PMOPS,
1537         },
1538         .probe          = sdhci_tegra_probe,
1539         .remove         = __devexit_p(sdhci_tegra_remove),
1540 };
1541
1542 module_platform_driver(sdhci_tegra_driver);
1543
1544 MODULE_DESCRIPTION("SDHCI driver for Tegra");
1545 MODULE_AUTHOR("Google, Inc.");
1546 MODULE_LICENSE("GPL v2");