]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - arch/arm/mach-omap2/vc.h
Merge branch 'process_vm' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux
[karo-tx-linux.git] / arch / arm / mach-omap2 / vc.h
index 6e8806b598237db0b559674eb9b87c2ac00b41b9..478bf6b432c42c5c92f5329311e94ac12c5d023b 100644 (file)
@@ -25,9 +25,6 @@ struct voltagedomain;
  * struct omap_vc_common - per-VC register/bitfield data
  * @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
- * @smps_cmdra_reg: Offset of PRM_VC_SMPS_CMD_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
@@ -36,6 +33,9 @@ struct voltagedomain;
  * @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
+ * @i2c_cfg_reg: I2C configuration register offset
+ * @i2c_cfg_hsen_mask: high-speed mode bit field mask in I2C config register
+ * @i2c_mcode_mask: MCODE field mask for I2C config register
  *
  * XXX One of cmd_on_mask and cmd_on_shift are not needed
  * XXX VALID should probably be a shift, not a mask
@@ -43,9 +43,6 @@ struct voltagedomain;
 struct omap_vc_common {
        u32 cmd_on_mask;
        u32 valid;
-       u8 smps_sa_reg;
-       u8 smps_volra_reg;
-       u8 smps_cmdra_reg;
        u8 bypass_val_reg;
        u8 data_shift;
        u8 slaveaddr_shift;
@@ -54,19 +51,35 @@ struct omap_vc_common {
        u8 cmd_onlp_shift;
        u8 cmd_ret_shift;
        u8 cmd_off_shift;
+       u8 i2c_cfg_reg;
+       u8 i2c_cfg_hsen_mask;
+       u8 i2c_mcode_mask;
 };
 
+/* omap_vc_channel.flags values */
+#define OMAP_VC_CHANNEL_DEFAULT BIT(0)
+#define OMAP_VC_CHANNEL_CFG_MUTANT BIT(1)
+
 /**
  * struct omap_vc_channel - VC per-instance data
  * @i2c_slave_addr: I2C slave address of PMIC for this VC channel
  * @volt_reg_addr: voltage configuration register address
  * @cmd_reg_addr: command configuration register address
  * @setup_time: setup time (in sys_clk cycles) of regulator for this channel
+ * @cfg_channel: current value of VC channel configuration register
+ * @i2c_high_speed: whether or not to use I2C high-speed mode
+ *
  * @common: pointer to VC common data for this platform
  * @smps_sa_mask: i2c slave address bitmask in the PRM_VC_SMPS_SA register
  * @smps_volra_mask: VOLRA* bitmask in the PRM_VC_VOL_RA register
  * @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
+ * @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
+ * @cfg_channel_sa_shift: bit shift for slave address cfg_channel register
+ * @flags: VC channel-specific flags (optional)
  */
 struct omap_vc_channel {
        /* channel state */
@@ -74,6 +87,8 @@ struct omap_vc_channel {
        u16 volt_reg_addr;
        u16 cmd_reg_addr;
        u16 setup_time;
+       u8 cfg_channel;
+       bool i2c_high_speed;
 
        /* register access data */
        const struct omap_vc_common *common;
@@ -81,6 +96,12 @@ struct omap_vc_channel {
        u32 smps_volra_mask;
        u32 smps_cmdra_mask;
        u8 cmdval_reg;
+       u8 smps_sa_reg;
+       u8 smps_volra_reg;
+       u8 smps_cmdra_reg;
+       u8 cfg_channel_reg;
+       u8 cfg_channel_sa_shift;
+       u8 flags;
 };
 
 extern struct omap_vc_channel omap3_vc_mpu;