diff options
| author | Olof Johansson <olof@lixom.net> | 2013-02-12 15:32:50 -0800 | 
|---|---|---|
| committer | Olof Johansson <olof@lixom.net> | 2013-02-12 15:32:50 -0800 | 
| commit | 379095930b0383e48be6da308e041aca8860c72d (patch) | |
| tree | 429b26a02d9e931dc3760920e258149ac0f8bca1 /arch/arm/mach-omap2/omap_device.h | |
| parent | 0a0db4a1e4c6dfd93411a4425b9f068f0da752c1 (diff) | |
| parent | 25e4d0f6df356ec7c2a09f6744c36a84b5537f33 (diff) | |
| download | olio-linux-3.10-379095930b0383e48be6da308e041aca8860c72d.tar.xz olio-linux-3.10-379095930b0383e48be6da308e041aca8860c72d.zip  | |
Merge tag 'omap-for-v3.9/pm-wfi-take2-signed-v2' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap into late/omap
From Tony Lindgren:
omap pm wfi changes via Paul Walmsley <paul@pwsan.com>:
On OMAP2+ devices, standardize and clean up WFI entry and WFI blocking.
Basic test logs are available here:
   http://www.pwsan.com/omap/testlogs/wfi_devel_a_3.9/20130208085027/
Conflicts:
    arch/arm/mach-omap2/pm24xx.c
