aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOlli Salonen <olli.salonen@iki.fi>2014-08-25 14:07:03 -0400
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>2014-09-21 15:42:38 -0400
commit4cbf6ed910c88d7f6c15304f9a5a3ed86290dc06 (patch)
tree74d5122fa566d328182db14ba3fcb656d85acfc9
parent0e38233d329e463a64146080c008d8044651bd3f (diff)
[media] si2157: avoid firmware loading if it has been loaded previously
Add a variable into state to keep track if firmware has been loaded or not. Skip firmware loading in case it is already loaded (resume from sleep). Signed-off-by: Olli Salonen <olli.salonen@iki.fi> Signed-off-by: Antti Palosaari <crope@iki.fi> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
-rw-r--r--drivers/media/tuners/si2157.c11
-rw-r--r--drivers/media/tuners/si2157_priv.h1
2 files changed, 10 insertions, 2 deletions
diff --git a/drivers/media/tuners/si2157.c b/drivers/media/tuners/si2157.c
index c84f7b8ee8d2..5901484011b9 100644
--- a/drivers/media/tuners/si2157.c
+++ b/drivers/media/tuners/si2157.c
@@ -89,7 +89,10 @@ static int si2157_init(struct dvb_frontend *fe)
89 89
90 dev_dbg(&s->client->dev, "\n"); 90 dev_dbg(&s->client->dev, "\n");
91 91
92 /* configure? */ 92 if (s->fw_loaded)
93 goto warm;
94
95 /* power up */
93 memcpy(cmd.args, "\xc0\x00\x0c\x00\x00\x01\x01\x01\x01\x01\x01\x02\x00\x00\x01", 15); 96 memcpy(cmd.args, "\xc0\x00\x0c\x00\x00\x01\x01\x01\x01\x01\x01\x02\x00\x00\x01", 15);
94 cmd.wlen = 15; 97 cmd.wlen = 15;
95 cmd.rlen = 1; 98 cmd.rlen = 1;
@@ -176,9 +179,12 @@ skip_fw_download:
176 if (ret) 179 if (ret)
177 goto err; 180 goto err;
178 181
179 s->active = true; 182 s->fw_loaded = true;
180 183
184warm:
185 s->active = true;
181 return 0; 186 return 0;
187
182err: 188err:
183 if (fw) 189 if (fw)
184 release_firmware(fw); 190 release_firmware(fw);
@@ -320,6 +326,7 @@ static int si2157_probe(struct i2c_client *client,
320 s->client = client; 326 s->client = client;
321 s->fe = cfg->fe; 327 s->fe = cfg->fe;
322 s->inversion = cfg->inversion; 328 s->inversion = cfg->inversion;
329 s->fw_loaded = false;
323 mutex_init(&s->i2c_mutex); 330 mutex_init(&s->i2c_mutex);
324 331
325 /* check if the tuner is there */ 332 /* check if the tuner is there */
diff --git a/drivers/media/tuners/si2157_priv.h b/drivers/media/tuners/si2157_priv.h
index 3ddab5e6b500..4080a57962f0 100644
--- a/drivers/media/tuners/si2157_priv.h
+++ b/drivers/media/tuners/si2157_priv.h
@@ -26,6 +26,7 @@ struct si2157 {
26 struct i2c_client *client; 26 struct i2c_client *client;
27 struct dvb_frontend *fe; 27 struct dvb_frontend *fe;
28 bool active; 28 bool active;
29 bool fw_loaded;
29 bool inversion; 30 bool inversion;
30}; 31};
31 32