]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
ARM: tegra: bbc: support latency parameter
authorNeil Patel <neilp@nvidia.com>
Fri, 8 Mar 2013 04:56:56 +0000 (23:56 -0500)
committerDan Willemsen <dwillemsen@nvidia.com>
Sat, 14 Sep 2013 20:02:48 +0000 (13:02 -0700)
This change adds support for setting the latency arg for the
isomgr interface through sysfs.

Bug 1177400

Change-Id: If4fec1847183efce6ad1447f273604bcdf88f825
Signed-off-by: Neil Patel <neilp@nvidia.com>
Reviewed-on: http://git-master/r/207429
Reviewed-by: Stephane Dion <sdion@nvidia.com>
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Steve Lin <stlin@nvidia.com>
arch/arm/mach-tegra/tegra_bbc_proxy.c

index d6d1afddf37ca3a3f11f54c24f89bc86cde3bcc0..83a2b3cb971e2c5d22d27c0d7d6181e7fb67238e 100644 (file)
@@ -281,14 +281,36 @@ static ssize_t iso_reserve_store(struct device *dev,
                struct device_attribute *attr, const char *buf, size_t size)
 {
        unsigned int bw;
+       unsigned int ult = 4;
+       char buff[50];
+       char *val, *s;
        int ret;
        struct tegra_bbc_proxy *bbc = dev_get_drvdata(dev);
 
-       sscanf(buf, "%u", &bw);
+       strlcpy(buff, buf, sizeof(buff));
+       s = strim(buff);
+
+       /* first param is bw */
+       val = strsep(&s, ",");
+       ret = kstrtouint(val, 10, &bw);
+       if (ret) {
+               pr_err("invalid bw setting\n");
+               return -EINVAL;
+       }
+
+       /* second param is latency */
+       if (s) {
+               ret = kstrtouint(s, 10, &ult);
+               if (ret) {
+                       pr_err("invalid latency setting\n");
+                       return -EINVAL;
+               }
+       }
+
        if (bw > MAX_ISO_BW_REQ)
                return -EINVAL;
 
-       ret = tegra_isomgr_reserve(bbc->isomgr_handle, bw, 4);
+       ret = tegra_isomgr_reserve(bbc->isomgr_handle, bw, ult);
        if (!ret)
                dev_err(dev, "can't reserve iso bw\n");
 
@@ -314,12 +336,36 @@ static ssize_t iso_res_realize_store(struct device *dev,
 {
 
        unsigned int bw;
+       unsigned int ult = 4;
+       char buff[50];
+       char *val, *s;
        int ret;
        struct tegra_bbc_proxy *bbc = dev_get_drvdata(dev);
 
-       sscanf(buf, "%u", &bw);
+       strlcpy(buff, buf, sizeof(buff));
+       s = strim(buff);
 
-       ret = tegra_isomgr_reserve(bbc->isomgr_handle, bw, 4);
+       /* first param is bw */
+       val = strsep(&s, ",");
+       ret = kstrtouint(val, 10, &bw);
+       if (ret) {
+               pr_err("invalid bw setting\n");
+               return -EINVAL;
+       }
+
+       /* second param is latency */
+       if (s) {
+               ret = kstrtouint(s, 10, &ult);
+               if (ret) {
+                       pr_err("invalid latency setting\n");
+                       return -EINVAL;
+               }
+       }
+
+       if (bw > MAX_ISO_BW_REQ)
+               return -EINVAL;
+
+       ret = tegra_isomgr_reserve(bbc->isomgr_handle, bw, ult);
        if (!ret) {
                dev_err(dev, "can't reserve iso bw\n");
                return size;
@@ -329,11 +375,10 @@ static ssize_t iso_res_realize_store(struct device *dev,
 
        if (!ret) {
                dev_err(dev, "can't realize iso bw\n");
-       return size;
+               return size;
        }
 
 /* TODO: set LA*/
-
        return size;
 }