2010-12-09 18:13:46 +03:00
/*
* OMAP3 OPP table definitions .
*
* Copyright ( C ) 2009 - 2010 Texas Instruments Incorporated - http : //www.ti.com/
* Nishanth Menon
* Kevin Hilman
2011-03-11 08:17:45 +03:00
* Copyright ( C ) 2010 - 2011 Nokia Corporation .
2010-12-09 18:13:46 +03:00
* Eduardo Valentin
2011-03-11 08:17:45 +03:00
* Paul Walmsley
2010-12-09 18:13:46 +03:00
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation .
*
* 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/module.h>
2012-10-06 00:25:59 +04:00
# include "soc.h"
2011-03-11 08:17:45 +03:00
# include "control.h"
2010-12-09 18:13:46 +03:00
# include "omap_opp_data.h"
2011-01-05 23:49:35 +03:00
# include "pm.h"
2010-12-09 18:13:46 +03:00
2011-03-11 08:17:45 +03:00
/* 34xx */
/* VDD1 */
# define OMAP3430_VDD_MPU_OPP1_UV 975000
# define OMAP3430_VDD_MPU_OPP2_UV 1075000
# define OMAP3430_VDD_MPU_OPP3_UV 1200000
# define OMAP3430_VDD_MPU_OPP4_UV 1270000
# define OMAP3430_VDD_MPU_OPP5_UV 1350000
struct omap_volt_data omap34xx_vddmpu_volt_data [ ] = {
VOLT_DATA_DEFINE ( OMAP3430_VDD_MPU_OPP1_UV , OMAP343X_CONTROL_FUSE_OPP1_VDD1 , 0xf4 , 0x0c ) ,
VOLT_DATA_DEFINE ( OMAP3430_VDD_MPU_OPP2_UV , OMAP343X_CONTROL_FUSE_OPP2_VDD1 , 0xf4 , 0x0c ) ,
VOLT_DATA_DEFINE ( OMAP3430_VDD_MPU_OPP3_UV , OMAP343X_CONTROL_FUSE_OPP3_VDD1 , 0xf9 , 0x18 ) ,
VOLT_DATA_DEFINE ( OMAP3430_VDD_MPU_OPP4_UV , OMAP343X_CONTROL_FUSE_OPP4_VDD1 , 0xf9 , 0x18 ) ,
VOLT_DATA_DEFINE ( OMAP3430_VDD_MPU_OPP5_UV , OMAP343X_CONTROL_FUSE_OPP5_VDD1 , 0xf9 , 0x18 ) ,
VOLT_DATA_DEFINE ( 0 , 0 , 0 , 0 ) ,
} ;
/* VDD2 */
# define OMAP3430_VDD_CORE_OPP1_UV 975000
# define OMAP3430_VDD_CORE_OPP2_UV 1050000
# define OMAP3430_VDD_CORE_OPP3_UV 1150000
struct omap_volt_data omap34xx_vddcore_volt_data [ ] = {
VOLT_DATA_DEFINE ( OMAP3430_VDD_CORE_OPP1_UV , OMAP343X_CONTROL_FUSE_OPP1_VDD2 , 0xf4 , 0x0c ) ,
VOLT_DATA_DEFINE ( OMAP3430_VDD_CORE_OPP2_UV , OMAP343X_CONTROL_FUSE_OPP2_VDD2 , 0xf4 , 0x0c ) ,
VOLT_DATA_DEFINE ( OMAP3430_VDD_CORE_OPP3_UV , OMAP343X_CONTROL_FUSE_OPP3_VDD2 , 0xf9 , 0x18 ) ,
VOLT_DATA_DEFINE ( 0 , 0 , 0 , 0 ) ,
} ;
/* 36xx */
/* VDD1 */
# define OMAP3630_VDD_MPU_OPP50_UV 1012500
# define OMAP3630_VDD_MPU_OPP100_UV 1200000
# define OMAP3630_VDD_MPU_OPP120_UV 1325000
# define OMAP3630_VDD_MPU_OPP1G_UV 1375000
struct omap_volt_data omap36xx_vddmpu_volt_data [ ] = {
VOLT_DATA_DEFINE ( OMAP3630_VDD_MPU_OPP50_UV , OMAP3630_CONTROL_FUSE_OPP50_VDD1 , 0xf4 , 0x0c ) ,
VOLT_DATA_DEFINE ( OMAP3630_VDD_MPU_OPP100_UV , OMAP3630_CONTROL_FUSE_OPP100_VDD1 , 0xf9 , 0x16 ) ,
VOLT_DATA_DEFINE ( OMAP3630_VDD_MPU_OPP120_UV , OMAP3630_CONTROL_FUSE_OPP120_VDD1 , 0xfa , 0x23 ) ,
VOLT_DATA_DEFINE ( OMAP3630_VDD_MPU_OPP1G_UV , OMAP3630_CONTROL_FUSE_OPP1G_VDD1 , 0xfa , 0x27 ) ,
VOLT_DATA_DEFINE ( 0 , 0 , 0 , 0 ) ,
} ;
/* VDD2 */
# define OMAP3630_VDD_CORE_OPP50_UV 1000000
# define OMAP3630_VDD_CORE_OPP100_UV 1200000
struct omap_volt_data omap36xx_vddcore_volt_data [ ] = {
VOLT_DATA_DEFINE ( OMAP3630_VDD_CORE_OPP50_UV , OMAP3630_CONTROL_FUSE_OPP50_VDD2 , 0xf4 , 0x0c ) ,
VOLT_DATA_DEFINE ( OMAP3630_VDD_CORE_OPP100_UV , OMAP3630_CONTROL_FUSE_OPP100_VDD2 , 0xf9 , 0x16 ) ,
VOLT_DATA_DEFINE ( 0 , 0 , 0 , 0 ) ,
} ;
/* OPP data */
2010-12-09 18:13:46 +03:00
static struct omap_opp_def __initdata omap34xx_opp_def_list [ ] = {
/* MPU OPP1 */
2011-03-05 13:27:22 +03:00
OPP_INITIALIZER ( " mpu " , true , 125000000 , OMAP3430_VDD_MPU_OPP1_UV ) ,
2010-12-09 18:13:46 +03:00
/* MPU OPP2 */
2011-03-05 13:27:22 +03:00
OPP_INITIALIZER ( " mpu " , true , 250000000 , OMAP3430_VDD_MPU_OPP2_UV ) ,
2010-12-09 18:13:46 +03:00
/* MPU OPP3 */
2011-03-05 13:27:22 +03:00
OPP_INITIALIZER ( " mpu " , true , 500000000 , OMAP3430_VDD_MPU_OPP3_UV ) ,
2010-12-09 18:13:46 +03:00
/* MPU OPP4 */
2011-03-05 13:27:22 +03:00
OPP_INITIALIZER ( " mpu " , true , 550000000 , OMAP3430_VDD_MPU_OPP4_UV ) ,
2010-12-09 18:13:46 +03:00
/* MPU OPP5 */
2011-03-05 13:27:22 +03:00
OPP_INITIALIZER ( " mpu " , true , 600000000 , OMAP3430_VDD_MPU_OPP5_UV ) ,
2010-12-09 18:13:46 +03:00
/*
* L3 OPP1 - 41.5 MHz is disabled because : The voltage for that OPP is
* almost the same than the one at 83 MHz thus providing very little
* gain for the power point of view . In term of energy it will even
* increase the consumption due to the very negative performance
* impact that frequency will do to the MPU and the whole system in
* general .
*/
2011-03-05 13:27:22 +03:00
OPP_INITIALIZER ( " l3_main " , false , 41500000 , OMAP3430_VDD_CORE_OPP1_UV ) ,
2010-12-09 18:13:46 +03:00
/* L3 OPP2 */
2011-03-05 13:27:22 +03:00
OPP_INITIALIZER ( " l3_main " , true , 83000000 , OMAP3430_VDD_CORE_OPP2_UV ) ,
2010-12-09 18:13:46 +03:00
/* L3 OPP3 */
2011-03-05 13:27:22 +03:00
OPP_INITIALIZER ( " l3_main " , true , 166000000 , OMAP3430_VDD_CORE_OPP3_UV ) ,
2010-12-09 18:13:46 +03:00
/* DSP OPP1 */
2011-03-05 13:27:22 +03:00
OPP_INITIALIZER ( " iva " , true , 90000000 , OMAP3430_VDD_MPU_OPP1_UV ) ,
2010-12-09 18:13:46 +03:00
/* DSP OPP2 */
2011-03-05 13:27:22 +03:00
OPP_INITIALIZER ( " iva " , true , 180000000 , OMAP3430_VDD_MPU_OPP2_UV ) ,
2010-12-09 18:13:46 +03:00
/* DSP OPP3 */
2011-03-05 13:27:22 +03:00
OPP_INITIALIZER ( " iva " , true , 360000000 , OMAP3430_VDD_MPU_OPP3_UV ) ,
2010-12-09 18:13:46 +03:00
/* DSP OPP4 */
2011-03-05 13:27:22 +03:00
OPP_INITIALIZER ( " iva " , true , 400000000 , OMAP3430_VDD_MPU_OPP4_UV ) ,
2010-12-09 18:13:46 +03:00
/* DSP OPP5 */
2011-03-05 13:27:22 +03:00
OPP_INITIALIZER ( " iva " , true , 430000000 , OMAP3430_VDD_MPU_OPP5_UV ) ,
2010-12-09 18:13:46 +03:00
} ;
static struct omap_opp_def __initdata omap36xx_opp_def_list [ ] = {
/* MPU OPP1 - OPP50 */
2011-03-05 13:27:22 +03:00
OPP_INITIALIZER ( " mpu " , true , 300000000 , OMAP3630_VDD_MPU_OPP50_UV ) ,
2010-12-09 18:13:46 +03:00
/* MPU OPP2 - OPP100 */
2011-03-05 13:27:22 +03:00
OPP_INITIALIZER ( " mpu " , true , 600000000 , OMAP3630_VDD_MPU_OPP100_UV ) ,
2010-12-09 18:13:46 +03:00
/* MPU OPP3 - OPP-Turbo */
2011-03-05 13:27:22 +03:00
OPP_INITIALIZER ( " mpu " , false , 800000000 , OMAP3630_VDD_MPU_OPP120_UV ) ,
2010-12-09 18:13:46 +03:00
/* MPU OPP4 - OPP-SB */
2011-03-05 13:27:22 +03:00
OPP_INITIALIZER ( " mpu " , false , 1000000000 , OMAP3630_VDD_MPU_OPP1G_UV ) ,
2010-12-09 18:13:46 +03:00
/* L3 OPP1 - OPP50 */
2011-03-05 13:27:22 +03:00
OPP_INITIALIZER ( " l3_main " , true , 100000000 , OMAP3630_VDD_CORE_OPP50_UV ) ,
2010-12-09 18:13:46 +03:00
/* L3 OPP2 - OPP100, OPP-Turbo, OPP-SB */
2011-03-05 13:27:22 +03:00
OPP_INITIALIZER ( " l3_main " , true , 200000000 , OMAP3630_VDD_CORE_OPP100_UV ) ,
2010-12-09 18:13:46 +03:00
/* DSP OPP1 - OPP50 */
2011-03-05 13:27:22 +03:00
OPP_INITIALIZER ( " iva " , true , 260000000 , OMAP3630_VDD_MPU_OPP50_UV ) ,
2010-12-09 18:13:46 +03:00
/* DSP OPP2 - OPP100 */
2011-03-05 13:27:22 +03:00
OPP_INITIALIZER ( " iva " , true , 520000000 , OMAP3630_VDD_MPU_OPP100_UV ) ,
2010-12-09 18:13:46 +03:00
/* DSP OPP3 - OPP-Turbo */
2011-03-05 13:27:22 +03:00
OPP_INITIALIZER ( " iva " , false , 660000000 , OMAP3630_VDD_MPU_OPP120_UV ) ,
2010-12-09 18:13:46 +03:00
/* DSP OPP4 - OPP-SB */
2011-03-05 13:27:22 +03:00
OPP_INITIALIZER ( " iva " , false , 800000000 , OMAP3630_VDD_MPU_OPP1G_UV ) ,
2010-12-09 18:13:46 +03:00
} ;
/**
* omap3_opp_init ( ) - initialize omap3 opp table
*/
2011-01-05 23:49:35 +03:00
int __init omap3_opp_init ( void )
2010-12-09 18:13:46 +03:00
{
int r = - ENODEV ;
if ( ! cpu_is_omap34xx ( ) )
return r ;
if ( cpu_is_omap3630 ( ) )
r = omap_init_opp_table ( omap36xx_opp_def_list ,
ARRAY_SIZE ( omap36xx_opp_def_list ) ) ;
else
r = omap_init_opp_table ( omap34xx_opp_def_list ,
ARRAY_SIZE ( omap34xx_opp_def_list ) ) ;
return r ;
}
2013-01-11 23:24:18 +04:00
omap_device_initcall ( omap3_opp_init ) ;