linux/arch/arm/mach-omap2/omap_opp_data.h
<<
>>
Prefs
   1/*
   2 * OMAP SoC specific OPP Data helpers
   3 *
   4 * Copyright (C) 2009-2010 Texas Instruments Incorporated - https://www.ti.com/
   5 *      Nishanth Menon
   6 *      Kevin Hilman
   7 * Copyright (C) 2010 Nokia Corporation.
   8 *      Eduardo Valentin
   9 *
  10 * This program is free software; you can redistribute it and/or modify
  11 * it under the terms of the GNU General Public License version 2 as
  12 * published by the Free Software Foundation.
  13 *
  14 * This program is distributed "as is" WITHOUT ANY WARRANTY of any
  15 * kind, whether express or implied; without even the implied warranty
  16 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17 * GNU General Public License for more details.
  18 */
  19#ifndef __ARCH_ARM_MACH_OMAP2_OMAP_OPP_DATA_H
  20#define __ARCH_ARM_MACH_OMAP2_OMAP_OPP_DATA_H
  21
  22#include "omap_hwmod.h"
  23
  24#include "voltage.h"
  25
  26/*
  27 * *BIG FAT WARNING*:
  28 * USE the following ONLY in opp data initialization common to an SoC.
  29 * DO NOT USE these in board files/pm core etc.
  30 */
  31
  32/**
  33 * struct omap_opp_def - OMAP OPP Definition
  34 * @hwmod_name: Name of the hwmod for this domain
  35 * @freq:       Frequency in hertz corresponding to this OPP
  36 * @u_volt:     Nominal voltage in microvolts corresponding to this OPP
  37 * @default_available:  True/false - is this OPP available by default
  38 *
  39 * OMAP SOCs have a standard set of tuples consisting of frequency and voltage
  40 * pairs that the device will support per voltage domain. This is called
  41 * Operating Points or OPP. The actual definitions of OMAP Operating Points
  42 * varies over silicon within the same family of devices. For a specific
  43 * domain, you can have a set of {frequency, voltage} pairs and this is denoted
  44 * by an array of omap_opp_def. As the kernel boots and more information is
  45 * available, a set of these are activated based on the precise nature of
  46 * device the kernel boots up on. It is interesting to remember that each IP
  47 * which belongs to a voltage domain may define their own set of OPPs on top
  48 * of this - but this is handled by the appropriate driver.
  49 */
  50struct omap_opp_def {
  51        char *hwmod_name;
  52
  53        unsigned long freq;
  54        unsigned long u_volt;
  55
  56        bool default_available;
  57};
  58
  59/*
  60 * Initialization wrapper used to define an OPP for OMAP variants.
  61 */
  62#define OPP_INITIALIZER(_hwmod_name, _enabled, _freq, _uv)      \
  63{                                                               \
  64        .hwmod_name     = _hwmod_name,                          \
  65        .default_available      = _enabled,                     \
  66        .freq           = _freq,                                \
  67        .u_volt         = _uv,                                  \
  68}
  69
  70/*
  71 * Initialization wrapper used to define SmartReflex process data
  72 * XXX Is this needed?  Just use C99 initializers in data files?
  73 */
  74#define VOLT_DATA_DEFINE(_v_nom, _efuse_offs, _errminlimit, _errgain)  \
  75{                                                                      \
  76        .volt_nominal   = _v_nom,                                      \
  77        .sr_efuse_offs  = _efuse_offs,                                 \
  78        .sr_errminlimit = _errminlimit,                                \
  79        .vp_errgain     = _errgain                                     \
  80}
  81
  82/* Use this to initialize the default table */
  83extern int __init omap_init_opp_table(struct omap_opp_def *opp_def,
  84                u32 opp_def_size);
  85
  86
  87extern struct omap_volt_data omap34xx_vddmpu_volt_data[];
  88extern struct omap_volt_data omap34xx_vddcore_volt_data[];
  89extern struct omap_volt_data omap36xx_vddmpu_volt_data[];
  90extern struct omap_volt_data omap36xx_vddcore_volt_data[];
  91
  92extern struct omap_volt_data omap443x_vdd_mpu_volt_data[];
  93extern struct omap_volt_data omap443x_vdd_iva_volt_data[];
  94extern struct omap_volt_data omap443x_vdd_core_volt_data[];
  95extern struct omap_volt_data omap446x_vdd_mpu_volt_data[];
  96extern struct omap_volt_data omap446x_vdd_iva_volt_data[];
  97extern struct omap_volt_data omap446x_vdd_core_volt_data[];
  98
  99#endif          /* __ARCH_ARM_MACH_OMAP2_OMAP_OPP_DATA_H */
 100