From patchwork Thu Jul 25 11:32:08 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: sunshaojie X-Patchwork-Id: 18572 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-qe0-f70.google.com (mail-qe0-f70.google.com [209.85.128.70]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 64B9825E19 for ; Thu, 25 Jul 2013 11:32:21 +0000 (UTC) Received: by mail-qe0-f70.google.com with SMTP id 2sf555273qea.1 for ; Thu, 25 Jul 2013 04:32:20 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:x-beenthere:x-forwarded-to:x-forwarded-for :delivered-to:from:to:cc:subject:date:message-id:x-mailer :x-gm-message-state:x-original-sender :x-original-authentication-results:precedence:mailing-list:list-id :x-google-group-id:list-post:list-help:list-archive:list-unsubscribe; bh=lfjr9L6RrsoUQJ4plhzgSiiHcX+N11ArrmS+B34TjG8=; b=JySBCueppXgXwcoQhf+bqOpcu2f6s/YXWKxIxTsa2QNWNt0vyQ/ihXx6ZRAS1Ye6hw 7qlq/ZQHqUSU+3x7/vQtzwkmEi6KOOYnGx5bpUPN4lg0qSx9Z3KvbyHnWPFxWGYDWzUT KRVfVY/L+PTZvYfgQsvNjt3rRJW6LDdmMBMLmsR793xa2RjG27BRyEQNH4Udxd4AVYjV pO27vtjSIIvOz7PUFxRwA1mzqxThFBjXASNeNkpxn484jTpuhF4ZfJj8kOAfxNlkP80V nx9KhniRy8M62iRcrPTY6qebAQjcCR5GdaCnzc0PsqgXLKyLDqXOmUP4Ux2PKgISADZI L1Mg== X-Received: by 10.236.41.103 with SMTP id g67mr22543599yhb.45.1374751940617; Thu, 25 Jul 2013 04:32:20 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: patchwork-forward@linaro.org Received: by 10.49.25.1 with SMTP id y1ls583878qef.87.gmail; Thu, 25 Jul 2013 04:32:20 -0700 (PDT) X-Received: by 10.58.127.202 with SMTP id ni10mr16996432veb.27.1374751940522; Thu, 25 Jul 2013 04:32:20 -0700 (PDT) Received: from mail-vb0-f48.google.com (mail-vb0-f48.google.com [209.85.212.48]) by mx.google.com with ESMTPS id to9si12204249vdc.123.2013.07.25.04.32.20 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 25 Jul 2013 04:32:20 -0700 (PDT) Received-SPF: neutral (google.com: 209.85.212.48 is neither permitted nor denied by best guess record for domain of patch+caf_=patchwork-forward=linaro.org@linaro.org) client-ip=209.85.212.48; Received: by mail-vb0-f48.google.com with SMTP id w15so384819vbf.35 for ; Thu, 25 Jul 2013 04:32:20 -0700 (PDT) X-Received: by 10.52.165.71 with SMTP id yw7mr2290761vdb.82.1374751940409; Thu, 25 Jul 2013 04:32:20 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patches@linaro.org Received: by 10.58.165.8 with SMTP id yu8csp72728veb; Thu, 25 Jul 2013 04:32:19 -0700 (PDT) X-Received: by 10.66.141.232 with SMTP id rr8mr29975854pab.184.1374751939234; Thu, 25 Jul 2013 04:32:19 -0700 (PDT) Received: from mail-pb0-f53.google.com (mail-pb0-f53.google.com [209.85.160.53]) by mx.google.com with ESMTPS id yk3si3224086pac.99.2013.07.25.04.32.18 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 25 Jul 2013 04:32:19 -0700 (PDT) Received-SPF: neutral (google.com: 209.85.160.53 is neither permitted nor denied by best guess record for domain of shaojie.sun@linaro.org) client-ip=209.85.160.53; Received: by mail-pb0-f53.google.com with SMTP id xb12so641989pbc.26 for ; Thu, 25 Jul 2013 04:32:18 -0700 (PDT) X-Received: by 10.68.12.165 with SMTP id z5mr46922745pbb.172.1374751938340; Thu, 25 Jul 2013 04:32:18 -0700 (PDT) Received: from localhost.localdomain ([58.251.159.202]) by mx.google.com with ESMTPSA id yk10sm12104464pac.16.2013.07.25.04.32.15 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 25 Jul 2013 04:32:17 -0700 (PDT) From: Shaojie Sun To: sanjay.rawat@linaro.org Cc: private-pmwg@linaro.org, patches@linaro.org, sunshaojie@huawei.com, Shaojie Sun Subject: [PATCH] POWERDEBUG: Add modify gpio function in powerdebug tool. Date: Thu, 25 Jul 2013 19:32:08 +0800 Message-Id: <1374751928-23378-1-git-send-email-shaojie.sun@linaro.com> X-Mailer: git-send-email 1.7.9.5 X-Gm-Message-State: ALoCoQlPbrKX77+AwHdCzmz5tRKBDW6RVyig99ssWflzrPJItpwV5mblCApmIQKGALxsIlW4VZ4T X-Original-Sender: shaojie.sun@linaro.org X-Original-Authentication-Results: mx.google.com; spf=neutral (google.com: 209.85.212.48 is neither permitted nor denied by best guess record for domain of patch+caf_=patchwork-forward=linaro.org@linaro.org) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Precedence: list Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org List-ID: X-Google-Group-Id: 836684582541 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , For power consumption test, we can change gpio direction and value and check that power consumption is falled or not. use 'D' key to change gpio direction. And when gpio direction is "out", use 'V' key to change gpio value. Signed-off-by: Shaojie Sun --- display.c | 22 ++++++++++++++++++++++ display.h | 1 + gpio.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ utils.c | 36 ++++++++++++++++++++++++++++++++++++ utils.h | 2 ++ 5 files changed, 109 insertions(+) diff --git a/display.c b/display.c index 41a511d..748cc1b 100644 --- a/display.c +++ b/display.c @@ -164,6 +164,17 @@ static int display_select(void) return 0; } +static int display_change(int keyvalue) +{ + if (!(windata[current_win].nrdata)) + return 0; + + if (windata[current_win].ops && windata[current_win].ops->change) + return windata[current_win].ops->change(keyvalue); + + return 0; +} + static int display_next_panel(void) { size_t array_size = sizeof(windata) / sizeof(windata[0]); @@ -406,6 +417,17 @@ static int display_keystroke(int fd, void *data) display_select(); break; + case 'v': + case 'V': + case 'a': + case 'A': + case 'e': + case 'E': + case 'd': + case 'D': + display_change(toupper(keystroke)); + break; + case EOF: case 'q': case 'Q': diff --git a/display.h b/display.h index 6362a48..b28d26e 100644 --- a/display.h +++ b/display.h @@ -20,6 +20,7 @@ struct display_ops { int (*select)(void); int (*find)(const char *); int (*selectf)(void); + int (*change)(int keyvalue); }; extern int display_print_line(int window, int line, char *str, diff --git a/gpio.c b/gpio.c index 3ecc393..5ab7c2a 100644 --- a/gpio.c +++ b/gpio.c @@ -264,8 +264,56 @@ static int gpio_display(bool refresh) return gpio_print_info(gpio_tree); } +static int gpio_change(int keyvalue) +{ + struct tree *t = display_get_row_data(GPIO); + struct gpio_info *gpio = t->private; + int tmp; + char atmp[MAX_VALUE_BYTE]; + + if (!t || !gpio) + return -1; + + switch (keyvalue) { + case 'D': + if (strstr(gpio->direction, "in")) + strcpy(atmp, "out"); + else if (strstr(gpio->direction, "out")) + strcpy(atmp, "in"); + else + strcpy(atmp, gpio->direction); + if (!file_write_value(t->path, "direction", "%s", &atmp)) + strcpy(gpio->direction, atmp); + break; + + case 'V': + if (strstr(gpio->direction, "out")) { + tmp = !gpio->value; + if (!file_write_value(t->path, "value", "%d", &tmp)) + gpio->value = tmp; + } + break; + +/* It is not good choise to change gpio irq status from userspace. */ +/* + case 'A': + gpio->active_low = !gpio->active_low; + break; + + case 'E': + break; +*/ + + default: + return -1; + } + + return 0; +} + static struct display_ops gpio_ops = { .display = gpio_display, + .change = gpio_change, }; /* diff --git a/utils.c b/utils.c index e47c58e..5423c49 100644 --- a/utils.c +++ b/utils.c @@ -53,3 +53,39 @@ out_free: free(rpath); return ret; } + +/* + * This functions is a helper to write a specific file content and store + * the content inside a variable pointer passed as parameter, the format + * parameter gives the variable type to be write to the file. + * + * @path : directory path containing the file + * @name : name of the file to be read + * @format : the format of the format + * @value : a pointer to a variable to store the content of the file + * Returns 0 on success, -1 otherwise + */ +int file_write_value(const char *path, const char *name, + const char *format, void *value) +{ + FILE *file; + char *rpath; + int ret; + + ret = asprintf(&rpath, "%s/%s", path, name); + if (ret < 0) + return ret; + + file = fopen(rpath, "wr"); + if (!file) { + ret = -1; + goto out_free; + } + + ret = fprintf(file, format, value) < 0 ? -1 : 0; + + fclose(file); +out_free: + free(rpath); + return ret; +} diff --git a/utils.h b/utils.h index d4ac65a..73159b9 100644 --- a/utils.h +++ b/utils.h @@ -17,6 +17,8 @@ extern int file_read_value(const char *path, const char *name, const char *format, void *value); +extern int file_write_value(const char *path, const char *name, + const char *format, void *value); #endif