-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Vaibhav Hiremath
authored and
Paul Walmsley
committed
Jun 18, 2012
1 parent
2631c01
commit d8d0465
Showing
6 changed files
with
276 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
--- | ||
refs/heads/master: 3f0ea7645ae6d7111ebc3e83f47fbc0f2c8a8964 | ||
refs/heads/master: 9c80f3aa8b7828c89c5bae5c769955d1ac58630b |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
/* | ||
* AM33XX clockdomain control | ||
* | ||
* Copyright (C) 2011-2012 Texas Instruments Incorporated - http://www.ti.com/ | ||
* Vaibhav Hiremath <hvaibhav@ti.com> | ||
* | ||
* Derived from mach-omap2/clockdomain44xx.c written by Rajendra Nayak | ||
* | ||
* This program is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU General Public License as | ||
* published by the Free Software Foundation version 2. | ||
* | ||
* This program is distributed "as is" WITHOUT ANY WARRANTY of any | ||
* kind, whether express or implied; without even the implied warranty | ||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
*/ | ||
|
||
#include <linux/kernel.h> | ||
|
||
#include "clockdomain.h" | ||
#include "cm33xx.h" | ||
|
||
|
||
static int am33xx_clkdm_sleep(struct clockdomain *clkdm) | ||
{ | ||
am33xx_cm_clkdm_force_sleep(clkdm->cm_inst, clkdm->clkdm_offs); | ||
return 0; | ||
} | ||
|
||
static int am33xx_clkdm_wakeup(struct clockdomain *clkdm) | ||
{ | ||
am33xx_cm_clkdm_force_wakeup(clkdm->cm_inst, clkdm->clkdm_offs); | ||
return 0; | ||
} | ||
|
||
static void am33xx_clkdm_allow_idle(struct clockdomain *clkdm) | ||
{ | ||
am33xx_cm_clkdm_enable_hwsup(clkdm->cm_inst, clkdm->clkdm_offs); | ||
} | ||
|
||
static void am33xx_clkdm_deny_idle(struct clockdomain *clkdm) | ||
{ | ||
am33xx_cm_clkdm_disable_hwsup(clkdm->cm_inst, clkdm->clkdm_offs); | ||
} | ||
|
||
static int am33xx_clkdm_clk_enable(struct clockdomain *clkdm) | ||
{ | ||
if (clkdm->flags & CLKDM_CAN_FORCE_WAKEUP) | ||
return am33xx_clkdm_wakeup(clkdm); | ||
|
||
return 0; | ||
} | ||
|
||
static int am33xx_clkdm_clk_disable(struct clockdomain *clkdm) | ||
{ | ||
bool hwsup = false; | ||
|
||
hwsup = am33xx_cm_is_clkdm_in_hwsup(clkdm->cm_inst, clkdm->clkdm_offs); | ||
|
||
if (!hwsup && (clkdm->flags & CLKDM_CAN_FORCE_SLEEP)) | ||
am33xx_clkdm_sleep(clkdm); | ||
|
||
return 0; | ||
} | ||
|
||
struct clkdm_ops am33xx_clkdm_operations = { | ||
.clkdm_sleep = am33xx_clkdm_sleep, | ||
.clkdm_wakeup = am33xx_clkdm_wakeup, | ||
.clkdm_allow_idle = am33xx_clkdm_allow_idle, | ||
.clkdm_deny_idle = am33xx_clkdm_deny_idle, | ||
.clkdm_clk_enable = am33xx_clkdm_clk_enable, | ||
.clkdm_clk_disable = am33xx_clkdm_clk_disable, | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,196 @@ | ||
/* | ||
* AM33XX Clock Domain data. | ||
* | ||
* Copyright (C) 2011-2012 Texas Instruments Incorporated - http://www.ti.com/ | ||
* Vaibhav Hiremath <hvaibhav@ti.com> | ||
* | ||
* This program is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU General Public License as | ||
* published by the Free Software Foundation version 2. | ||
* | ||
* This program is distributed "as is" WITHOUT ANY WARRANTY of any | ||
* kind, whether express or implied; without even the implied warranty | ||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
*/ | ||
|
||
#include <linux/kernel.h> | ||
#include <linux/io.h> | ||
|
||
#include "clockdomain.h" | ||
#include "cm.h" | ||
#include "cm33xx.h" | ||
#include "cm-regbits-33xx.h" | ||
|
||
static struct clockdomain l4ls_am33xx_clkdm = { | ||
.name = "l4ls_clkdm", | ||
.pwrdm = { .name = "per_pwrdm" }, | ||
.cm_inst = AM33XX_CM_PER_MOD, | ||
.clkdm_offs = AM33XX_CM_PER_L4LS_CLKSTCTRL_OFFSET, | ||
.flags = CLKDM_CAN_SWSUP, | ||
}; | ||
|
||
static struct clockdomain l3s_am33xx_clkdm = { | ||
.name = "l3s_clkdm", | ||
.pwrdm = { .name = "per_pwrdm" }, | ||
.cm_inst = AM33XX_CM_PER_MOD, | ||
.clkdm_offs = AM33XX_CM_PER_L3S_CLKSTCTRL_OFFSET, | ||
.flags = CLKDM_CAN_SWSUP, | ||
}; | ||
|
||
static struct clockdomain l4fw_am33xx_clkdm = { | ||
.name = "l4fw_clkdm", | ||
.pwrdm = { .name = "per_pwrdm" }, | ||
.cm_inst = AM33XX_CM_PER_MOD, | ||
.clkdm_offs = AM33XX_CM_PER_L4FW_CLKSTCTRL_OFFSET, | ||
.flags = CLKDM_CAN_SWSUP, | ||
}; | ||
|
||
static struct clockdomain l3_am33xx_clkdm = { | ||
.name = "l3_clkdm", | ||
.pwrdm = { .name = "per_pwrdm" }, | ||
.cm_inst = AM33XX_CM_PER_MOD, | ||
.clkdm_offs = AM33XX_CM_PER_L3_CLKSTCTRL_OFFSET, | ||
.flags = CLKDM_CAN_SWSUP, | ||
}; | ||
|
||
static struct clockdomain l4hs_am33xx_clkdm = { | ||
.name = "l4hs_clkdm", | ||
.pwrdm = { .name = "per_pwrdm" }, | ||
.cm_inst = AM33XX_CM_PER_MOD, | ||
.clkdm_offs = AM33XX_CM_PER_L4HS_CLKSTCTRL_OFFSET, | ||
.flags = CLKDM_CAN_SWSUP, | ||
}; | ||
|
||
static struct clockdomain ocpwp_l3_am33xx_clkdm = { | ||
.name = "ocpwp_l3_clkdm", | ||
.pwrdm = { .name = "per_pwrdm" }, | ||
.cm_inst = AM33XX_CM_PER_MOD, | ||
.clkdm_offs = AM33XX_CM_PER_OCPWP_L3_CLKSTCTRL_OFFSET, | ||
.flags = CLKDM_CAN_SWSUP, | ||
}; | ||
|
||
static struct clockdomain pruss_ocp_am33xx_clkdm = { | ||
.name = "pruss_ocp_clkdm", | ||
.pwrdm = { .name = "per_pwrdm" }, | ||
.cm_inst = AM33XX_CM_PER_MOD, | ||
.clkdm_offs = AM33XX_CM_PER_PRUSS_CLKSTCTRL_OFFSET, | ||
.flags = CLKDM_CAN_SWSUP, | ||
}; | ||
|
||
static struct clockdomain cpsw_125mhz_am33xx_clkdm = { | ||
.name = "cpsw_125mhz_clkdm", | ||
.pwrdm = { .name = "per_pwrdm" }, | ||
.cm_inst = AM33XX_CM_PER_MOD, | ||
.clkdm_offs = AM33XX_CM_PER_CPSW_CLKSTCTRL_OFFSET, | ||
.flags = CLKDM_CAN_SWSUP, | ||
}; | ||
|
||
static struct clockdomain lcdc_am33xx_clkdm = { | ||
.name = "lcdc_clkdm", | ||
.pwrdm = { .name = "per_pwrdm" }, | ||
.cm_inst = AM33XX_CM_PER_MOD, | ||
.clkdm_offs = AM33XX_CM_PER_LCDC_CLKSTCTRL_OFFSET, | ||
.flags = CLKDM_CAN_SWSUP, | ||
}; | ||
|
||
static struct clockdomain clk_24mhz_am33xx_clkdm = { | ||
.name = "clk_24mhz_clkdm", | ||
.pwrdm = { .name = "per_pwrdm" }, | ||
.cm_inst = AM33XX_CM_PER_MOD, | ||
.clkdm_offs = AM33XX_CM_PER_CLK_24MHZ_CLKSTCTRL_OFFSET, | ||
.flags = CLKDM_CAN_SWSUP, | ||
}; | ||
|
||
static struct clockdomain l4_wkup_am33xx_clkdm = { | ||
.name = "l4_wkup_clkdm", | ||
.pwrdm = { .name = "wkup_pwrdm" }, | ||
.cm_inst = AM33XX_CM_WKUP_MOD, | ||
.clkdm_offs = AM33XX_CM_WKUP_CLKSTCTRL_OFFSET, | ||
.flags = CLKDM_CAN_SWSUP, | ||
}; | ||
|
||
static struct clockdomain l3_aon_am33xx_clkdm = { | ||
.name = "l3_aon_clkdm", | ||
.pwrdm = { .name = "wkup_pwrdm" }, | ||
.cm_inst = AM33XX_CM_WKUP_MOD, | ||
.clkdm_offs = AM33XX_CM_L3_AON_CLKSTCTRL_OFFSET, | ||
.flags = CLKDM_CAN_SWSUP, | ||
}; | ||
|
||
static struct clockdomain l4_wkup_aon_am33xx_clkdm = { | ||
.name = "l4_wkup_aon_clkdm", | ||
.pwrdm = { .name = "wkup_pwrdm" }, | ||
.cm_inst = AM33XX_CM_WKUP_MOD, | ||
.clkdm_offs = AM33XX_CM_L4_WKUP_AON_CLKSTCTRL_OFFSET, | ||
.flags = CLKDM_CAN_SWSUP, | ||
}; | ||
|
||
static struct clockdomain mpu_am33xx_clkdm = { | ||
.name = "mpu_clkdm", | ||
.pwrdm = { .name = "mpu_pwrdm" }, | ||
.cm_inst = AM33XX_CM_MPU_MOD, | ||
.clkdm_offs = AM33XX_CM_MPU_CLKSTCTRL_OFFSET, | ||
.flags = CLKDM_CAN_SWSUP, | ||
}; | ||
|
||
static struct clockdomain l4_rtc_am33xx_clkdm = { | ||
.name = "l4_rtc_clkdm", | ||
.pwrdm = { .name = "rtc_pwrdm" }, | ||
.cm_inst = AM33XX_CM_RTC_MOD, | ||
.clkdm_offs = AM33XX_CM_RTC_CLKSTCTRL_OFFSET, | ||
.flags = CLKDM_CAN_SWSUP, | ||
}; | ||
|
||
static struct clockdomain gfx_l3_am33xx_clkdm = { | ||
.name = "gfx_l3_clkdm", | ||
.pwrdm = { .name = "gfx_pwrdm" }, | ||
.cm_inst = AM33XX_CM_GFX_MOD, | ||
.clkdm_offs = AM33XX_CM_GFX_L3_CLKSTCTRL_OFFSET, | ||
.flags = CLKDM_CAN_SWSUP, | ||
}; | ||
|
||
static struct clockdomain gfx_l4ls_gfx_am33xx_clkdm = { | ||
.name = "gfx_l4ls_gfx_clkdm", | ||
.pwrdm = { .name = "gfx_pwrdm" }, | ||
.cm_inst = AM33XX_CM_GFX_MOD, | ||
.clkdm_offs = AM33XX_CM_GFX_L4LS_GFX_CLKSTCTRL__1_OFFSET, | ||
.flags = CLKDM_CAN_SWSUP, | ||
}; | ||
|
||
static struct clockdomain l4_cefuse_am33xx_clkdm = { | ||
.name = "l4_cefuse_clkdm", | ||
.pwrdm = { .name = "cefuse_pwrdm" }, | ||
.cm_inst = AM33XX_CM_CEFUSE_MOD, | ||
.clkdm_offs = AM33XX_CM_CEFUSE_CLKSTCTRL_OFFSET, | ||
.flags = CLKDM_CAN_SWSUP, | ||
}; | ||
|
||
static struct clockdomain *clockdomains_am33xx[] __initdata = { | ||
&l4ls_am33xx_clkdm, | ||
&l3s_am33xx_clkdm, | ||
&l4fw_am33xx_clkdm, | ||
&l3_am33xx_clkdm, | ||
&l4hs_am33xx_clkdm, | ||
&ocpwp_l3_am33xx_clkdm, | ||
&pruss_ocp_am33xx_clkdm, | ||
&cpsw_125mhz_am33xx_clkdm, | ||
&lcdc_am33xx_clkdm, | ||
&clk_24mhz_am33xx_clkdm, | ||
&l4_wkup_am33xx_clkdm, | ||
&l3_aon_am33xx_clkdm, | ||
&l4_wkup_aon_am33xx_clkdm, | ||
&mpu_am33xx_clkdm, | ||
&l4_rtc_am33xx_clkdm, | ||
&gfx_l3_am33xx_clkdm, | ||
&gfx_l4ls_gfx_am33xx_clkdm, | ||
&l4_cefuse_am33xx_clkdm, | ||
NULL, | ||
}; | ||
|
||
void __init am33xx_clockdomains_init(void) | ||
{ | ||
clkdm_register_platform_funcs(&am33xx_clkdm_operations); | ||
clkdm_register_clkdms(clockdomains_am33xx); | ||
clkdm_complete_init(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters