2010-05-29 20:32:25 +04:00
/*
* Smart reflex Class 3 specific implementations
*
* Author : Thara Gopinath < thara @ ti . com >
*
* Copyright ( C ) 2010 Texas Instruments , Inc .
* Thara Gopinath < thara @ ti . com >
*
* 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 .
*/
2012-04-25 14:36:20 +04:00
# include <linux/power/smartreflex.h>
2013-02-10 07:20:57 +04:00
# include "soc.h"
2012-04-25 14:36:20 +04:00
# include "voltage.h"
2010-05-29 20:32:25 +04:00
2012-04-24 08:52:12 +04:00
static int sr_class3_enable ( struct omap_sr * sr )
2010-05-29 20:32:25 +04:00
{
2012-04-24 08:52:12 +04:00
unsigned long volt = voltdm_get_voltage ( sr - > voltdm ) ;
2010-05-29 20:32:25 +04:00
if ( ! volt ) {
2012-04-24 09:11:27 +04:00
pr_warning ( " %s: Curr voltage unknown. Cannot enable %s \n " ,
__func__ , sr - > name ) ;
2010-05-29 20:32:25 +04:00
return - ENODATA ;
}
2012-04-24 08:52:12 +04:00
omap_vp_enable ( sr - > voltdm ) ;
return sr_enable ( sr - > voltdm , volt ) ;
2010-05-29 20:32:25 +04:00
}
2012-04-24 08:52:12 +04:00
static int sr_class3_disable ( struct omap_sr * sr , int is_volt_reset )
2010-05-29 20:32:25 +04:00
{
2012-04-24 08:52:12 +04:00
sr_disable_errgen ( sr - > voltdm ) ;
omap_vp_disable ( sr - > voltdm ) ;
sr_disable ( sr - > voltdm ) ;
2010-05-29 20:32:25 +04:00
if ( is_volt_reset )
2012-04-24 08:52:12 +04:00
voltdm_reset ( sr - > voltdm ) ;
2010-05-29 20:32:25 +04:00
return 0 ;
}
2012-04-24 08:52:12 +04:00
static int sr_class3_configure ( struct omap_sr * sr )
2010-05-29 20:32:25 +04:00
{
2012-04-24 08:52:12 +04:00
return sr_configure_errgen ( sr - > voltdm ) ;
2010-05-29 20:32:25 +04:00
}
/* SR class3 structure */
static struct omap_sr_class_data class3_data = {
. enable = sr_class3_enable ,
. disable = sr_class3_disable ,
. configure = sr_class3_configure ,
. class_type = SR_CLASS3 ,
} ;
/* Smartreflex Class3 init API to be called from board file */
static int __init sr_class3_init ( void )
{
pr_info ( " SmartReflex Class3 initialized \n " ) ;
return sr_register_class ( & class3_data ) ;
}
2013-01-11 23:24:18 +04:00
omap_late_initcall ( sr_class3_init ) ;