diff options
Diffstat (limited to 'drivers/ssb/driver_chipcommon_pmu.c')
-rw-r--r-- | drivers/ssb/driver_chipcommon_pmu.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/drivers/ssb/driver_chipcommon_pmu.c b/drivers/ssb/driver_chipcommon_pmu.c index b58fef780ea0..a43415a7fbed 100644 --- a/drivers/ssb/driver_chipcommon_pmu.c +++ b/drivers/ssb/driver_chipcommon_pmu.c | |||
@@ -346,6 +346,8 @@ static void ssb_pmu_pll_init(struct ssb_chipcommon *cc) | |||
346 | chipco_write32(cc, SSB_CHIPCO_PLLCTL_DATA, 0x380005C0); | 346 | chipco_write32(cc, SSB_CHIPCO_PLLCTL_DATA, 0x380005C0); |
347 | } | 347 | } |
348 | break; | 348 | break; |
349 | case 43222: | ||
350 | break; | ||
349 | default: | 351 | default: |
350 | ssb_printk(KERN_ERR PFX | 352 | ssb_printk(KERN_ERR PFX |
351 | "ERROR: PLL init unknown for device %04X\n", | 353 | "ERROR: PLL init unknown for device %04X\n", |
@@ -434,6 +436,7 @@ static void ssb_pmu_resources_init(struct ssb_chipcommon *cc) | |||
434 | min_msk = 0xCBB; | 436 | min_msk = 0xCBB; |
435 | break; | 437 | break; |
436 | case 0x4322: | 438 | case 0x4322: |
439 | case 43222: | ||
437 | /* We keep the default settings: | 440 | /* We keep the default settings: |
438 | * min_msk = 0xCBB | 441 | * min_msk = 0xCBB |
439 | * max_msk = 0x7FFFF | 442 | * max_msk = 0x7FFFF |
@@ -615,6 +618,33 @@ void ssb_pmu_set_ldo_paref(struct ssb_chipcommon *cc, bool on) | |||
615 | EXPORT_SYMBOL(ssb_pmu_set_ldo_voltage); | 618 | EXPORT_SYMBOL(ssb_pmu_set_ldo_voltage); |
616 | EXPORT_SYMBOL(ssb_pmu_set_ldo_paref); | 619 | EXPORT_SYMBOL(ssb_pmu_set_ldo_paref); |
617 | 620 | ||
621 | static u32 ssb_pmu_get_alp_clock_clk0(struct ssb_chipcommon *cc) | ||
622 | { | ||
623 | u32 crystalfreq; | ||
624 | const struct pmu0_plltab_entry *e = NULL; | ||
625 | |||
626 | crystalfreq = chipco_read32(cc, SSB_CHIPCO_PMU_CTL) & | ||
627 | SSB_CHIPCO_PMU_CTL_XTALFREQ >> SSB_CHIPCO_PMU_CTL_XTALFREQ_SHIFT; | ||
628 | e = pmu0_plltab_find_entry(crystalfreq); | ||
629 | BUG_ON(!e); | ||
630 | return e->freq * 1000; | ||
631 | } | ||
632 | |||
633 | u32 ssb_pmu_get_alp_clock(struct ssb_chipcommon *cc) | ||
634 | { | ||
635 | struct ssb_bus *bus = cc->dev->bus; | ||
636 | |||
637 | switch (bus->chip_id) { | ||
638 | case 0x5354: | ||
639 | ssb_pmu_get_alp_clock_clk0(cc); | ||
640 | default: | ||
641 | ssb_printk(KERN_ERR PFX | ||
642 | "ERROR: PMU alp clock unknown for device %04X\n", | ||
643 | bus->chip_id); | ||
644 | return 0; | ||
645 | } | ||
646 | } | ||
647 | |||
618 | u32 ssb_pmu_get_cpu_clock(struct ssb_chipcommon *cc) | 648 | u32 ssb_pmu_get_cpu_clock(struct ssb_chipcommon *cc) |
619 | { | 649 | { |
620 | struct ssb_bus *bus = cc->dev->bus; | 650 | struct ssb_bus *bus = cc->dev->bus; |