~ubuntu-branches/ubuntu/precise/linux-ti-omap4/precise

« back to all changes in this revision

Viewing changes to arch/arm/mach-mxs/clock-mx28.c

  • Committer: Bazaar Package Importer
  • Author(s): Paolo Pisati
  • Date: 2011-06-29 15:23:51 UTC
  • mfrom: (26.1.1 natty-proposed)
  • Revision ID: james.westby@ubuntu.com-20110629152351-xs96tm303d95rpbk
Tags: 3.0.0-1200.2
* Rebased against 3.0.0-6.7
* BSP from TI based on 3.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
295
295
        unsigned long diff, parent_rate, calc_rate;                     \
296
296
        int i;                                                          \
297
297
                                                                        \
298
 
        parent_rate = clk_get_rate(clk->parent);                        \
299
298
        div_max = BM_CLKCTRL_##dr##_DIV >> BP_CLKCTRL_##dr##_DIV;       \
300
299
        bm_busy = BM_CLKCTRL_##dr##_BUSY;                               \
301
300
                                                                        \
302
301
        if (clk->parent == &ref_xtal_clk) {                             \
 
302
                parent_rate = clk_get_rate(clk->parent);                \
303
303
                div = DIV_ROUND_UP(parent_rate, rate);                  \
304
304
                if (clk == &cpu_clk) {                                  \
305
305
                        div_max = BM_CLKCTRL_CPU_DIV_XTAL >>            \
309
309
                if (div == 0 || div > div_max)                          \
310
310
                        return -EINVAL;                                 \
311
311
        } else {                                                        \
 
312
                /*                                                      \
 
313
                 * hack alert: this block modifies clk->parent, too,    \
 
314
                 * so the base to use it the grand parent.              \
 
315
                 */                                                     \
 
316
                parent_rate = clk_get_rate(clk->parent->parent);        \
312
317
                rate >>= PARENT_RATE_SHIFT;                             \
313
318
                parent_rate >>= PARENT_RATE_SHIFT;                      \
314
319
                diff = parent_rate;                                     \
618
623
        _REGISTER_CLOCK("pll2", NULL, pll2_clk)
619
624
        _REGISTER_CLOCK("mxs-dma-apbh", NULL, hbus_clk)
620
625
        _REGISTER_CLOCK("mxs-dma-apbx", NULL, xbus_clk)
 
626
        _REGISTER_CLOCK("mxs-mmc.0", NULL, ssp0_clk)
 
627
        _REGISTER_CLOCK("mxs-mmc.1", NULL, ssp1_clk)
621
628
        _REGISTER_CLOCK("flexcan.0", NULL, can0_clk)
622
629
        _REGISTER_CLOCK("flexcan.1", NULL, can1_clk)
623
630
        _REGISTER_CLOCK(NULL, "usb0", usb0_clk)
737
744
        reg |= BM_CLKCTRL_ENET_CLK_OUT_EN;
738
745
        __raw_writel(reg, CLKCTRL_BASE_ADDR + HW_CLKCTRL_ENET);
739
746
 
 
747
        /*
 
748
         * 480 MHz seems too high to be ssp clock source directly,
 
749
         * so set frac0 to get a 288 MHz ref_io0.
 
750
         */
 
751
        reg = __raw_readl(CLKCTRL_BASE_ADDR + HW_CLKCTRL_FRAC0);
 
752
        reg &= ~BM_CLKCTRL_FRAC0_IO0FRAC;
 
753
        reg |= 30 << BP_CLKCTRL_FRAC0_IO0FRAC;
 
754
        __raw_writel(reg, CLKCTRL_BASE_ADDR + HW_CLKCTRL_FRAC0);
 
755
 
740
756
        return 0;
741
757
}
742
758
 
744
760
{
745
761
        clk_misc_init();
746
762
 
 
763
        /*
 
764
         * source ssp clock from ref_io0 than ref_xtal,
 
765
         * as ref_xtal only provides 24 MHz as maximum.
 
766
         */
 
767
        clk_set_parent(&ssp0_clk, &ref_io0_clk);
 
768
        clk_set_parent(&ssp1_clk, &ref_io0_clk);
 
769
 
747
770
        clk_enable(&cpu_clk);
748
771
        clk_enable(&hbus_clk);
749
772
        clk_enable(&xbus_clk);