0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 #include <linux/io.h>
0015 #include <linux/err.h>
0016 #include <linux/init.h>
0017
0018 #include "common.h"
0019
0020 #include "prm44xx.h"
0021 #include "prm-regbits-44xx.h"
0022 #include "voltage.h"
0023
0024 #include "vc.h"
0025
0026
0027
0028
0029
0030 static const struct omap_vc_common omap4_vc_common = {
0031 .bypass_val_reg = OMAP4_PRM_VC_VAL_BYPASS_OFFSET,
0032 .data_shift = OMAP4430_DATA_SHIFT,
0033 .slaveaddr_shift = OMAP4430_SLAVEADDR_SHIFT,
0034 .regaddr_shift = OMAP4430_REGADDR_SHIFT,
0035 .valid = OMAP4430_VALID_MASK,
0036 .cmd_on_shift = OMAP4430_ON_SHIFT,
0037 .cmd_on_mask = OMAP4430_ON_MASK,
0038 .cmd_onlp_shift = OMAP4430_ONLP_SHIFT,
0039 .cmd_ret_shift = OMAP4430_RET_SHIFT,
0040 .cmd_off_shift = OMAP4430_OFF_SHIFT,
0041 .i2c_cfg_reg = OMAP4_PRM_VC_CFG_I2C_MODE_OFFSET,
0042 .i2c_cfg_clear_mask = OMAP4430_SRMODEEN_MASK | OMAP4430_HSMODEEN_MASK,
0043 .i2c_cfg_hsen_mask = OMAP4430_HSMODEEN_MASK,
0044 .i2c_mcode_mask = OMAP4430_HSMCODE_MASK,
0045 };
0046
0047
0048 struct omap_vc_channel omap4_vc_mpu = {
0049 .flags = OMAP_VC_CHANNEL_DEFAULT | OMAP_VC_CHANNEL_CFG_MUTANT,
0050 .common = &omap4_vc_common,
0051 .smps_sa_reg = OMAP4_PRM_VC_SMPS_SA_OFFSET,
0052 .smps_volra_reg = OMAP4_PRM_VC_VAL_SMPS_RA_VOL_OFFSET,
0053 .smps_cmdra_reg = OMAP4_PRM_VC_VAL_SMPS_RA_CMD_OFFSET,
0054 .cfg_channel_reg = OMAP4_PRM_VC_CFG_CHANNEL_OFFSET,
0055 .cmdval_reg = OMAP4_PRM_VC_VAL_CMD_VDD_MPU_L_OFFSET,
0056 .smps_sa_mask = OMAP4430_SA_VDD_MPU_L_PRM_VC_SMPS_SA_MASK,
0057 .smps_volra_mask = OMAP4430_VOLRA_VDD_MPU_L_MASK,
0058 .smps_cmdra_mask = OMAP4430_CMDRA_VDD_MPU_L_MASK,
0059 .cfg_channel_sa_shift = OMAP4430_SA_VDD_MPU_L_SHIFT,
0060 };
0061
0062 struct omap_vc_channel omap4_vc_iva = {
0063 .common = &omap4_vc_common,
0064 .smps_sa_reg = OMAP4_PRM_VC_SMPS_SA_OFFSET,
0065 .smps_volra_reg = OMAP4_PRM_VC_VAL_SMPS_RA_VOL_OFFSET,
0066 .smps_cmdra_reg = OMAP4_PRM_VC_VAL_SMPS_RA_CMD_OFFSET,
0067 .cfg_channel_reg = OMAP4_PRM_VC_CFG_CHANNEL_OFFSET,
0068 .cmdval_reg = OMAP4_PRM_VC_VAL_CMD_VDD_IVA_L_OFFSET,
0069 .smps_sa_mask = OMAP4430_SA_VDD_IVA_L_PRM_VC_SMPS_SA_MASK,
0070 .smps_volra_mask = OMAP4430_VOLRA_VDD_IVA_L_MASK,
0071 .smps_cmdra_mask = OMAP4430_CMDRA_VDD_IVA_L_MASK,
0072 .cfg_channel_sa_shift = OMAP4430_SA_VDD_IVA_L_SHIFT,
0073 };
0074
0075 struct omap_vc_channel omap4_vc_core = {
0076 .common = &omap4_vc_common,
0077 .smps_sa_reg = OMAP4_PRM_VC_SMPS_SA_OFFSET,
0078 .smps_volra_reg = OMAP4_PRM_VC_VAL_SMPS_RA_VOL_OFFSET,
0079 .smps_cmdra_reg = OMAP4_PRM_VC_VAL_SMPS_RA_CMD_OFFSET,
0080 .cfg_channel_reg = OMAP4_PRM_VC_CFG_CHANNEL_OFFSET,
0081 .cmdval_reg = OMAP4_PRM_VC_VAL_CMD_VDD_CORE_L_OFFSET,
0082 .smps_sa_mask = OMAP4430_SA_VDD_CORE_L_0_6_MASK,
0083 .smps_volra_mask = OMAP4430_VOLRA_VDD_CORE_L_MASK,
0084 .smps_cmdra_mask = OMAP4430_CMDRA_VDD_CORE_L_MASK,
0085 .cfg_channel_sa_shift = OMAP4430_SA_VDD_CORE_L_SHIFT,
0086 };
0087
0088
0089
0090
0091 #define OMAP4_ON_VOLTAGE_UV 1375000
0092 #define OMAP4_ONLP_VOLTAGE_UV 1375000
0093 #define OMAP4_RET_VOLTAGE_UV 837500
0094 #define OMAP4_OFF_VOLTAGE_UV 0
0095
0096 struct omap_vc_param omap4_mpu_vc_data = {
0097 .on = OMAP4_ON_VOLTAGE_UV,
0098 .onlp = OMAP4_ONLP_VOLTAGE_UV,
0099 .ret = OMAP4_RET_VOLTAGE_UV,
0100 .off = OMAP4_OFF_VOLTAGE_UV,
0101 };
0102
0103 struct omap_vc_param omap4_iva_vc_data = {
0104 .on = OMAP4_ON_VOLTAGE_UV,
0105 .onlp = OMAP4_ONLP_VOLTAGE_UV,
0106 .ret = OMAP4_RET_VOLTAGE_UV,
0107 .off = OMAP4_OFF_VOLTAGE_UV,
0108 };
0109
0110 struct omap_vc_param omap4_core_vc_data = {
0111 .on = OMAP4_ON_VOLTAGE_UV,
0112 .onlp = OMAP4_ONLP_VOLTAGE_UV,
0113 .ret = OMAP4_RET_VOLTAGE_UV,
0114 .off = OMAP4_OFF_VOLTAGE_UV,
0115 };