Note that this is based on earlier omap-for-v3.9/pm-signed because
of a non-trivial merge conflict. This branch also contains a fix
for c1d1cd59 ("ARM: OMAP2+: omap_device: remove obsolete pm_lats
and early_device code").
* tag 'omap-for-v3.9/pm-wfi-take2-signed-v2' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap: (25 commits)
  ARM: OMAP2+: fix some omap_device_build() calls that aren't compiled by default
  ARM: OMAP AM3517/05: hwmod data: block WFI when EMAC active
  ARM: OMAP2420: hwmod data/PM: use hwmod to block WFI when I2C active
  ARM: OMAP2+: hwmod: add support for blocking WFI when a device is active
  ARM: OMAP2xxx: PM: enter WFI via inline asm if CORE stays active
  ARM: OMAP2+: powerdomain: fix whitespace, improve flag comments
  ARM: OMAP2+: clockdomain: convert existing atomic usecounts into spinlock-protected shorts/ints
  ARM: OMAP2+: clockdomain: work on wkdep/sleepdep functions
  ARM: OMAP2xxx: CM: remove autodep handling
  ARM: OMAP2+: powerdomain/clockdomain: add a per-powerdomain spinlock
  ARM: OMAP2+: PM/powerdomain: move omap_set_pwrdm_state() to powerdomain code
  ARM: OMAP2: PM/powerdomain: drop unnecessary pwrdm_wait_transition()
  ARM: OMAP2xxx: PM: clean up some crufty powerstate programming code
  ARM: OMAP2+: clockdomain: add pwrdm_state_switch() call to clkdm_sleep()
  ARM: OMAP2+: powerdomain: fix powerdomain trace integration
  ARM: OMAP4: MPUSS PM: remove unnecessary shim functions for powerdomain control
  ARM: OMAP3xxx: CPUIdle: optimize __omap3_enter_idle()
  ARM: OMAP2420: hwmod data/PM: use hwmod to block WFI when I2C active
  ARM: OMAP2+: hwmod: add support for blocking WFI when a device is active
  ARM: OMAP3xxx: CPUIdle: simplify the PER next-state code
  ...
Diffstat (limited to 'arch/arm/mach-omap2/omap_device.h')
| -rw-r--r-- | arch/arm/mach-omap2/omap_device.h | 79 | 
1 files changed, 8 insertions, 71 deletions
diff --git a/arch/arm/mach-omap2/omap_device.h b/arch/arm/mach-omap2/omap_device.h index 0933c599bf8..044c31d50e5 100644 --- a/arch/arm/mach-omap2/omap_device.h +++ b/arch/arm/mach-omap2/omap_device.h @@ -13,20 +13,12 @@   * it under the terms of the GNU General Public License version 2 as   * published by the Free Software Foundation.   * - * Eventually this type of functionality should either be - * a) implemented via arch-specific pointers in platform_device - * or - * b) implemented as a proper omap_bus/omap_device in Linux, no more - *    platform_device + * This type of functionality should be implemented as a proper + * omap_bus/omap_device in Linux.   *   * omap_device differs from omap_hwmod in that it includes external   * (e.g., board- and system-level) integration details.  omap_hwmod   * stores hardware data that is invariant for a given OMAP chip. - * - * To do: - * - GPIO integration - * - regulator integration - *   */  #ifndef __ARCH_ARM_PLAT_OMAP_INCLUDE_MACH_OMAP_DEVICE_H  #define __ARCH_ARM_PLAT_OMAP_INCLUDE_MACH_OMAP_DEVICE_H @@ -45,19 +37,14 @@ extern struct dev_pm_domain omap_device_pm_domain;  #define OMAP_DEVICE_STATE_SHUTDOWN	3  /* omap_device.flags values */ -#define OMAP_DEVICE_SUSPENDED BIT(0) -#define OMAP_DEVICE_NO_IDLE_ON_SUSPEND BIT(1) +#define OMAP_DEVICE_SUSPENDED		BIT(0) +#define OMAP_DEVICE_NO_IDLE_ON_SUSPEND	BIT(1)  /**   * struct omap_device - omap_device wrapper for platform_devices   * @pdev: platform_device   * @hwmods: (one .. many per omap_device)   * @hwmods_cnt: ARRAY_SIZE() of @hwmods - * @pm_lats: ptr to an omap_device_pm_latency table - * @pm_lats_cnt: ARRAY_SIZE() of what is passed to @pm_lats - * @pm_lat_level: array index of the last odpl entry executed - -1 if never - * @dev_wakeup_lat: dev wakeup latency in nanoseconds - * @_dev_wakeup_lat_limit: dev wakeup latency limit in nsec - set by OMAP PM   * @_state: one of OMAP_DEVICE_STATE_* (see above)   * @flags: device flags   * @_driver_status: one of BUS_NOTIFY_*_DRIVER from <linux/device.h> @@ -71,12 +58,7 @@ extern struct dev_pm_domain omap_device_pm_domain;  struct omap_device {  	struct platform_device		*pdev;  	struct omap_hwmod		**hwmods; -	struct omap_device_pm_latency	*pm_lats; -	u32				dev_wakeup_lat; -	u32				_dev_wakeup_lat_limit;  	unsigned long			_driver_status; -	u8				pm_lats_cnt; -	s8				pm_lat_level;  	u8				hwmods_cnt;  	u8				_state;  	u8                              flags; @@ -86,36 +68,25 @@ struct omap_device {  int omap_device_enable(struct platform_device *pdev);  int omap_device_idle(struct platform_device *pdev); -int omap_device_shutdown(struct platform_device *pdev);  /* Core code interface */  struct platform_device *omap_device_build(const char *pdev_name, int pdev_id, -				      struct omap_hwmod *oh, void *pdata, -				      int pdata_len, -				      struct omap_device_pm_latency *pm_lats, -				      int pm_lats_cnt, int is_early_device); +					  struct omap_hwmod *oh, void *pdata, +					  int pdata_len);  struct platform_device *omap_device_build_ss(const char *pdev_name, int pdev_id,  					 struct omap_hwmod **oh, int oh_cnt, -					 void *pdata, int pdata_len, -					 struct omap_device_pm_latency *pm_lats, -					 int pm_lats_cnt, int is_early_device); +					 void *pdata, int pdata_len);  struct omap_device *omap_device_alloc(struct platform_device *pdev, -				      struct omap_hwmod **ohs, int oh_cnt, -				      struct omap_device_pm_latency *pm_lats, -				      int pm_lats_cnt); +				      struct omap_hwmod **ohs, int oh_cnt);  void omap_device_delete(struct omap_device *od);  int omap_device_register(struct platform_device *pdev); -void __iomem *omap_device_get_rt_va(struct omap_device *od);  struct device *omap_device_get_by_hwmod_name(const char *oh_name);  /* OMAP PM interface */ -int omap_device_align_pm_lat(struct platform_device *pdev, -			     u32 new_wakeup_lat_limit); -struct powerdomain *omap_device_get_pwrdm(struct omap_device *od);  int omap_device_get_context_loss_count(struct platform_device *pdev);  /* Other */ @@ -124,40 +95,6 @@ int omap_device_assert_hardreset(struct platform_device *pdev,  				 const char *name);  int omap_device_deassert_hardreset(struct platform_device *pdev,  				 const char *name); -int omap_device_idle_hwmods(struct omap_device *od); -int omap_device_enable_hwmods(struct omap_device *od); - -int omap_device_disable_clocks(struct omap_device *od); -int omap_device_enable_clocks(struct omap_device *od); - -/* - * Entries should be kept in latency order ascending - * - * deact_lat is the maximum number of microseconds required to complete - * deactivate_func() at the device's slowest OPP. - * - * act_lat is the maximum number of microseconds required to complete - * activate_func() at the device's slowest OPP. - * - * This will result in some suboptimal power management decisions at fast - * OPPs, but avoids having to recompute all device power management decisions - * if the system shifts from a fast OPP to a slow OPP (in order to meet - * latency requirements). - * - * XXX should deactivate_func/activate_func() take platform_device pointers - * rather than omap_device pointers? - */ -struct omap_device_pm_latency { -	u32 deactivate_lat; -	u32 deactivate_lat_worst; -	int (*deactivate_func)(struct omap_device *od); -	u32 activate_lat; -	u32 activate_lat_worst; -	int (*activate_func)(struct omap_device *od); -	u32 flags; -}; - -#define OMAP_DEVICE_LATENCY_AUTO_ADJUST BIT(1)  /* Get omap_device pointer from platform_device pointer */  static inline struct omap_device *to_omap_device(struct platform_device *pdev)  |