summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShuah Khan <shuah.kh@samsung.com>2014-08-14 05:09:24 +0400
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>2014-09-23 23:13:49 +0400
commit27ccd694bb3d71d1aa8342276dd0aca872f99ec9 (patch)
tree5ab1825300dce796e580a15174b8ad7da8903d13
parent5264a522a597032c009f9143686ebf0fa4e244fb (diff)
downloadlinux-27ccd694bb3d71d1aa8342276dd0aca872f99ec9.tar.xz
[media] media: tuner xc5000 - try to avoid firmware load in resume path
xc5000 doesn't load firmware at attach time instead loads it when it needs to set and change configuration from its init, frequency, digital and analog mode set interffaces. As a result, when system is suspended before firmware is loaded, firmware load can be avoided during resume. Loading formware in this scenario results in slowpath warnings during resume as it won't be in the suspend firmware cache. Signed-off-by: Shuah Khan <shuah.kh@samsung.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
-rw-r--r--drivers/media/tuners/xc5000.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/drivers/media/tuners/xc5000.c b/drivers/media/tuners/xc5000.c
index b72ec64b758c..e44c8aba6074 100644
--- a/drivers/media/tuners/xc5000.c
+++ b/drivers/media/tuners/xc5000.c
@@ -1293,6 +1293,20 @@ static int xc5000_suspend(struct dvb_frontend *fe)
return 0;
}
+static int xc5000_resume(struct dvb_frontend *fe)
+{
+ struct xc5000_priv *priv = fe->tuner_priv;
+
+ dprintk(1, "%s()\n", __func__);
+
+ /* suspended before firmware is loaded.
+ Avoid firmware load in resume path. */
+ if (!priv->firmware)
+ return 0;
+
+ return xc5000_set_params(fe);
+}
+
static int xc5000_init(struct dvb_frontend *fe)
{
struct xc5000_priv *priv = fe->tuner_priv;
@@ -1360,7 +1374,7 @@ static const struct dvb_tuner_ops xc5000_tuner_ops = {
.init = xc5000_init,
.sleep = xc5000_sleep,
.suspend = xc5000_suspend,
- .resume = xc5000_set_params,
+ .resume = xc5000_resume,
.set_config = xc5000_set_config,
.set_params = xc5000_set_digital_params,