Logo Search packages:      
Sourcecode: linux version File versions  Download package

voltage.h

/*
 * OMAP Voltage Management Routines
 *
 * Author: Thara Gopinath     <thara@ti.com>
 *
 * Copyright (C) 2009 Texas Instruments, Inc.
 * Thara Gopinath <thara@ti.com>
 *
 * 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_VOLTAGE_H
#define __ARCH_ARM_MACH_OMAP2_VOLTAGE_H

#include <linux/err.h>

#define VOLTSCALE_VPFORCEUPDATE           1
#define VOLTSCALE_VCBYPASS          2

/*
 * OMAP3 GENERIC setup times. Revisit to see if these needs to be
 * passed from board or PMIC file
 */
#define OMAP3_CLKSETUP        0xff
#define OMAP3_VOLTOFFSET      0xff
#define OMAP3_VOLTSETUP2      0xff

/* Voltage value defines */
#define OMAP3430_VDD_MPU_OPP1_UV          975000
#define OMAP3430_VDD_MPU_OPP2_UV          1075000
#define OMAP3430_VDD_MPU_OPP3_UV          1200000
#define OMAP3430_VDD_MPU_OPP4_UV          1270000
#define OMAP3430_VDD_MPU_OPP5_UV          1350000

#define OMAP3430_VDD_CORE_OPP1_UV         975000
#define OMAP3430_VDD_CORE_OPP2_UV         1050000
#define OMAP3430_VDD_CORE_OPP3_UV         1150000

#define OMAP3630_VDD_MPU_OPP50_UV         1012500
#define OMAP3630_VDD_MPU_OPP100_UV        1200000
#define OMAP3630_VDD_MPU_OPP120_UV        1325000
#define OMAP3630_VDD_MPU_OPP1G_UV         1375000

#define OMAP3630_VDD_CORE_OPP50_UV        1000000
#define OMAP3630_VDD_CORE_OPP100_UV       1200000

#define OMAP4430_VDD_MPU_OPP50_UV         930000
#define OMAP4430_VDD_MPU_OPP100_UV        1100000
#define OMAP4430_VDD_MPU_OPPTURBO_UV            1260000
#define OMAP4430_VDD_MPU_OPPNITRO_UV            1350000

#define OMAP4430_VDD_IVA_OPP50_UV         930000
#define OMAP4430_VDD_IVA_OPP100_UV        1100000
#define OMAP4430_VDD_IVA_OPPTURBO_UV            1260000

#define OMAP4430_VDD_CORE_OPP50_UV        930000
#define OMAP4430_VDD_CORE_OPP100_UV       1100000

/**
 * struct voltagedomain - omap voltage domain global structure.
 * @name:   Name of the voltage domain which can be used as a unique
 *          identifier.
 */
00066 struct voltagedomain {
      char *name;
};

/**
 * struct omap_volt_data - Omap voltage specific data.
 * @voltage_nominal:    The possible voltage value in uV
 * @sr_efuse_offs:      The offset of the efuse register(from system
 *                control module base address) from where to read
 *                the n-target value for the smartreflex module.
 * @sr_errminlimit:     Error min limit value for smartreflex. This value
 *                differs at differnet opp and thus is linked
 *                with voltage.
 * @vp_errorgain: Error gain value for the voltage processor. This
 *                field also differs according to the voltage/opp.
 */
00082 struct omap_volt_data {
      u32   volt_nominal;
      u32   sr_efuse_offs;
      u8    sr_errminlimit;
      u8    vp_errgain;
};

/**
 * struct omap_volt_pmic_info - PMIC specific data required by voltage driver.
 * @slew_rate:    PMIC slew rate (in uv/us)
 * @step_size:    PMIC voltage step size (in uv)
 * @vsel_to_uv:   PMIC API to convert vsel value to actual voltage in uV.
 * @uv_to_vsel:   PMIC API to convert voltage in uV to vsel value.
 */
00096 struct omap_volt_pmic_info {
      int slew_rate;
      int step_size;
      u32 on_volt;
      u32 onlp_volt;
      u32 ret_volt;
      u32 off_volt;
      u16 volt_setup_time;
      u8 vp_erroroffset;
      u8 vp_vstepmin;
      u8 vp_vstepmax;
      u8 vp_vddmin;
      u8 vp_vddmax;
      u8 vp_timeout_us;
      u8 i2c_slave_addr;
      u8 pmic_reg;
      unsigned long (*vsel_to_uv) (const u8 vsel);
      u8 (*uv_to_vsel) (unsigned long uV);
};

unsigned long omap_vp_get_curr_volt(struct voltagedomain *voltdm);
void omap_vp_enable(struct voltagedomain *voltdm);
void omap_vp_disable(struct voltagedomain *voltdm);
int omap_voltage_scale_vdd(struct voltagedomain *voltdm,
            unsigned long target_volt);
void omap_voltage_reset(struct voltagedomain *voltdm);
void omap_voltage_get_volttable(struct voltagedomain *voltdm,
            struct omap_volt_data **volt_data);
struct omap_volt_data *omap_voltage_get_voltdata(struct voltagedomain *voltdm,
            unsigned long volt);
unsigned long omap_voltage_get_nom_volt(struct voltagedomain *voltdm);
struct dentry *omap_voltage_get_dbgdir(struct voltagedomain *voltdm);
#ifdef CONFIG_PM
int omap_voltage_register_pmic(struct voltagedomain *voltdm,
            struct omap_volt_pmic_info *pmic_info);
void omap_change_voltscale_method(struct voltagedomain *voltdm,
            int voltscale_method);
/* API to get the voltagedomain pointer */
struct voltagedomain *omap_voltage_domain_lookup(char *name);

int omap_voltage_late_init(void);
#else
static inline int omap_voltage_register_pmic(struct voltagedomain *voltdm,
            struct omap_volt_pmic_info *pmic_info)
{
      return -EINVAL;
}
static inline  void omap_change_voltscale_method(struct voltagedomain *voltdm,
            int voltscale_method) {}
static inline int omap_voltage_late_init(void)
{
      return -EINVAL;
}
static inline struct voltagedomain *omap_voltage_domain_lookup(char *name)
{
      return ERR_PTR(-EINVAL);
}
#endif

#endif

Generated by  Doxygen 1.6.0   Back to index