diff options
author | Thara Gopinath <thara@ti.com> | 2010-10-27 10:59:37 -0400 |
---|---|---|
committer | Kevin Hilman <khilman@deeprootsystems.com> | 2010-12-22 17:31:42 -0500 |
commit | 077fceca3a5db69791d64723ffba1caad2f03a08 (patch) | |
tree | f81edc23062a8573fd744eb6d7c4b5d396501911 /arch/arm/mach-omap2/smartreflex.c | |
parent | fbc319f67660ede23cc22f3af5df559693f8062e (diff) |
OMAP3: PM: Adding debug support to Voltage and Smartreflex drivers
This patch adds debug support to the voltage and smartreflex drivers.
This means a whole bunch of voltage processor and smartreflex
parameters are now visible through the pm debugfs.
The voltage parameters can be viewed at
/debug/voltage/vdd_<x>/<parameter>
and the smartreflex parameters can be viewed at
/debug/voltage/vdd_<x>/smartreflex/<parameter>
Also smartreflex n-target values are now exposed out at
/debug/voltage/vdd_<x>/smartreflex/nvalue/<voltage>
This is a read-write interface which means user has the
flexibility to change the n-target values for any opp.
Signed-off-by: Thara Gopinath <thara@ti.com>
Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
Diffstat (limited to 'arch/arm/mach-omap2/smartreflex.c')
-rw-r--r-- | arch/arm/mach-omap2/smartreflex.c | 46 |
1 files changed, 44 insertions, 2 deletions
diff --git a/arch/arm/mach-omap2/smartreflex.c b/arch/arm/mach-omap2/smartreflex.c index eee23d0f50de..52a05b336c08 100644 --- a/arch/arm/mach-omap2/smartreflex.c +++ b/arch/arm/mach-omap2/smartreflex.c | |||
@@ -31,6 +31,7 @@ | |||
31 | #include "pm.h" | 31 | #include "pm.h" |
32 | 32 | ||
33 | #define SMARTREFLEX_NAME_LEN 16 | 33 | #define SMARTREFLEX_NAME_LEN 16 |
34 | #define NVALUE_NAME_LEN 40 | ||
34 | #define SR_DISABLE_TIMEOUT 200 | 35 | #define SR_DISABLE_TIMEOUT 200 |
35 | 36 | ||
36 | struct omap_sr { | 37 | struct omap_sr { |
@@ -817,8 +818,9 @@ static int __init omap_sr_probe(struct platform_device *pdev) | |||
817 | struct omap_sr *sr_info = kzalloc(sizeof(struct omap_sr), GFP_KERNEL); | 818 | struct omap_sr *sr_info = kzalloc(sizeof(struct omap_sr), GFP_KERNEL); |
818 | struct omap_sr_data *pdata = pdev->dev.platform_data; | 819 | struct omap_sr_data *pdata = pdev->dev.platform_data; |
819 | struct resource *mem, *irq; | 820 | struct resource *mem, *irq; |
820 | struct dentry *vdd_dbg_dir, *dbg_dir; | 821 | struct dentry *vdd_dbg_dir, *dbg_dir, *nvalue_dir; |
821 | int ret = 0; | 822 | struct omap_volt_data *volt_data; |
823 | int i, ret = 0; | ||
822 | 824 | ||
823 | if (!sr_info) { | 825 | if (!sr_info) { |
824 | dev_err(&pdev->dev, "%s: unable to allocate sr_info\n", | 826 | dev_err(&pdev->dev, "%s: unable to allocate sr_info\n", |
@@ -897,6 +899,46 @@ static int __init omap_sr_probe(struct platform_device *pdev) | |||
897 | 899 | ||
898 | (void) debugfs_create_file("autocomp", S_IRUGO | S_IWUGO, dbg_dir, | 900 | (void) debugfs_create_file("autocomp", S_IRUGO | S_IWUGO, dbg_dir, |
899 | (void *)sr_info, &pm_sr_fops); | 901 | (void *)sr_info, &pm_sr_fops); |
902 | (void) debugfs_create_x32("errweight", S_IRUGO, dbg_dir, | ||
903 | &sr_info->err_weight); | ||
904 | (void) debugfs_create_x32("errmaxlimit", S_IRUGO, dbg_dir, | ||
905 | &sr_info->err_maxlimit); | ||
906 | (void) debugfs_create_x32("errminlimit", S_IRUGO, dbg_dir, | ||
907 | &sr_info->err_minlimit); | ||
908 | |||
909 | nvalue_dir = debugfs_create_dir("nvalue", dbg_dir); | ||
910 | if (IS_ERR(nvalue_dir)) { | ||
911 | dev_err(&pdev->dev, "%s: Unable to create debugfs directory" | ||
912 | "for n-values\n", __func__); | ||
913 | return PTR_ERR(nvalue_dir); | ||
914 | } | ||
915 | |||
916 | omap_voltage_get_volttable(sr_info->voltdm, &volt_data); | ||
917 | if (!volt_data) { | ||
918 | dev_warn(&pdev->dev, "%s: No Voltage table for the" | ||
919 | " corresponding vdd vdd_%s. Cannot create debugfs" | ||
920 | "entries for n-values\n", | ||
921 | __func__, sr_info->voltdm->name); | ||
922 | return -ENODATA; | ||
923 | } | ||
924 | |||
925 | for (i = 0; i < sr_info->nvalue_count; i++) { | ||
926 | char *name; | ||
927 | char volt_name[32]; | ||
928 | |||
929 | name = kzalloc(NVALUE_NAME_LEN + 1, GFP_KERNEL); | ||
930 | if (!name) { | ||
931 | dev_err(&pdev->dev, "%s: Unable to allocate memory" | ||
932 | " for n-value directory name\n", __func__); | ||
933 | return -ENOMEM; | ||
934 | } | ||
935 | |||
936 | strcpy(name, "volt_"); | ||
937 | sprintf(volt_name, "%d", volt_data[i].volt_nominal); | ||
938 | strcat(name, volt_name); | ||
939 | (void) debugfs_create_x32(name, S_IRUGO | S_IWUGO, nvalue_dir, | ||
940 | &(sr_info->nvalue_table[i].nvalue)); | ||
941 | } | ||
900 | 942 | ||
901 | return ret; | 943 | return ret; |
902 | 944 | ||