100 lines
2.7 KiB
Diff
100 lines
2.7 KiB
Diff
From 04a2710a7de7f20ceec7f30c9e56d01d20284b15 Mon Sep 17 00:00:00 2001
|
|
From: Ben Hutchings <ben@decadent.org.uk>
|
|
Date: Sun, 1 Nov 2009 02:12:10 +0000
|
|
Subject: [PATCH 20/24] V4L/DVB: lgs8gxx: remove firmware for lgs8g75
|
|
|
|
The recently added support for lgs8g75 included some 8051 machine code
|
|
without accompanying source code. Replace this with use of the
|
|
firmware loader.
|
|
|
|
Compile-tested only.
|
|
---
|
|
drivers/media/dvb/frontends/Kconfig | 1 +
|
|
drivers/media/dvb/frontends/lgs8gxx.c | 23 ++++++++++-------------
|
|
2 files changed, 11 insertions(+), 13 deletions(-)
|
|
|
|
diff --git a/drivers/media/dvb/frontends/Kconfig b/drivers/media/dvb/frontends/Kconfig
|
|
index d7c4837..26b00ab 100644
|
|
--- a/drivers/media/dvb/frontends/Kconfig
|
|
+++ b/drivers/media/dvb/frontends/Kconfig
|
|
@@ -553,6 +553,7 @@ config DVB_LGS8GL5
|
|
config DVB_LGS8GXX
|
|
tristate "Legend Silicon LGS8913/LGS8GL5/LGS8GXX DMB-TH demodulator"
|
|
depends on DVB_CORE && I2C
|
|
+ select FW_LOADER
|
|
default m if DVB_FE_CUSTOMISE
|
|
help
|
|
A DMB-TH tuner module. Say Y when you want to support this frontend.
|
|
diff --git a/drivers/media/dvb/frontends/lgs8gxx.c b/drivers/media/dvb/frontends/lgs8gxx.c
|
|
index ba74df0..1bfcf85 100644
|
|
--- a/drivers/media/dvb/frontends/lgs8gxx.c
|
|
+++ b/drivers/media/dvb/frontends/lgs8gxx.c
|
|
@@ -24,6 +24,7 @@
|
|
*/
|
|
|
|
#include <asm/div64.h>
|
|
+#include <linux/firmware.h>
|
|
|
|
#include "dvb_frontend.h"
|
|
|
|
@@ -589,12 +590,16 @@ static int lgs8913_init(struct lgs8gxx_state *priv)
|
|
return 0;
|
|
}
|
|
|
|
-#ifdef CONFIG_BROKEN
|
|
static int lgs8g75_init_data(struct lgs8gxx_state *priv)
|
|
{
|
|
- const u8 *p = lgs8g75_initdat;
|
|
+ const struct firmware *fw;
|
|
+ int rc;
|
|
int i;
|
|
|
|
+ rc = request_firmware(&fw, "lgs8g75.fw", &priv->i2c->dev);
|
|
+ if (rc)
|
|
+ return rc;
|
|
+
|
|
lgs8gxx_write_reg(priv, 0xC6, 0x40);
|
|
|
|
lgs8gxx_write_reg(priv, 0x3D, 0x04);
|
|
@@ -605,19 +610,18 @@ static int lgs8g75_init_data(struct lgs8gxx_state *priv)
|
|
lgs8gxx_write_reg(priv, 0x3B, 0x00);
|
|
lgs8gxx_write_reg(priv, 0x38, 0x00);
|
|
|
|
- for (i = 0; i < sizeof(lgs8g75_initdat); i++) {
|
|
+ for (i = 0; i < fw->size; i++) {
|
|
lgs8gxx_write_reg(priv, 0x38, 0x00);
|
|
lgs8gxx_write_reg(priv, 0x3A, (u8)(i&0xff));
|
|
lgs8gxx_write_reg(priv, 0x3B, (u8)(i>>8));
|
|
- lgs8gxx_write_reg(priv, 0x3C, *p);
|
|
- p++;
|
|
+ lgs8gxx_write_reg(priv, 0x3C, fw->data[i]);
|
|
}
|
|
|
|
lgs8gxx_write_reg(priv, 0x38, 0x00);
|
|
|
|
+ release_firmware(fw);
|
|
return 0;
|
|
}
|
|
-#endif
|
|
|
|
static int lgs8gxx_init(struct dvb_frontend *fe)
|
|
{
|
|
@@ -1055,14 +1059,7 @@ struct dvb_frontend *lgs8gxx_attach(const struct lgs8gxx_config *config,
|
|
priv->frontend.demodulator_priv = priv;
|
|
|
|
if (config->prod == LGS8GXX_PROD_LGS8G75)
|
|
-#ifdef CONFIG_BROKEN
|
|
lgs8g75_init_data(priv);
|
|
-#else
|
|
- {
|
|
- dprintk("lgs8g75 firmware not available\n");
|
|
- goto error_out;
|
|
- }
|
|
-#endif
|
|
|
|
return &priv->frontend;
|
|
|
|
--
|
|
1.6.5.2
|
|
|