428
536
.set_rate = tegra2_bus_clk_set_rate,
539
/* Blink output functions */
541
static void tegra2_blink_clk_init(struct clk *c)
545
val = pmc_readl(PMC_CTRL);
546
c->state = (val & PMC_CTRL_BLINK_ENB) ? ON : OFF;
548
val = pmc_readl(c->reg);
550
if (val & PMC_BLINK_TIMER_ENB) {
553
on_off = (val >> PMC_BLINK_TIMER_DATA_ON_SHIFT) &
554
PMC_BLINK_TIMER_DATA_ON_MASK;
555
val >>= PMC_BLINK_TIMER_DATA_OFF_SHIFT;
556
val &= PMC_BLINK_TIMER_DATA_OFF_MASK;
558
/* each tick in the blink timer is 4 32KHz clocks */
565
static int tegra2_blink_clk_enable(struct clk *c)
569
val = pmc_readl(PMC_DPD_PADS_ORIDE);
570
pmc_writel(val | PMC_DPD_PADS_ORIDE_BLINK_ENB, PMC_DPD_PADS_ORIDE);
572
val = pmc_readl(PMC_CTRL);
573
pmc_writel(val | PMC_CTRL_BLINK_ENB, PMC_CTRL);
578
static void tegra2_blink_clk_disable(struct clk *c)
582
val = pmc_readl(PMC_CTRL);
583
pmc_writel(val & ~PMC_CTRL_BLINK_ENB, PMC_CTRL);
585
val = pmc_readl(PMC_DPD_PADS_ORIDE);
586
pmc_writel(val & ~PMC_DPD_PADS_ORIDE_BLINK_ENB, PMC_DPD_PADS_ORIDE);
589
static int tegra2_blink_clk_set_rate(struct clk *c, unsigned long rate)
591
unsigned long parent_rate = clk_get_rate(c->parent);
592
if (rate >= parent_rate) {
594
pmc_writel(0, c->reg);
599
on_off = DIV_ROUND_UP(parent_rate / 8, rate);
602
val = (on_off & PMC_BLINK_TIMER_DATA_ON_MASK) <<
603
PMC_BLINK_TIMER_DATA_ON_SHIFT;
604
on_off &= PMC_BLINK_TIMER_DATA_OFF_MASK;
605
on_off <<= PMC_BLINK_TIMER_DATA_OFF_SHIFT;
607
val |= PMC_BLINK_TIMER_ENB;
608
pmc_writel(val, c->reg);
614
static struct clk_ops tegra_blink_clk_ops = {
615
.init = &tegra2_blink_clk_init,
616
.enable = &tegra2_blink_clk_enable,
617
.disable = &tegra2_blink_clk_disable,
618
.set_rate = &tegra2_blink_clk_set_rate,
431
621
/* PLL Functions */
432
622
static int tegra2_pll_clk_wait_for_lock(struct clk *c)
436
before = ktime_get();
438
while (!(clk_readl(c->reg + PLL_BASE) & PLL_BASE_LOCK)) {
439
if (ktime_us_delta(ktime_get(), before) > 5000) {
440
pr_err("Timed out waiting for lock bit on pll %s",
624
udelay(c->u.pll.lock_delay);
982
static int tegra2_audio_sync_clk_set_rate(struct clk *c, unsigned long rate)
984
unsigned long parent_rate;
986
pr_err("%s: clock has no parent\n", __func__);
989
parent_rate = c->parent->rate;
990
if (rate != parent_rate) {
991
pr_err("%s: %s/%ld differs from parent %s/%ld\n",
994
c->parent->name, parent_rate);
997
c->rate = parent_rate;
1001
1276
static struct clk_ops tegra_audio_sync_clk_ops = {
1002
1277
.init = tegra2_audio_sync_clk_init,
1003
1278
.enable = tegra2_audio_sync_clk_enable,
1004
1279
.disable = tegra2_audio_sync_clk_disable,
1005
.set_rate = tegra2_audio_sync_clk_set_rate,
1006
1280
.set_parent = tegra2_audio_sync_clk_set_parent,
1283
/* cdev1 and cdev2 (dap_mclk1 and dap_mclk2) ops */
1285
static void tegra2_cdev_clk_init(struct clk *c)
1287
/* We could un-tristate the cdev1 or cdev2 pingroup here; this is
1288
* currently done in the pinmux code. */
1291
BUG_ON(!c->u.periph.clk_num);
1293
if (!(clk_readl(CLK_OUT_ENB + PERIPH_CLK_TO_ENB_REG(c)) &
1294
PERIPH_CLK_TO_ENB_BIT(c)))
1298
static int tegra2_cdev_clk_enable(struct clk *c)
1300
BUG_ON(!c->u.periph.clk_num);
1302
clk_writel(PERIPH_CLK_TO_ENB_BIT(c),
1303
CLK_OUT_ENB_SET + PERIPH_CLK_TO_ENB_SET_REG(c));
1307
static void tegra2_cdev_clk_disable(struct clk *c)
1309
BUG_ON(!c->u.periph.clk_num);
1311
clk_writel(PERIPH_CLK_TO_ENB_BIT(c),
1312
CLK_OUT_ENB_CLR + PERIPH_CLK_TO_ENB_SET_REG(c));
1315
static struct clk_ops tegra_cdev_clk_ops = {
1316
.init = &tegra2_cdev_clk_init,
1317
.enable = &tegra2_cdev_clk_enable,
1318
.disable = &tegra2_cdev_clk_disable,
1321
/* shared bus ops */
1323
* Some clocks may have multiple downstream users that need to request a
1324
* higher clock rate. Shared bus clocks provide a unique shared_bus_user
1325
* clock to each user. The frequency of the bus is set to the highest
1326
* enabled shared_bus_user clock, with a minimum value set by the
1329
static int tegra_clk_shared_bus_update(struct clk *bus)
1332
unsigned long rate = bus->min_rate;
1334
list_for_each_entry(c, &bus->shared_bus_list, u.shared_bus_user.node)
1335
if (c->u.shared_bus_user.enabled)
1336
rate = max(c->u.shared_bus_user.rate, rate);
1338
if (rate == clk_get_rate_locked(bus))
1341
return clk_set_rate_locked(bus, rate);
1344
static void tegra_clk_shared_bus_init(struct clk *c)
1346
unsigned long flags;
1348
c->max_rate = c->parent->max_rate;
1349
c->u.shared_bus_user.rate = c->parent->max_rate;
1353
spin_lock_irqsave(&c->parent->spinlock, flags);
1355
list_add_tail(&c->u.shared_bus_user.node,
1356
&c->parent->shared_bus_list);
1358
spin_unlock_irqrestore(&c->parent->spinlock, flags);
1361
static int tegra_clk_shared_bus_set_rate(struct clk *c, unsigned long rate)
1363
unsigned long flags;
1366
rate = clk_round_rate(c->parent, rate);
1370
spin_lock_irqsave(&c->parent->spinlock, flags);
1372
c->u.shared_bus_user.rate = rate;
1373
ret = tegra_clk_shared_bus_update(c->parent);
1375
spin_unlock_irqrestore(&c->parent->spinlock, flags);
1380
static long tegra_clk_shared_bus_round_rate(struct clk *c, unsigned long rate)
1382
return clk_round_rate(c->parent, rate);
1385
static int tegra_clk_shared_bus_enable(struct clk *c)
1387
unsigned long flags;
1390
spin_lock_irqsave(&c->parent->spinlock, flags);
1392
c->u.shared_bus_user.enabled = true;
1393
ret = tegra_clk_shared_bus_update(c->parent);
1395
spin_unlock_irqrestore(&c->parent->spinlock, flags);
1400
static void tegra_clk_shared_bus_disable(struct clk *c)
1402
unsigned long flags;
1405
spin_lock_irqsave(&c->parent->spinlock, flags);
1407
c->u.shared_bus_user.enabled = false;
1408
ret = tegra_clk_shared_bus_update(c->parent);
1411
spin_unlock_irqrestore(&c->parent->spinlock, flags);
1414
static struct clk_ops tegra_clk_shared_bus_ops = {
1415
.init = tegra_clk_shared_bus_init,
1416
.enable = tegra_clk_shared_bus_enable,
1417
.disable = tegra_clk_shared_bus_disable,
1418
.set_rate = tegra_clk_shared_bus_set_rate,
1419
.round_rate = tegra_clk_shared_bus_round_rate,
1009
1423
/* Clock definitions */
1010
1424
static struct clk tegra_clk_32k = {
1011
1425
.name = "clk_32k",
1595
2104
.con_id = _con, \
1597
2106
.ops = &tegra_periph_clk_ops, \
1598
.clk_num = _clk_num, \
1600
2108
.inputs = _inputs, \
1601
2109
.flags = _flags, \
1602
2110
.max_rate = _max, \
1605
struct clk tegra_periph_clks[] = {
2112
.clk_num = _clk_num, \
2116
#define SHARED_CLK(_name, _dev, _con, _parent) \
2123
.ops = &tegra_clk_shared_bus_ops, \
2124
.parent = _parent, \
2127
struct clk tegra_list_clks[] = {
2128
PERIPH_CLK("apbdma", "tegra-dma", NULL, 34, 0, 108000000, mux_pclk, 0),
1606
2129
PERIPH_CLK("rtc", "rtc-tegra", NULL, 4, 0, 32768, mux_clk_32k, PERIPH_NO_RESET),
1607
2130
PERIPH_CLK("timer", "timer", NULL, 5, 0, 26000000, mux_clk_m, 0),
1608
PERIPH_CLK("i2s1", "i2s.0", NULL, 11, 0x100, 26000000, mux_pllaout0_audio2x_pllp_clkm, MUX | DIV_U71),
1609
PERIPH_CLK("i2s2", "i2s.1", NULL, 18, 0x104, 26000000, mux_pllaout0_audio2x_pllp_clkm, MUX | DIV_U71),
1610
/* FIXME: spdif has 2 clocks but 1 enable */
2131
PERIPH_CLK("i2s1", "tegra-i2s.0", NULL, 11, 0x100, 26000000, mux_pllaout0_audio2x_pllp_clkm, MUX | DIV_U71),
2132
PERIPH_CLK("i2s2", "tegra-i2s.1", NULL, 18, 0x104, 26000000, mux_pllaout0_audio2x_pllp_clkm, MUX | DIV_U71),
1611
2133
PERIPH_CLK("spdif_out", "spdif_out", NULL, 10, 0x108, 100000000, mux_pllaout0_audio2x_pllp_clkm, MUX | DIV_U71),
1612
2134
PERIPH_CLK("spdif_in", "spdif_in", NULL, 10, 0x10c, 100000000, mux_pllp_pllc_pllm, MUX | DIV_U71),
1613
2135
PERIPH_CLK("pwm", "pwm", NULL, 17, 0x110, 432000000, mux_pllp_pllc_audio_clkm_clk32, MUX | DIV_U71),
1620
2142
PERIPH_CLK("sbc4", "spi_tegra.3", NULL, 68, 0x1b4, 160000000, mux_pllp_pllc_pllm_clkm, MUX | DIV_U71),
1621
2143
PERIPH_CLK("ide", "ide", NULL, 25, 0x144, 100000000, mux_pllp_pllc_pllm_clkm, MUX | DIV_U71), /* requires min voltage */
1622
2144
PERIPH_CLK("ndflash", "tegra_nand", NULL, 13, 0x160, 164000000, mux_pllp_pllc_pllm_clkm, MUX | DIV_U71), /* scales with voltage */
1623
/* FIXME: vfir shares an enable with uartb */
1624
2145
PERIPH_CLK("vfir", "vfir", NULL, 7, 0x168, 72000000, mux_pllp_pllc_pllm_clkm, MUX | DIV_U71),
1625
2146
PERIPH_CLK("sdmmc1", "sdhci-tegra.0", NULL, 14, 0x150, 52000000, mux_pllp_pllc_pllm_clkm, MUX | DIV_U71), /* scales with voltage */
1626
2147
PERIPH_CLK("sdmmc2", "sdhci-tegra.1", NULL, 9, 0x154, 52000000, mux_pllp_pllc_pllm_clkm, MUX | DIV_U71), /* scales with voltage */
1627
2148
PERIPH_CLK("sdmmc3", "sdhci-tegra.2", NULL, 69, 0x1bc, 52000000, mux_pllp_pllc_pllm_clkm, MUX | DIV_U71), /* scales with voltage */
1628
PERIPH_CLK("sdmmc4", "sdhci-tegra.3", NULL, 15, 0x160, 52000000, mux_pllp_pllc_pllm_clkm, MUX | DIV_U71), /* scales with voltage */
1629
PERIPH_CLK("vde", "vde", NULL, 61, 0x1c8, 250000000, mux_pllp_pllc_pllm_clkm, MUX | DIV_U71), /* scales with voltage and process_id */
2149
PERIPH_CLK("sdmmc4", "sdhci-tegra.3", NULL, 15, 0x164, 52000000, mux_pllp_pllc_pllm_clkm, MUX | DIV_U71), /* scales with voltage */
2150
PERIPH_CLK("vcp", "tegra-avp", "vcp", 29, 0, 250000000, mux_clk_m, 0),
2151
PERIPH_CLK("bsea", "tegra-avp", "bsea", 62, 0, 250000000, mux_clk_m, 0),
2152
PERIPH_CLK("bsev", "tegra-aes", "bsev", 63, 0, 250000000, mux_clk_m, 0),
2153
PERIPH_CLK("vde", "tegra-avp", "vde", 61, 0x1c8, 250000000, mux_pllp_pllc_pllm_clkm, MUX | DIV_U71), /* scales with voltage and process_id */
1630
2154
PERIPH_CLK("csite", "csite", NULL, 73, 0x1d4, 144000000, mux_pllp_pllc_pllm_clkm, MUX | DIV_U71), /* max rate ??? */
1631
2155
/* FIXME: what is la? */
1632
2156
PERIPH_CLK("la", "la", NULL, 76, 0x1f8, 26000000, mux_pllp_pllc_pllm_clkm, MUX | DIV_U71),
1641
2165
PERIPH_CLK("i2c2_i2c", "tegra-i2c.1", "i2c", 0, 0, 72000000, mux_pllp_out3, 0),
1642
2166
PERIPH_CLK("i2c3_i2c", "tegra-i2c.2", "i2c", 0, 0, 72000000, mux_pllp_out3, 0),
1643
2167
PERIPH_CLK("dvc_i2c", "tegra-i2c.3", "i2c", 0, 0, 72000000, mux_pllp_out3, 0),
1644
PERIPH_CLK("uarta", "uart.0", NULL, 6, 0x178, 216000000, mux_pllp_pllc_pllm_clkm, MUX),
1645
PERIPH_CLK("uartb", "uart.1", NULL, 7, 0x17c, 216000000, mux_pllp_pllc_pllm_clkm, MUX),
1646
PERIPH_CLK("uartc", "uart.2", NULL, 55, 0x1a0, 216000000, mux_pllp_pllc_pllm_clkm, MUX),
1647
PERIPH_CLK("uartd", "uart.3", NULL, 65, 0x1c0, 216000000, mux_pllp_pllc_pllm_clkm, MUX),
1648
PERIPH_CLK("uarte", "uart.4", NULL, 66, 0x1c4, 216000000, mux_pllp_pllc_pllm_clkm, MUX),
2168
PERIPH_CLK("uarta", "uart.0", NULL, 6, 0x178, 600000000, mux_pllp_pllc_pllm_clkm, MUX),
2169
PERIPH_CLK("uartb", "uart.1", NULL, 7, 0x17c, 600000000, mux_pllp_pllc_pllm_clkm, MUX),
2170
PERIPH_CLK("uartc", "uart.2", NULL, 55, 0x1a0, 600000000, mux_pllp_pllc_pllm_clkm, MUX),
2171
PERIPH_CLK("uartd", "uart.3", NULL, 65, 0x1c0, 600000000, mux_pllp_pllc_pllm_clkm, MUX),
2172
PERIPH_CLK("uarte", "uart.4", NULL, 66, 0x1c4, 600000000, mux_pllp_pllc_pllm_clkm, MUX),
1649
2173
PERIPH_CLK("3d", "3d", NULL, 24, 0x158, 300000000, mux_pllm_pllc_pllp_plla, MUX | DIV_U71 | PERIPH_MANUAL_RESET), /* scales with voltage and process_id */
1650
2174
PERIPH_CLK("2d", "2d", NULL, 21, 0x15c, 300000000, mux_pllm_pllc_pllp_plla, MUX | DIV_U71), /* scales with voltage and process_id */
1651
/* FIXME: vi and vi_sensor share an enable */
1652
PERIPH_CLK("vi", "vi", NULL, 20, 0x148, 150000000, mux_pllm_pllc_pllp_plla, MUX | DIV_U71), /* scales with voltage and process_id */
1653
PERIPH_CLK("vi_sensor", "vi_sensor", NULL, 20, 0x1a8, 150000000, mux_pllm_pllc_pllp_plla, MUX | DIV_U71 | PERIPH_NO_RESET), /* scales with voltage and process_id */
2175
PERIPH_CLK("vi", "tegra_camera", "vi", 20, 0x148, 150000000, mux_pllm_pllc_pllp_plla, MUX | DIV_U71), /* scales with voltage and process_id */
2176
PERIPH_CLK("vi_sensor", "tegra_camera", "vi_sensor", 20, 0x1a8, 150000000, mux_pllm_pllc_pllp_plla, MUX | DIV_U71 | PERIPH_NO_RESET), /* scales with voltage and process_id */
1654
2177
PERIPH_CLK("epp", "epp", NULL, 19, 0x16c, 300000000, mux_pllm_pllc_pllp_plla, MUX | DIV_U71), /* scales with voltage and process_id */
1655
2178
PERIPH_CLK("mpe", "mpe", NULL, 60, 0x170, 250000000, mux_pllm_pllc_pllp_plla, MUX | DIV_U71), /* scales with voltage and process_id */
1656
2179
PERIPH_CLK("host1x", "host1x", NULL, 28, 0x180, 166000000, mux_pllm_pllc_pllp_plla, MUX | DIV_U71), /* scales with voltage and process_id */
1657
/* FIXME: cve and tvo share an enable */
1658
2180
PERIPH_CLK("cve", "cve", NULL, 49, 0x140, 250000000, mux_pllp_plld_pllc_clkm, MUX | DIV_U71), /* requires min voltage */
1659
2181
PERIPH_CLK("tvo", "tvo", NULL, 49, 0x188, 250000000, mux_pllp_plld_pllc_clkm, MUX | DIV_U71), /* requires min voltage */
1660
PERIPH_CLK("hdmi", "hdmi", NULL, 51, 0x18c, 148500000, mux_pllp_plld_pllc_clkm, MUX | DIV_U71), /* requires min voltage */
2182
PERIPH_CLK("hdmi", "hdmi", NULL, 51, 0x18c, 600000000, mux_pllp_plld_pllc_clkm, MUX | DIV_U71), /* requires min voltage */
1661
2183
PERIPH_CLK("tvdac", "tvdac", NULL, 53, 0x194, 250000000, mux_pllp_plld_pllc_clkm, MUX | DIV_U71), /* requires min voltage */
1662
PERIPH_CLK("disp1", "tegrafb.0", NULL, 27, 0x138, 190000000, mux_pllp_plld_pllc_clkm, MUX | DIV_U71), /* scales with voltage and process_id */
1663
PERIPH_CLK("disp2", "tegrafb.1", NULL, 26, 0x13c, 190000000, mux_pllp_plld_pllc_clkm, MUX | DIV_U71), /* scales with voltage and process_id */
2184
PERIPH_CLK("disp1", "tegradc.0", NULL, 27, 0x138, 600000000, mux_pllp_plld_pllc_clkm, MUX | DIV_U71), /* scales with voltage and process_id */
2185
PERIPH_CLK("disp2", "tegradc.1", NULL, 26, 0x13c, 600000000, mux_pllp_plld_pllc_clkm, MUX | DIV_U71), /* scales with voltage and process_id */
1664
2186
PERIPH_CLK("usbd", "fsl-tegra-udc", NULL, 22, 0, 480000000, mux_clk_m, 0), /* requires min voltage */
1665
2187
PERIPH_CLK("usb2", "tegra-ehci.1", NULL, 58, 0, 480000000, mux_clk_m, 0), /* requires min voltage */
1666
2188
PERIPH_CLK("usb3", "tegra-ehci.2", NULL, 59, 0, 480000000, mux_clk_m, 0), /* requires min voltage */
1667
PERIPH_CLK("emc", "emc", NULL, 57, 0x19c, 800000000, mux_pllm_pllc_pllp_clkm, MUX | DIV_U71 | PERIPH_EMC_ENB),
1668
2189
PERIPH_CLK("dsi", "dsi", NULL, 48, 0, 500000000, mux_plld, 0), /* scales with voltage */
1669
PERIPH_CLK("csi", "csi", NULL, 52, 0, 72000000, mux_pllp_out3, 0),
1670
PERIPH_CLK("isp", "isp", NULL, 23, 0, 150000000, mux_clk_m, 0), /* same frequency as VI */
1671
PERIPH_CLK("csus", "csus", NULL, 92, 0, 150000000, mux_clk_m, PERIPH_NO_RESET),
2190
PERIPH_CLK("csi", "tegra_camera", "csi", 52, 0, 72000000, mux_pllp_out3, 0),
2191
PERIPH_CLK("isp", "tegra_camera", "isp", 23, 0, 150000000, mux_clk_m, 0), /* same frequency as VI */
2192
PERIPH_CLK("csus", "tegra_camera", "csus", 92, 0, 150000000, mux_clk_m, PERIPH_NO_RESET),
1672
2193
PERIPH_CLK("pex", NULL, "pex", 70, 0, 26000000, mux_clk_m, PERIPH_MANUAL_RESET),
1673
2194
PERIPH_CLK("afi", NULL, "afi", 72, 0, 26000000, mux_clk_m, PERIPH_MANUAL_RESET),
1674
2195
PERIPH_CLK("pcie_xclk", NULL, "pcie_xclk", 74, 0, 26000000, mux_clk_m, PERIPH_MANUAL_RESET),
2197
SHARED_CLK("avp.sclk", "tegra-avp", "sclk", &tegra_clk_sclk),
2198
SHARED_CLK("avp.emc", "tegra-avp", "emc", &tegra_clk_emc),
2199
SHARED_CLK("cpu.emc", "cpu", "emc", &tegra_clk_emc),
2200
SHARED_CLK("disp1.emc", "tegradc.0", "emc", &tegra_clk_emc),
2201
SHARED_CLK("disp2.emc", "tegradc.1", "emc", &tegra_clk_emc),
2202
SHARED_CLK("hdmi.emc", "hdmi", "emc", &tegra_clk_emc),
2203
SHARED_CLK("host.emc", "tegra_grhost", "emc", &tegra_clk_emc),
2204
SHARED_CLK("usbd.emc", "fsl-tegra-udc", "emc", &tegra_clk_emc),
2205
SHARED_CLK("usb1.emc", "tegra-ehci.0", "emc", &tegra_clk_emc),
2206
SHARED_CLK("usb2.emc", "tegra-ehci.1", "emc", &tegra_clk_emc),
2207
SHARED_CLK("usb3.emc", "tegra-ehci.2", "emc", &tegra_clk_emc),
1677
2210
#define CLK_DUPLICATE(_name, _dev, _con) \
1693
2226
CLK_DUPLICATE("uartc", "tegra_uart.2", NULL),
1694
2227
CLK_DUPLICATE("uartd", "tegra_uart.3", NULL),
1695
2228
CLK_DUPLICATE("uarte", "tegra_uart.4", NULL),
1696
CLK_DUPLICATE("host1x", "tegrafb.0", "host1x"),
1697
CLK_DUPLICATE("host1x", "tegrafb.1", "host1x"),
2229
CLK_DUPLICATE("usbd", "utmip-pad", NULL),
1698
2230
CLK_DUPLICATE("usbd", "tegra-ehci.0", NULL),
2231
CLK_DUPLICATE("usbd", "tegra-otg", NULL),
2232
CLK_DUPLICATE("hdmi", "tegradc.0", "hdmi"),
2233
CLK_DUPLICATE("hdmi", "tegradc.1", "hdmi"),
2234
CLK_DUPLICATE("pwm", "tegra_pwm.0", NULL),
2235
CLK_DUPLICATE("pwm", "tegra_pwm.1", NULL),
2236
CLK_DUPLICATE("pwm", "tegra_pwm.2", NULL),
2237
CLK_DUPLICATE("pwm", "tegra_pwm.3", NULL),
2238
CLK_DUPLICATE("host1x", "tegra_grhost", "host1x"),
2239
CLK_DUPLICATE("2d", "tegra_grhost", "gr2d"),
2240
CLK_DUPLICATE("3d", "tegra_grhost", "gr3d"),
2241
CLK_DUPLICATE("epp", "tegra_grhost", "epp"),
2242
CLK_DUPLICATE("mpe", "tegra_grhost", "mpe"),
2243
CLK_DUPLICATE("cop", "tegra-avp", "cop"),
2244
CLK_DUPLICATE("vde", "tegra-aes", "vde"),
1701
2247
#define CLK(dev, con, ck) \
1708
struct clk_lookup tegra_clk_lookups[] = {
1709
/* external root sources */
1710
CLK(NULL, "32k_clk", &tegra_clk_32k),
1711
CLK(NULL, "pll_s", &tegra_pll_s),
1712
CLK(NULL, "clk_m", &tegra_clk_m),
1713
CLK(NULL, "pll_m", &tegra_pll_m),
1714
CLK(NULL, "pll_m_out1", &tegra_pll_m_out1),
1715
CLK(NULL, "pll_c", &tegra_pll_c),
1716
CLK(NULL, "pll_c_out1", &tegra_pll_c_out1),
1717
CLK(NULL, "pll_p", &tegra_pll_p),
1718
CLK(NULL, "pll_p_out1", &tegra_pll_p_out1),
1719
CLK(NULL, "pll_p_out2", &tegra_pll_p_out2),
1720
CLK(NULL, "pll_p_out3", &tegra_pll_p_out3),
1721
CLK(NULL, "pll_p_out4", &tegra_pll_p_out4),
1722
CLK(NULL, "pll_a", &tegra_pll_a),
1723
CLK(NULL, "pll_a_out0", &tegra_pll_a_out0),
1724
CLK(NULL, "pll_d", &tegra_pll_d),
1725
CLK(NULL, "pll_d_out0", &tegra_pll_d_out0),
1726
CLK(NULL, "pll_u", &tegra_pll_u),
1727
CLK(NULL, "pll_x", &tegra_pll_x),
1728
CLK(NULL, "pll_e", &tegra_pll_e),
1729
CLK(NULL, "cclk", &tegra_clk_cclk),
1730
CLK(NULL, "sclk", &tegra_clk_sclk),
1731
CLK(NULL, "hclk", &tegra_clk_hclk),
1732
CLK(NULL, "pclk", &tegra_clk_pclk),
1733
CLK(NULL, "clk_d", &tegra_clk_d),
1734
CLK(NULL, "cpu", &tegra_clk_virtual_cpu),
2254
struct clk *tegra_ptr_clks[] = {
2281
&tegra_clk_virtual_cpu,
2287
static void tegra2_init_one_clock(struct clk *c)
2290
INIT_LIST_HEAD(&c->shared_bus_list);
2291
if (!c->lookup.dev_id && !c->lookup.con_id)
2292
c->lookup.con_id = c->name;
2294
clkdev_add(&c->lookup);
1737
2297
void __init tegra2_init_clocks(void)
1740
struct clk_lookup *cl;
1742
struct clk_duplicate *cd;
1744
for (i = 0; i < ARRAY_SIZE(tegra_clk_lookups); i++) {
1745
cl = &tegra_clk_lookups[i];
1750
for (i = 0; i < ARRAY_SIZE(tegra_periph_clks); i++) {
1751
c = &tegra_periph_clks[i];
2302
for (i = 0; i < ARRAY_SIZE(tegra_ptr_clks); i++)
2303
tegra2_init_one_clock(tegra_ptr_clks[i]);
2305
for (i = 0; i < ARRAY_SIZE(tegra_list_clks); i++)
2306
tegra2_init_one_clock(&tegra_list_clks[i]);
1759
2308
for (i = 0; i < ARRAY_SIZE(tegra_clk_duplicates); i++) {
1760
cd = &tegra_clk_duplicates[i];
1761
c = tegra_get_clock_by_name(cd->name);
2309
c = tegra_get_clock_by_name(tegra_clk_duplicates[i].name);
1767
2311
pr_err("%s: Unknown duplicate clock %s\n", __func__,
2312
tegra_clk_duplicates[i].name);
2316
tegra_clk_duplicates[i].lookup.clk = c;
2317
clkdev_add(&tegra_clk_duplicates[i].lookup);
1772
2320
init_audio_sync_clock_mux();