58bcee3d5642c717d1a49628db526dae7f70208d
[openwrt.git] / target / linux / brcm2708 / patches-3.10 / 0012-sdhci-bcm2708-remove-custom-clock-handling.patch
1 From 3f65aaaabc3ddc09bacf06bb608f8bab5671fb18 Mon Sep 17 00:00:00 2001
2 From: Grigori Goronzy <greg@blackbox>
3 Date: Mon, 11 Jun 2012 18:52:04 +0200
4 Subject: [PATCH 012/174] sdhci-bcm2708: remove custom clock handling
5
6 The custom clock handling code is redundant and buggy. The MMC/SDHCI
7 subsystem does a better job than it, so remove it for good.
8 ---
9  drivers/mmc/host/sdhci-bcm2708.c | 65 +---------------------------------------
10  1 file changed, 1 insertion(+), 64 deletions(-)
11
12 --- a/drivers/mmc/host/sdhci-bcm2708.c
13 +++ b/drivers/mmc/host/sdhci-bcm2708.c
14 @@ -353,68 +353,9 @@ void sdhci_bcm2708_writeb(struct sdhci_h
15  
16  static unsigned int sdhci_bcm2708_get_max_clock(struct sdhci_host *host)
17  {
18 -       return 20000000;        // this value is in Hz (20MHz)
19 +       return BCM2708_EMMC_CLOCK_FREQ;
20  }
21  
22 -static unsigned int sdhci_bcm2708_get_timeout_clock(struct sdhci_host *host)
23 -{
24 -       if(host->clock)
25 -               return (host->clock / 1000);            // this value is in kHz (100MHz)
26 -       else
27 -               return (sdhci_bcm2708_get_max_clock(host) / 1000);
28 -}
29 -
30 -static void sdhci_bcm2708_set_clock(struct sdhci_host *host, unsigned int clock)
31 -{
32 -       int div = 0;
33 -       u16 clk = 0;
34 -       unsigned long timeout;
35 -
36 -        if (clock == host->clock)
37 -                return;
38 -
39 -        sdhci_writew(host, 0, SDHCI_CLOCK_CONTROL);
40 -
41 -        if (clock == 0)
42 -                goto out;
43 -
44 -       if (BCM2708_EMMC_CLOCK_FREQ <= clock)
45 -               div = 1;
46 -       else {
47 -               for (div = 2; div < SDHCI_MAX_DIV_SPEC_300; div += 2) {
48 -                       if ((BCM2708_EMMC_CLOCK_FREQ / div) <= clock)
49 -                               break;
50 -               }
51 -       }
52 -
53 -        DBG( "desired SD clock: %d, actual: %d\n",
54 -                clock, BCM2708_EMMC_CLOCK_FREQ / div);
55 -
56 -       clk |= (div & SDHCI_DIV_MASK) << SDHCI_DIVIDER_SHIFT;
57 -       clk |= ((div & SDHCI_DIV_HI_MASK) >> SDHCI_DIV_MASK_LEN)
58 -               << SDHCI_DIVIDER_HI_SHIFT;
59 -       clk |= SDHCI_CLOCK_INT_EN;
60 -
61 -       sdhci_writew(host, clk, SDHCI_CLOCK_CONTROL);
62 -
63 -        timeout = 20;
64 -        while (!((clk = sdhci_readw(host, SDHCI_CLOCK_CONTROL))
65 -                        & SDHCI_CLOCK_INT_STABLE)) {
66 -                if (timeout == 0) {
67 -                       printk(KERN_ERR "%s: Internal clock never "
68 -                               "stabilised.\n", mmc_hostname(host->mmc));
69 -                        return;
70 -                }
71 -                timeout--;
72 -                mdelay(1);
73 -        }
74 -
75 -        clk |= SDHCI_CLOCK_CARD_EN;
76 -        sdhci_writew(host, clk, SDHCI_CLOCK_CONTROL);
77 -out:
78 -        host->clock = clock;
79 - }
80 -
81  /*****************************************************************************\
82   *                                                                          *
83   * DMA Operation                                                            *
84 @@ -1189,11 +1130,7 @@ static struct sdhci_ops sdhci_bcm2708_op
85  #else
86  #error The BCM2708 SDHCI driver needs CONFIG_MMC_SDHCI_IO_ACCESSORS to be set
87  #endif
88 -       //.enable_dma = NULL,
89 -       .set_clock = sdhci_bcm2708_set_clock,
90         .get_max_clock = sdhci_bcm2708_get_max_clock,
91 -       //.get_min_clock = NULL,
92 -       .get_timeout_clock = sdhci_bcm2708_get_timeout_clock,
93  
94  #ifdef CONFIG_MMC_SDHCI_BCM2708_DMA
95         // Platform DMA operations