diff options
author | Wen Yi <wyi@nvidia.com> | 2012-06-20 21:42:13 -0700 |
---|---|---|
committer | Simone Willett <swillett@nvidia.com> | 2012-07-16 17:20:28 -0700 |
commit | 5e07056dc8b922b8b43a01b60a949c1dda75d9a9 (patch) | |
tree | bd8a99dc9e78be49ec0613779535f4dfdd2c466e /arch/arm/mach-tegra/include | |
parent | 5a34d0584c5a45547c6733e177a0aa0c93dc1884 (diff) |
arm: tegra: sd: enable sd dpd
This is a WAR solution that allows for the turning on
SD DPD feature.
The original issue is that enabling SD DPD immediately after device comes
out of LP0 causes ULPI disconnect. The root cause of that is
not known.
The WAR is to delay the enabling of SD DPD for 100ms after
device comes out of LP0.
Bug 929628
Change-Id: I3c5e35ace422e5441535c2c0fe18545b53bbddc4
Signed-off-by: Wen Yi <wyi@nvidia.com>
(cherry picked from commit bffb7b917d52a3523af80db21322ec7ba5fd33f9)
Reviewed-on: http://git-master/r/113392
Reviewed-by: Simone Willett <swillett@nvidia.com>
Tested-by: Simone Willett <swillett@nvidia.com>
Diffstat (limited to 'arch/arm/mach-tegra/include')
-rw-r--r-- | arch/arm/mach-tegra/include/mach/io_dpd.h | 30 |
1 files changed, 14 insertions, 16 deletions
diff --git a/arch/arm/mach-tegra/include/mach/io_dpd.h b/arch/arm/mach-tegra/include/mach/io_dpd.h index 8d153792b798..6eb05c3f1b93 100644 --- a/arch/arm/mach-tegra/include/mach/io_dpd.h +++ b/arch/arm/mach-tegra/include/mach/io_dpd.h @@ -1,7 +1,7 @@ /* * arch/arm/mach-tegra/include/mach/io_dpd.h * - * Copyright (C) 2012 NVIDIA Corporation. + * Copyright (c) 2012, NVIDIA CORPORATION. All rights reserved. * * This software is licensed under the terms of the GNU General Public * License version 2, as published by the Free Software Foundation, and @@ -16,25 +16,23 @@ #ifndef __MACH_TEGRA_IO_DPD_H #define __MACH_TEGRA_IO_DPD_H +#include <linux/delay.h> + +/* Tegra io dpd entry - for each supported driver */ +struct tegra_io_dpd { + const char *name; /* driver name */ + u8 io_dpd_reg_index; /* io dpd register index */ + u8 io_dpd_bit; /* bit position for driver in dpd register */ + u8 need_delay_dpd; /* work around to delay dpd after lp0*/ + struct delayed_work delay_dpd; + struct mutex delay_lock; +}; + /* Tegra io dpd APIs */ -#ifdef CONFIG_PM_SLEEP struct tegra_io_dpd *tegra_io_dpd_get(struct device *dev); /* get handle */ void tegra_io_dpd_enable(struct tegra_io_dpd *hnd); /* enable dpd */ void tegra_io_dpd_disable(struct tegra_io_dpd *hnd); /* disable dpd */ -#else -static inline struct tegra_io_dpd *tegra_io_dpd_get(struct device *dev) -{ - return NULL; -} -static inline void tegra_io_dpd_enable(struct tegra_io_dpd *hnd) -{ - /* Do nothing */ -} -static inline void tegra_io_dpd_disable(struct tegra_io_dpd *hnd) -{ - /* Do nothing */ -} -#endif +int tegra_io_dpd_init(void); #endif /* end __MACH_TEGRA_IO_DPD_H */ |