2019-06-04 16:11:33 +08:00
|
|
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
2011-03-11 13:17:45 +08: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
|
|
|
|
*/
|
|
|
|
#ifndef __ARCH_ARM_MACH_OMAP2_VC_H
|
|
|
|
#define __ARCH_ARM_MACH_OMAP2_VC_H
|
|
|
|
|
|
|
|
#include <linux/kernel.h>
|
|
|
|
|
2011-03-22 05:08:55 +08:00
|
|
|
struct voltagedomain;
|
|
|
|
|
2011-03-11 13:17:45 +08:00
|
|
|
/**
|
2011-03-23 07:14:57 +08:00
|
|
|
* struct omap_vc_common - per-VC register/bitfield data
|
2011-03-11 13:17:45 +08:00
|
|
|
* @cmd_on_mask: ON bitmask in PRM_VC_CMD_VAL* register
|
|
|
|
* @valid: VALID bitmask in PRM_VC_BYPASS_VAL register
|
|
|
|
* @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
|
2011-03-31 07:36:30 +08:00
|
|
|
* @i2c_cfg_reg: I2C configuration register offset
|
2015-05-04 23:54:41 +08:00
|
|
|
* @i2c_cfg_clear_mask: high-speed mode bit clear mask in I2C config register
|
2011-03-31 07:36:30 +08:00
|
|
|
* @i2c_cfg_hsen_mask: high-speed mode bit field mask in I2C config register
|
|
|
|
* @i2c_mcode_mask: MCODE field mask for I2C config register
|
2011-03-11 13:17:45 +08:00
|
|
|
*
|
|
|
|
* 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 07:14:57 +08:00
|
|
|
struct omap_vc_common {
|
2011-03-11 13:17:45 +08:00
|
|
|
u32 cmd_on_mask;
|
|
|
|
u32 valid;
|
|
|
|
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-31 07:36:30 +08:00
|
|
|
u8 i2c_cfg_reg;
|
2015-05-04 23:54:41 +08:00
|
|
|
u8 i2c_cfg_clear_mask;
|
2011-03-31 07:36:30 +08:00
|
|
|
u8 i2c_cfg_hsen_mask;
|
|
|
|
u8 i2c_mcode_mask;
|
2011-03-11 13:17:45 +08:00
|
|
|
};
|
|
|
|
|
OMAP3+: VC: abstract out channel configuration
VC channel configuration is programmed based on settings coming from
the PMIC configuration.
Currently, the VC channel to PMIC mapping is a simple one-to-one
mapping. Whenever a VC channel parameter is configured (i2c slave
addres, PMIC register address, on/ret/off command), the corresponding
bits are enabled in the VC channel configuration register.
If necessary, the programmability of channel configuration settings
could be extended to board/PMIC files, however, because this patch
changes the channel configuration to be programmed based on existing
values from the PMIC settings, it may not be required.
Also note that starting with OMAP4, where there are more than 2
channels, one channel is identified as the "default" channel. When
any of the bits in the channel config for the other channels are zero,
it means to use the default channel. The OMAP4 TRM (at least through
NDA version Q) is wrong in describing which is the default channel.
The default channel on OMAP4 is MPU, not CORE as decribed in the TRM.
Signed-off-by: Kevin Hilman <khilman@ti.com>
2011-03-30 06:57:16 +08:00
|
|
|
/* omap_vc_channel.flags values */
|
|
|
|
#define OMAP_VC_CHANNEL_DEFAULT BIT(0)
|
2011-06-03 08:28:13 +08:00
|
|
|
#define OMAP_VC_CHANNEL_CFG_MUTANT BIT(1)
|
OMAP3+: VC: abstract out channel configuration
VC channel configuration is programmed based on settings coming from
the PMIC configuration.
Currently, the VC channel to PMIC mapping is a simple one-to-one
mapping. Whenever a VC channel parameter is configured (i2c slave
addres, PMIC register address, on/ret/off command), the corresponding
bits are enabled in the VC channel configuration register.
If necessary, the programmability of channel configuration settings
could be extended to board/PMIC files, however, because this patch
changes the channel configuration to be programmed based on existing
values from the PMIC settings, it may not be required.
Also note that starting with OMAP4, where there are more than 2
channels, one channel is identified as the "default" channel. When
any of the bits in the channel config for the other channels are zero,
it means to use the default channel. The OMAP4 TRM (at least through
NDA version Q) is wrong in describing which is the default channel.
The default channel on OMAP4 is MPU, not CORE as decribed in the TRM.
Signed-off-by: Kevin Hilman <khilman@ti.com>
2011-03-30 06:57:16 +08:00
|
|
|
|
2011-03-11 13:17:45 +08:00
|
|
|
/**
|
2011-03-23 07:14:57 +08:00
|
|
|
* struct omap_vc_channel - VC per-instance data
|
2011-03-30 05:02:36 +08:00
|
|
|
* @i2c_slave_addr: I2C slave address of PMIC for this VC channel
|
2011-06-10 02:01:55 +08:00
|
|
|
* @volt_reg_addr: voltage configuration register address
|
|
|
|
* @cmd_reg_addr: command configuration register address
|
2011-03-30 05:36:04 +08:00
|
|
|
* @setup_time: setup time (in sys_clk cycles) of regulator for this channel
|
2011-03-31 02:01:10 +08:00
|
|
|
* @cfg_channel: current value of VC channel configuration register
|
2011-03-31 07:36:30 +08:00
|
|
|
* @i2c_high_speed: whether or not to use I2C high-speed mode
|
2011-03-31 02:01:10 +08:00
|
|
|
*
|
2011-03-23 07:14:57 +08:00
|
|
|
* @common: pointer to VC common data for this platform
|
2011-03-30 05:02:36 +08:00
|
|
|
* @smps_sa_mask: i2c slave address bitmask in the PRM_VC_SMPS_SA register
|
2011-03-11 13:17:45 +08:00
|
|
|
* @smps_volra_mask: VOLRA* bitmask in the PRM_VC_VOL_RA register
|
2011-06-10 02:01:55 +08:00
|
|
|
* @smps_cmdra_mask: CMDRA* bitmask in the PRM_VC_CMD_RA register
|
|
|
|
* @cmdval_reg: register for on/ret/off voltage level values for this channel
|
2011-07-21 07:35:46 +08:00
|
|
|
* @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
|
|
|
|
* @smps_cmdra_reg: Offset of PRM_VC_SMPS_CMD_RA reg from PRM start
|
|
|
|
* @cfg_channel_reg: VC channel configuration register
|
2011-03-31 02:01:10 +08:00
|
|
|
* @cfg_channel_sa_shift: bit shift for slave address cfg_channel register
|
OMAP3+: VC: abstract out channel configuration
VC channel configuration is programmed based on settings coming from
the PMIC configuration.
Currently, the VC channel to PMIC mapping is a simple one-to-one
mapping. Whenever a VC channel parameter is configured (i2c slave
addres, PMIC register address, on/ret/off command), the corresponding
bits are enabled in the VC channel configuration register.
If necessary, the programmability of channel configuration settings
could be extended to board/PMIC files, however, because this patch
changes the channel configuration to be programmed based on existing
values from the PMIC settings, it may not be required.
Also note that starting with OMAP4, where there are more than 2
channels, one channel is identified as the "default" channel. When
any of the bits in the channel config for the other channels are zero,
it means to use the default channel. The OMAP4 TRM (at least through
NDA version Q) is wrong in describing which is the default channel.
The default channel on OMAP4 is MPU, not CORE as decribed in the TRM.
Signed-off-by: Kevin Hilman <khilman@ti.com>
2011-03-30 06:57:16 +08:00
|
|
|
* @flags: VC channel-specific flags (optional)
|
2011-03-11 13:17:45 +08:00
|
|
|
*/
|
2011-03-23 07:14:57 +08:00
|
|
|
struct omap_vc_channel {
|
2011-03-30 05:02:36 +08:00
|
|
|
/* channel state */
|
|
|
|
u16 i2c_slave_addr;
|
2011-06-10 02:01:55 +08:00
|
|
|
u16 volt_reg_addr;
|
|
|
|
u16 cmd_reg_addr;
|
OMAP3+: VC: abstract out channel configuration
VC channel configuration is programmed based on settings coming from
the PMIC configuration.
Currently, the VC channel to PMIC mapping is a simple one-to-one
mapping. Whenever a VC channel parameter is configured (i2c slave
addres, PMIC register address, on/ret/off command), the corresponding
bits are enabled in the VC channel configuration register.
If necessary, the programmability of channel configuration settings
could be extended to board/PMIC files, however, because this patch
changes the channel configuration to be programmed based on existing
values from the PMIC settings, it may not be required.
Also note that starting with OMAP4, where there are more than 2
channels, one channel is identified as the "default" channel. When
any of the bits in the channel config for the other channels are zero,
it means to use the default channel. The OMAP4 TRM (at least through
NDA version Q) is wrong in describing which is the default channel.
The default channel on OMAP4 is MPU, not CORE as decribed in the TRM.
Signed-off-by: Kevin Hilman <khilman@ti.com>
2011-03-30 06:57:16 +08:00
|
|
|
u8 cfg_channel;
|
2011-03-31 07:36:30 +08:00
|
|
|
bool i2c_high_speed;
|
2011-03-30 05:02:36 +08:00
|
|
|
|
|
|
|
/* register access data */
|
2011-03-23 07:14:57 +08:00
|
|
|
const struct omap_vc_common *common;
|
2011-03-11 13:17:45 +08:00
|
|
|
u32 smps_sa_mask;
|
|
|
|
u32 smps_volra_mask;
|
2011-06-10 02:01:55 +08:00
|
|
|
u32 smps_cmdra_mask;
|
2011-03-11 13:17:45 +08:00
|
|
|
u8 cmdval_reg;
|
2011-07-21 07:35:46 +08:00
|
|
|
u8 smps_sa_reg;
|
|
|
|
u8 smps_volra_reg;
|
|
|
|
u8 smps_cmdra_reg;
|
|
|
|
u8 cfg_channel_reg;
|
OMAP3+: VC: abstract out channel configuration
VC channel configuration is programmed based on settings coming from
the PMIC configuration.
Currently, the VC channel to PMIC mapping is a simple one-to-one
mapping. Whenever a VC channel parameter is configured (i2c slave
addres, PMIC register address, on/ret/off command), the corresponding
bits are enabled in the VC channel configuration register.
If necessary, the programmability of channel configuration settings
could be extended to board/PMIC files, however, because this patch
changes the channel configuration to be programmed based on existing
values from the PMIC settings, it may not be required.
Also note that starting with OMAP4, where there are more than 2
channels, one channel is identified as the "default" channel. When
any of the bits in the channel config for the other channels are zero,
it means to use the default channel. The OMAP4 TRM (at least through
NDA version Q) is wrong in describing which is the default channel.
The default channel on OMAP4 is MPU, not CORE as decribed in the TRM.
Signed-off-by: Kevin Hilman <khilman@ti.com>
2011-03-30 06:57:16 +08:00
|
|
|
u8 cfg_channel_sa_shift;
|
|
|
|
u8 flags;
|
2011-03-11 13:17:45 +08:00
|
|
|
};
|
|
|
|
|
2011-03-23 07:14:57 +08:00
|
|
|
extern struct omap_vc_channel omap3_vc_mpu;
|
|
|
|
extern struct omap_vc_channel omap3_vc_core;
|
2011-03-11 13:17:45 +08:00
|
|
|
|
2011-03-23 07:14:57 +08: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 13:17:45 +08:00
|
|
|
|
2012-09-26 00:33:35 +08:00
|
|
|
extern struct omap_vc_param omap3_mpu_vc_data;
|
|
|
|
extern struct omap_vc_param omap3_core_vc_data;
|
|
|
|
|
|
|
|
extern struct omap_vc_param omap4_mpu_vc_data;
|
|
|
|
extern struct omap_vc_param omap4_iva_vc_data;
|
|
|
|
extern struct omap_vc_param omap4_core_vc_data;
|
|
|
|
|
2014-05-06 08:27:35 +08:00
|
|
|
void omap3_vc_set_pmic_signaling(int core_next_state);
|
2019-10-19 06:09:53 +08:00
|
|
|
void omap4_vc_set_pmic_signaling(int core_next_state);
|
2014-05-06 08:27:35 +08:00
|
|
|
|
2011-03-22 05:08:55 +08: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 07:14:57 +08:00
|
|
|
int omap_vc_bypass_scale(struct voltagedomain *voltdm,
|
|
|
|
unsigned long target_volt);
|
2011-03-22 05:08:55 +08:00
|
|
|
|
2011-03-11 13:17:45 +08:00
|
|
|
#endif
|
|
|
|
|