summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/pinmux.c
diff options
context:
space:
mode:
authorPavan Kunapuli <pkunapuli@nvidia.com>2012-10-16 21:47:22 +0530
committerSimone Willett <swillett@nvidia.com>2012-12-05 14:01:14 -0800
commit7cf7cef96eb96da26be252c29781458c241f45e6 (patch)
treeddb5398fa3d3ac624bc7b57218a73bb92ba9a082 /arch/arm/mach-tegra/pinmux.c
parent4e848982b2492229f32225c01f1e4edf7dd0d7df (diff)
ARM: tegra: pinmux: Allow dynamic drive settings
The pullup and pulldown drive configuration APIs are made available for drivers that need to change drive strengths. Added API to get the pingroup info based on dev id mapping. Bug 1157930 Change-Id: Idd4151177bc1c91b18bdb8ab2543cc2055dbb96c Signed-off-by: Pavan Kunapuli <pkunapuli@nvidia.com> Reviewed-on: http://git-master/r/159841 Reviewed-by: Simone Willett <swillett@nvidia.com> Tested-by: Simone Willett <swillett@nvidia.com>
Diffstat (limited to 'arch/arm/mach-tegra/pinmux.c')
-rw-r--r--arch/arm/mach-tegra/pinmux.c26
1 files changed, 24 insertions, 2 deletions
diff --git a/arch/arm/mach-tegra/pinmux.c b/arch/arm/mach-tegra/pinmux.c
index de50375f0383..6756b9d05db2 100644
--- a/arch/arm/mach-tegra/pinmux.c
+++ b/arch/arm/mach-tegra/pinmux.c
@@ -666,7 +666,7 @@ static int tegra_drive_pinmux_set_drive(int pg, enum tegra_drive drive)
return 0;
}
-static int tegra_drive_pinmux_set_pull_down(int pg,
+int tegra_drive_pinmux_set_pull_down(int pg,
enum tegra_pull_strength pull_down)
{
unsigned long flags;
@@ -691,7 +691,7 @@ static int tegra_drive_pinmux_set_pull_down(int pg,
return 0;
}
-static int tegra_drive_pinmux_set_pull_up(int pg,
+int tegra_drive_pinmux_set_pull_up(int pg,
enum tegra_pull_strength pull_up)
{
unsigned long flags;
@@ -868,6 +868,28 @@ void tegra_drive_pinmux_config_table(struct tegra_drive_pingroup_config *config,
config[i].drive_type);
}
+int tegra_drive_get_pingroup(struct device *dev)
+{
+ unsigned long flags;
+ int pg = -1;
+ const char *dev_id;
+
+ if (!dev)
+ return -EINVAL;
+
+ spin_lock_irqsave(&mux_lock, flags);
+
+ dev_id = dev_name(dev);
+ for (pg = 0; pg < drive_max; pg++)
+ if (drive_pingroups[pg].dev_id &&
+ !(strcmp(drive_pingroups[pg].dev_id, dev_id)))
+ break;
+
+ spin_unlock_irqrestore(&mux_lock, flags);
+
+ return pg;
+}
+
void tegra_pinmux_set_safe_pinmux_table(const struct tegra_pingroup_config *config,
int len)
{