Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * OMAP4 Voltage Controller (VC) data
0004  *
0005  * Copyright (C) 2007, 2010 Texas Instruments, Inc.
0006  * Rajendra Nayak <rnayak@ti.com>
0007  * Lesly A M <x0080970@ti.com>
0008  * Thara Gopinath <thara@ti.com>
0009  *
0010  * Copyright (C) 2008, 2011 Nokia Corporation
0011  * Kalle Jokiniemi
0012  * Paul Walmsley
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  * VC data common to 44xx chips
0028  * XXX This stuff presumably belongs in the vc3xxx.c or vc.c file.
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 /* VC instance data for each controllable voltage line */
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  * Voltage levels for different operating modes: on, sleep, retention and off
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 };