2011-03-11 08:17:45 +03:00
/*
* OMAP3 / 4 Voltage Controller ( VC ) structure and macro definitions
*
* Copyright ( C ) 2007 , 2010 Texas Instruments , Inc .
* Rajendra Nayak < rnayak @ ti . com >
* Lesly A M < x0080970 @ ti . com >
* Thara Gopinath < thara @ ti . com >
*
* Copyright ( C ) 2008 , 2011 Nokia Corporation
* Kalle Jokiniemi
* Paul Walmsley
*
* 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 .
*/
# ifndef __ARCH_ARM_MACH_OMAP2_VC_H
# define __ARCH_ARM_MACH_OMAP2_VC_H
# include <linux/kernel.h>
2011-03-22 00:08:55 +03:00
struct voltagedomain ;
2011-03-11 08:17:45 +03:00
/**
2011-03-23 02:14:57 +03:00
* struct omap_vc_common - per - VC register / bitfield data
2011-03-11 08:17:45 +03:00
* @ cmd_on_mask : ON bitmask in PRM_VC_CMD_VAL * register
* @ valid : VALID bitmask in PRM_VC_BYPASS_VAL register
* @ smps_sa_reg : Offset of PRM_VC_SMPS_SA reg from PRM start
* @ smps_volra_reg : Offset of PRM_VC_SMPS_VOL_RA reg from PRM start
* @ bypass_val_reg : Offset of PRM_VC_BYPASS_VAL reg from PRM start
* @ data_shift : DATA field shift in PRM_VC_BYPASS_VAL register
* @ slaveaddr_shift : SLAVEADDR field shift in PRM_VC_BYPASS_VAL register
* @ regaddr_shift : REGADDR field shift in PRM_VC_BYPASS_VAL register
* @ cmd_on_shift : ON field shift in PRM_VC_CMD_VAL_ * register
* @ cmd_onlp_shift : ONLP field shift in PRM_VC_CMD_VAL_ * register
* @ cmd_ret_shift : RET field shift in PRM_VC_CMD_VAL_ * register
* @ cmd_off_shift : OFF field shift in PRM_VC_CMD_VAL_ * register
*
* XXX One of cmd_on_mask and cmd_on_shift are not needed
* XXX VALID should probably be a shift , not a mask
*/
2011-03-23 02:14:57 +03:00
struct omap_vc_common {
2011-03-11 08:17:45 +03:00
u32 cmd_on_mask ;
u32 valid ;
u8 smps_sa_reg ;
u8 smps_volra_reg ;
u8 bypass_val_reg ;
u8 data_shift ;
u8 slaveaddr_shift ;
u8 regaddr_shift ;
u8 cmd_on_shift ;
u8 cmd_onlp_shift ;
u8 cmd_ret_shift ;
u8 cmd_off_shift ;
} ;
/**
2011-03-23 02:14:57 +03:00
* struct omap_vc_channel - VC per - instance data
2011-03-30 01:02:36 +04:00
* @ i2c_slave_addr : I2C slave address of PMIC for this VC channel
2011-03-23 02:14:57 +03:00
* @ common : pointer to VC common data for this platform
2011-03-30 01:02:36 +04:00
* @ smps_sa_mask : i2c slave address bitmask in the PRM_VC_SMPS_SA register
2011-03-11 08:17:45 +03:00
* @ smps_volra_mask : VOLRA * bitmask in the PRM_VC_VOL_RA register
* @ smps_volra_shift : VOLRA * field shift in the PRM_VC_VOL_RA register
*
* XXX It is not necessary to have both a * _mask and a * _shift -
* remove one
*/
2011-03-23 02:14:57 +03:00
struct omap_vc_channel {
2011-03-30 01:02:36 +04:00
/* channel state */
u16 i2c_slave_addr ;
/* register access data */
2011-03-23 02:14:57 +03:00
const struct omap_vc_common * common ;
2011-03-11 08:17:45 +03:00
u32 smps_sa_mask ;
u32 smps_volra_mask ;
u8 cmdval_reg ;
u8 smps_volra_shift ;
} ;
2011-03-23 02:14:57 +03:00
extern struct omap_vc_channel omap3_vc_mpu ;
extern struct omap_vc_channel omap3_vc_core ;
2011-03-11 08:17:45 +03:00
2011-03-23 02:14:57 +03:00
extern struct omap_vc_channel omap4_vc_mpu ;
extern struct omap_vc_channel omap4_vc_iva ;
extern struct omap_vc_channel omap4_vc_core ;
2011-03-11 08:17:45 +03:00
2011-03-22 00:08:55 +03:00
void omap_vc_init_channel ( struct voltagedomain * voltdm ) ;
int omap_vc_pre_scale ( struct voltagedomain * voltdm ,
unsigned long target_volt ,
u8 * target_vsel , u8 * current_vsel ) ;
void omap_vc_post_scale ( struct voltagedomain * voltdm ,
unsigned long target_volt ,
u8 target_vsel , u8 current_vsel ) ;
2011-03-23 02:14:57 +03:00
int omap_vc_bypass_scale ( struct voltagedomain * voltdm ,
unsigned long target_volt ) ;
2011-03-22 00:08:55 +03:00
2011-03-11 08:17:45 +03:00
# endif