aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap2/smartreflex.c
diff options
context:
space:
mode:
authorThara Gopinath <thara@ti.com>2010-10-27 10:59:37 -0400
committerKevin Hilman <khilman@deeprootsystems.com>2010-12-22 17:31:42 -0500
commit077fceca3a5db69791d64723ffba1caad2f03a08 (patch)
treef81edc23062a8573fd744eb6d7c4b5d396501911 /arch/arm/mach-omap2/smartreflex.c
parentfbc319f67660ede23cc22f3af5df559693f8062e (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.c46
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
36struct omap_sr { 37struct 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