From: Leo Song <liangs-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org>
To: Ben Dooks <ben-linux-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org>,
Wolfram Sang <w.sang-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
Cc: Leo Song <liangs-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org>,
Chao Xie <cxie4-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org>,
linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
"Jett.Zhou" <jtzhou-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org>
Subject: [PATCH 09/11] i2c: pxa: add qos as constraint for cpu-idle
Date: Thu, 8 Nov 2012 22:18:02 +0800 [thread overview]
Message-ID: <1352384284-15660-9-git-send-email-liangs@marvell.com> (raw)
In-Reply-To: <1352384284-15660-1-git-send-email-liangs-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org>
From: "Jett.Zhou" <jtzhou-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org>
Add qos as constraint for cpu-idle, which is standard way, then
sysfs could get accurae result.
Change-Id: I4165e01ca2c30f8422b4b4850497c70233d741f8
Signed-off-by: Jett.Zhou <jtzhou-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org>
diff --git a/drivers/i2c/busses/i2c-pxa.c b/drivers/i2c/busses/i2c-pxa.c
index 5893110..f3811d5 100644
--- a/drivers/i2c/busses/i2c-pxa.c
+++ b/drivers/i2c/busses/i2c-pxa.c
@@ -38,6 +38,7 @@
#include <linux/slab.h>
#include <linux/io.h>
#include <linux/i2c/pxa-i2c.h>
+#include <plat/pm.h>
#include <asm/irq.h>
@@ -173,6 +174,7 @@ struct pxa_i2c {
unsigned int fast_mode :1;
unsigned int ilcr;
unsigned int iwcr;
+ struct pm_qos_request qos_idle;
};
#define _IBMR(i2c) ((i2c)->reg_ibmr)
@@ -729,7 +731,7 @@ static int i2c_pxa_pio_set_master(struct pxa_i2c *i2c)
static int i2c_pxa_do_pio_xfer(struct pxa_i2c *i2c,
struct i2c_msg *msg, int num)
{
- unsigned long timeout = 500000; /* 5 seconds */
+ unsigned long timeout = 100000; /* 1 seconds */
int ret = 0;
ret = i2c_pxa_pio_set_master(i2c);
@@ -742,6 +744,8 @@ static int i2c_pxa_do_pio_xfer(struct pxa_i2c *i2c,
i2c->msg_ptr = 0;
i2c->irqlogidx = 0;
+ pm_qos_update_request(&i2c->qos_idle, PM_QOS_CONSTRAINT);
+
i2c_pxa_start_message(i2c);
while (i2c->msg_num > 0 && --timeout) {
@@ -751,6 +755,7 @@ static int i2c_pxa_do_pio_xfer(struct pxa_i2c *i2c,
i2c_pxa_stop_message(i2c);
+ pm_qos_update_request(&i2c->qos_idle, PM_QOS_DEFAULT_VALUE);
/*
* We place the return code in i2c->msg_idx.
*/
@@ -760,6 +765,9 @@ out:
if (timeout == 0)
i2c_pxa_scream_blue_murder(i2c, "timeout");
+ if (ret < 0)
+ i2c_pxa_reset(i2c);
+
return ret;
}
@@ -797,6 +805,8 @@ static int i2c_pxa_do_xfer(struct pxa_i2c *i2c, struct i2c_msg *msg, int num)
i2c->msg_ptr = 0;
i2c->irqlogidx = 0;
+ pm_qos_update_request(&i2c->qos_idle, PM_QOS_CONSTRAINT);
+
i2c_pxa_start_message(i2c);
spin_unlock_irq(&i2c->lock);
@@ -804,9 +814,11 @@ static int i2c_pxa_do_xfer(struct pxa_i2c *i2c, struct i2c_msg *msg, int num)
/*
* The rest of the processing occurs in the interrupt handler.
*/
- timeout = wait_event_timeout(i2c->wait, i2c->msg_num == 0, HZ * 5);
+ timeout = wait_event_timeout(i2c->wait, i2c->msg_num == 0, HZ * 1);
i2c_pxa_stop_message(i2c);
+ pm_qos_update_request(&i2c->qos_idle, PM_QOS_DEFAULT_VALUE);
+
/*
* We place the return code in i2c->msg_idx.
*/
@@ -1146,6 +1158,8 @@ static int i2c_pxa_probe(struct platform_device *dev)
struct resource *res = NULL;
int ret, irq;
+ int pm_qos_class = PM_QOS_CPUIDLE_KEEP_DDR;
+
i2c = kzalloc(sizeof(struct pxa_i2c), GFP_KERNEL);
if (!i2c) {
ret = -ENOMEM;
@@ -1171,7 +1185,10 @@ static int i2c_pxa_probe(struct platform_device *dev)
}
i2c->adap.owner = THIS_MODULE;
- i2c->adap.retries = 5;
+ i2c->adap.retries = 3;
+
+ pm_qos_add_request(&i2c->qos_idle, pm_qos_class,
+ PM_QOS_DEFAULT_VALUE);
spin_lock_init(&i2c->lock);
init_waitqueue_head(&i2c->wait);
@@ -1274,6 +1291,7 @@ eclk:
kfree(i2c);
emalloc:
release_mem_region(res->start, resource_size(res));
+ pm_qos_remove_request(&i2c->qos_idle);
return ret;
}
@@ -1282,6 +1300,7 @@ static int __exit i2c_pxa_remove(struct platform_device *dev)
struct pxa_i2c *i2c = platform_get_drvdata(dev);
platform_set_drvdata(dev, NULL);
+ pm_qos_remove_request(&i2c->qos_idle);
i2c_del_adapter(&i2c->adap);
if (!i2c->use_pio)
--
1.7.5.4
next prev parent reply other threads:[~2012-11-08 14:18 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-08 14:17 [PATCH 01/11] i2c: pxa: support hardware lock Leo Song
[not found] ` <1352384284-15660-1-git-send-email-liangs-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org>
2012-11-08 14:17 ` [PATCH 02/11] i2c: pxa: support pxa910 in id table Leo Song
2012-11-08 14:17 ` [PATCH 03/11] i2c: pxa: add more error handling for i2c controller Leo Song
2012-11-08 14:17 ` [PATCH 04/11] i2c: pxa: fix irq unbalanced warning Leo Song
2012-11-08 14:17 ` [PATCH 05/11] i2c: pxa: add bus reset for platform data; Leo Song
2012-11-08 14:17 ` [PATCH 06/11] i2c: pxa: Keep i2c clock enabled when system suspends/resumes Leo Song
2012-11-08 14:18 ` [PATCH 07/11] i2c: pxa: keep i2c irq on in suspend Leo Song
2012-11-08 14:18 ` [PATCH 08/11] i2c: pxa: bugfix the slave addr in the transaction Leo Song
2012-11-08 14:18 ` Leo Song [this message]
2012-11-08 14:18 ` [PATCH 10/11] i2c: pxa: modify the parameters of i2c_bus_reset() Leo Song
2012-11-08 14:18 ` [PATCH 11/11] i2c: pxa: no need slave addr for i2c master mode reset Leo Song
[not found] ` <1352384284-15660-11-git-send-email-liangs-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org>
2012-11-08 14:25 ` Leo Song
[not found] ` <78895A20B3CF7D49B5589B604D36692B1B59F88BFD-r8ILAu4/owuq90oVIqnETxL4W9x8LtSr@public.gmane.org>
2012-11-16 13:55 ` Wolfram Sang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1352384284-15660-9-git-send-email-liangs@marvell.com \
--to=liangs-eyqppykdwxrbdgjk7y7tuq@public.gmane.org \
--cc=ben-linux-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org \
--cc=cxie4-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org \
--cc=jtzhou-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org \
--cc=linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=w.sang-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).