git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux...
[pandora-kernel.git]
/
arch
/
arm
/
mach-omap1
/
clock.c
diff --git
a/arch/arm/mach-omap1/clock.c
b/arch/arm/mach-omap1/clock.c
index
4277eee
..
f1958e8
100644
(file)
--- a/
arch/arm/mach-omap1/clock.c
+++ b/
arch/arm/mach-omap1/clock.c
@@
-1,3
+1,4
@@
+//kernel/linux-omap-fsample/arch/arm/mach-omap1/clock.c#2 - edit change 3808 (text)
/*
* linux/arch/arm/mach-omap1/clock.c
*
/*
* linux/arch/arm/mach-omap1/clock.c
*
@@
-16,10
+17,11
@@
#include <linux/list.h>
#include <linux/errno.h>
#include <linux/err.h>
#include <linux/list.h>
#include <linux/errno.h>
#include <linux/err.h>
+#include <linux/clk.h>
#include <asm/io.h>
#include <asm/io.h>
-#include <asm/hardware/clock.h>
+#include <asm/arch/cpu.h>
#include <asm/arch/usb.h>
#include <asm/arch/clock.h>
#include <asm/arch/sram.h>
#include <asm/arch/usb.h>
#include <asm/arch/clock.h>
#include <asm/arch/sram.h>
@@
-50,10
+52,10
@@
static int omap1_clk_enable_dsp_domain(struct clk *clk)
{
int retval;
{
int retval;
- retval = omap1_clk_
us
e(&api_ck.clk);
+ retval = omap1_clk_
enabl
e(&api_ck.clk);
if (!retval) {
if (!retval) {
- retval = omap1_clk_enable(clk);
- omap1_clk_
unus
e(&api_ck.clk);
+ retval = omap1_clk_enable
_generic
(clk);
+ omap1_clk_
disabl
e(&api_ck.clk);
}
return retval;
}
return retval;
@@
-61,9
+63,9
@@
static int omap1_clk_enable_dsp_domain(struct clk *clk)
static void omap1_clk_disable_dsp_domain(struct clk *clk)
{
static void omap1_clk_disable_dsp_domain(struct clk *clk)
{
- if (omap1_clk_
us
e(&api_ck.clk) == 0) {
- omap1_clk_disable(clk);
- omap1_clk_
unus
e(&api_ck.clk);
+ if (omap1_clk_
enabl
e(&api_ck.clk) == 0) {
+ omap1_clk_disable
_generic
(clk);
+ omap1_clk_
disabl
e(&api_ck.clk);
}
}
}
}
@@
-72,7
+74,7
@@
static int omap1_clk_enable_uart_functional(struct clk *clk)
int ret;
struct uart_clk *uclk;
int ret;
struct uart_clk *uclk;
- ret = omap1_clk_enable(clk);
+ ret = omap1_clk_enable
_generic
(clk);
if (ret == 0) {
/* Set smart idle acknowledgement mode */
uclk = (struct uart_clk *)clk;
if (ret == 0) {
/* Set smart idle acknowledgement mode */
uclk = (struct uart_clk *)clk;
@@
-91,7
+93,7
@@
static void omap1_clk_disable_uart_functional(struct clk *clk)
uclk = (struct uart_clk *)clk;
omap_writeb((omap_readb(uclk->sysc_addr) & ~0x18), uclk->sysc_addr);
uclk = (struct uart_clk *)clk;
omap_writeb((omap_readb(uclk->sysc_addr) & ~0x18), uclk->sysc_addr);
- omap1_clk_disable(clk);
+ omap1_clk_disable
_generic
(clk);
}
static void omap1_clk_allow_idle(struct clk *clk)
}
static void omap1_clk_allow_idle(struct clk *clk)
@@
-230,9
+232,9
@@
static void omap1_ckctl_recalc_dsp_domain(struct clk * clk)
* Note that DSP_CKCTL virt addr = phys addr, so
* we must use __raw_readw() instead of omap_readw().
*/
* Note that DSP_CKCTL virt addr = phys addr, so
* we must use __raw_readw() instead of omap_readw().
*/
- omap1_clk_
us
e(&api_ck.clk);
+ omap1_clk_
enabl
e(&api_ck.clk);
dsor = 1 << (3 & (__raw_readw(DSP_CKCTL) >> clk->rate_offset));
dsor = 1 << (3 & (__raw_readw(DSP_CKCTL) >> clk->rate_offset));
- omap1_clk_
unus
e(&api_ck.clk);
+ omap1_clk_
disabl
e(&api_ck.clk);
if (unlikely(clk->rate == clk->parent->rate / dsor))
return; /* No change, quick exit */
if (unlikely(clk->rate == clk->parent->rate / dsor))
return; /* No change, quick exit */
@@
-270,8
+272,12
@@
static int omap1_select_table_rate(struct clk * clk, unsigned long rate)
/*
* In most cases we should not need to reprogram DPLL.
* Reprogramming the DPLL is tricky, it must be done from SRAM.
/*
* In most cases we should not need to reprogram DPLL.
* Reprogramming the DPLL is tricky, it must be done from SRAM.
+ * (on 730, bit 13 must always be 1)
*/
*/
- omap_sram_reprogram_clock(ptr->dpllctl_val, ptr->ckctl_val);
+ if (cpu_is_omap730())
+ omap_sram_reprogram_clock(ptr->dpllctl_val, ptr->ckctl_val | 0x2000);
+ else
+ omap_sram_reprogram_clock(ptr->dpllctl_val, ptr->ckctl_val);
ck_dpll1.rate = ptr->pll_rate;
propagate_rate(&ck_dpll1);
ck_dpll1.rate = ptr->pll_rate;
propagate_rate(&ck_dpll1);
@@
-345,7
+351,7
@@
static unsigned calc_ext_dsor(unsigned long rate)
*/
for (dsor = 2; dsor < 96; ++dsor) {
if ((dsor & 1) && dsor > 8)
*/
for (dsor = 2; dsor < 96; ++dsor) {
if ((dsor & 1) && dsor > 8)
- continue;
+ continue;
if (rate >= 96000000 / dsor)
break;
}
if (rate >= 96000000 / dsor)
break;
}
@@
-412,12
+418,12
@@
static void omap1_init_ext_clk(struct clk * clk)
clk-> rate = 96000000 / dsor;
}
clk-> rate = 96000000 / dsor;
}
-static int omap1_clk_
us
e(struct clk *clk)
+static int omap1_clk_
enabl
e(struct clk *clk)
{
int ret = 0;
if (clk->usecount++ == 0) {
if (likely(clk->parent)) {
{
int ret = 0;
if (clk->usecount++ == 0) {
if (likely(clk->parent)) {
- ret = omap1_clk_
us
e(clk->parent);
+ ret = omap1_clk_
enabl
e(clk->parent);
if (unlikely(ret != 0)) {
clk->usecount--;
if (unlikely(ret != 0)) {
clk->usecount--;
@@
-432,7
+438,7
@@
static int omap1_clk_use(struct clk *clk)
ret = clk->enable(clk);
if (unlikely(ret != 0) && clk->parent) {
ret = clk->enable(clk);
if (unlikely(ret != 0) && clk->parent) {
- omap1_clk_
unus
e(clk->parent);
+ omap1_clk_
disabl
e(clk->parent);
clk->usecount--;
}
}
clk->usecount--;
}
}
@@
-440,12
+446,12
@@
static int omap1_clk_use(struct clk *clk)
return ret;
}
return ret;
}
-static void omap1_clk_
unus
e(struct clk *clk)
+static void omap1_clk_
disabl
e(struct clk *clk)
{
if (clk->usecount > 0 && !(--clk->usecount)) {
clk->disable(clk);
if (likely(clk->parent)) {
{
if (clk->usecount > 0 && !(--clk->usecount)) {
clk->disable(clk);
if (likely(clk->parent)) {
- omap1_clk_
unus
e(clk->parent);
+ omap1_clk_
disabl
e(clk->parent);
if (clk->flags & CLOCK_NO_IDLE_PARENT)
if (!cpu_is_omap24xx())
omap1_clk_allow_idle(clk->parent);
if (clk->flags & CLOCK_NO_IDLE_PARENT)
if (!cpu_is_omap24xx())
omap1_clk_allow_idle(clk->parent);
@@
-453,7
+459,7
@@
static void omap1_clk_unuse(struct clk *clk)
}
}
}
}
-static int omap1_clk_enable(struct clk *clk)
+static int omap1_clk_enable
_generic
(struct clk *clk)
{
__u16 regval16;
__u32 regval32;
{
__u16 regval16;
__u32 regval32;
@@
-492,7
+498,7
@@
static int omap1_clk_enable(struct clk *clk)
return 0;
}
return 0;
}
-static void omap1_clk_disable(struct clk *clk)
+static void omap1_clk_disable
_generic
(struct clk *clk)
{
__u16 regval16;
__u32 regval32;
{
__u16 regval16;
__u32 regval32;
@@
-654,8
+660,8
@@
late_initcall(omap1_late_clk_reset);
#endif
static struct clk_functions omap1_clk_functions = {
#endif
static struct clk_functions omap1_clk_functions = {
- .clk_
use = omap1_clk_us
e,
- .clk_
unuse = omap1_clk_unus
e,
+ .clk_
enable = omap1_clk_enabl
e,
+ .clk_
disable = omap1_clk_disabl
e,
.clk_round_rate = omap1_clk_round_rate,
.clk_set_rate = omap1_clk_set_rate,
};
.clk_round_rate = omap1_clk_round_rate,
.clk_set_rate = omap1_clk_set_rate,
};
@@
-687,6
+693,11
@@
int __init omap1_clk_init(void)
clk_register(*clkp);
continue;
}
clk_register(*clkp);
continue;
}
+
+ if (((*clkp)->flags &CLOCK_IN_OMAP310) && cpu_is_omap310()) {
+ clk_register(*clkp);
+ continue;
+ }
}
info = omap_get_config(OMAP_TAG_CLOCK, struct omap_clock_config);
}
info = omap_get_config(OMAP_TAG_CLOCK, struct omap_clock_config);
@@
-743,7
+754,7
@@
int __init omap1_clk_init(void)
printk(KERN_ERR "System frequencies not set. Check your config.\n");
/* Guess sane values (60MHz) */
omap_writew(0x2290, DPLL_CTL);
printk(KERN_ERR "System frequencies not set. Check your config.\n");
/* Guess sane values (60MHz) */
omap_writew(0x2290, DPLL_CTL);
- omap_writew(0x1005, ARM_CKCTL);
+ omap_writew(
cpu_is_omap730() ? 0x3005 :
0x1005, ARM_CKCTL);
ck_dpll1.rate = 60000000;
propagate_rate(&ck_dpll1);
}
ck_dpll1.rate = 60000000;
propagate_rate(&ck_dpll1);
}
@@
-756,13
+767,17
@@
int __init omap1_clk_init(void)
ck_dpll1.rate / 1000000, (ck_dpll1.rate / 100000) % 10,
arm_ck.rate / 1000000, (arm_ck.rate / 100000) % 10);
ck_dpll1.rate / 1000000, (ck_dpll1.rate / 100000) % 10,
arm_ck.rate / 1000000, (arm_ck.rate / 100000) % 10);
-#if
def CONFIG_MACH_OMAP_PERSEUS2
+#if
defined(CONFIG_MACH_OMAP_PERSEUS2) || defined(CONFIG_MACH_OMAP_FSAMPLE)
/* Select slicer output as OMAP input clock */
omap_writew(omap_readw(OMAP730_PCC_UPLD_CTRL) & ~0x1, OMAP730_PCC_UPLD_CTRL);
#endif
/* Turn off DSP and ARM_TIMXO. Make sure ARM_INTHCK is not divided */
/* Select slicer output as OMAP input clock */
omap_writew(omap_readw(OMAP730_PCC_UPLD_CTRL) & ~0x1, OMAP730_PCC_UPLD_CTRL);
#endif
/* Turn off DSP and ARM_TIMXO. Make sure ARM_INTHCK is not divided */
- omap_writew(omap_readw(ARM_CKCTL) & 0x0fff, ARM_CKCTL);
+ /* (on 730, bit 13 must not be cleared) */
+ if (cpu_is_omap730())
+ omap_writew(omap_readw(ARM_CKCTL) & 0x2fff, ARM_CKCTL);
+ else
+ omap_writew(omap_readw(ARM_CKCTL) & 0x0fff, ARM_CKCTL);
/* Put DSP/MPUI into reset until needed */
omap_writew(0, ARM_RSTCT1);
/* Put DSP/MPUI into reset until needed */
omap_writew(0, ARM_RSTCT1);
@@
-780,11
+795,11
@@
int __init omap1_clk_init(void)
* Only enable those clocks we will need, let the drivers
* enable other clocks as necessary
*/
* Only enable those clocks we will need, let the drivers
* enable other clocks as necessary
*/
- clk_
us
e(&armper_ck.clk);
- clk_
us
e(&armxor_ck.clk);
- clk_
us
e(&armtim_ck.clk); /* This should be done by timer code */
+ clk_
enabl
e(&armper_ck.clk);
+ clk_
enabl
e(&armxor_ck.clk);
+ clk_
enabl
e(&armtim_ck.clk); /* This should be done by timer code */
- if (cpu_is_omap15
10
())
+ if (cpu_is_omap15
xx
())
clk_enable(&arm_gpio_ck);
return 0;
clk_enable(&arm_gpio_ck);
return 0;