* [PATCH 33/37] dvb: determine tuner write method based on nxt chip
@ 2005-11-01 8:16 Michael Krufky
0 siblings, 0 replies; only message in thread
From: Michael Krufky @ 2005-11-01 8:16 UTC (permalink / raw)
To: Andrew Morton; +Cc: linux-kernel, linux-dvb-maintainer
[-- Attachment #1: Type: text/plain, Size: 2 bytes --]
[-- Attachment #2: 2410.patch --]
[-- Type: text/x-patch, Size: 3487 bytes --]
- Add support for AVerTVHD MCE a180.
- Instead of determining how to write to the tuner based on which NIM
is being used, make this determination based on whether the chip is a
NXT2002 or NXT2004.
- If NXT2004, write directly to tuner. If NXT2002, write through NXT chip.
Signed-off-by: Michael Krufky <mkrufky@m1k.net>
drivers/media/dvb/frontends/nxt200x.c | 92 ++++++++++++++++++----------------
1 file changed, 49 insertions(+), 43 deletions(-)
--- linux-2.6.14-git3.orig/drivers/media/dvb/frontends/nxt200x.c
+++ linux-2.6.14-git3/drivers/media/dvb/frontends/nxt200x.c
@@ -342,50 +342,56 @@
dprintk("Tuner Bytes: %02X %02X %02X %02X\n", data[0], data[1], data[2], data[3]);
- /* if pll is a Philips TUV1236D then write directly to tuner */
- if (strcmp(state->config->pll_desc->name, "Philips TUV1236D") == 0) {
- if (i2c_writebytes(state, state->config->pll_address, data, 4))
- printk(KERN_WARNING "nxt200x: error writing to tuner\n");
- /* wait until we have a lock */
- while (count < 20) {
- i2c_readbytes(state, state->config->pll_address, &buf, 1);
- if (buf & 0x40)
- return 0;
- msleep(100);
- count++;
- }
- printk("nxt200x: timeout waiting for tuner lock\n");
- return 0;
- } else {
- /* set the i2c transfer speed to the tuner */
- buf = 0x03;
- nxt200x_writebytes(state, 0x20, &buf, 1);
-
- /* setup to transfer 4 bytes via i2c */
- buf = 0x04;
- nxt200x_writebytes(state, 0x34, &buf, 1);
-
- /* write actual tuner bytes */
- nxt200x_writebytes(state, 0x36, data, 4);
-
- /* set tuner i2c address */
- buf = state->config->pll_address;
- nxt200x_writebytes(state, 0x35, &buf, 1);
-
- /* write UC Opmode to begin transfer */
- buf = 0x80;
- nxt200x_writebytes(state, 0x21, &buf, 1);
-
- while (count < 20) {
- nxt200x_readbytes(state, 0x21, &buf, 1);
- if ((buf & 0x80)== 0x00)
- return 0;
- msleep(100);
- count++;
- }
- printk("nxt200x: timeout error writing tuner\n");
- return 0;
+ /* if NXT2004, write directly to tuner. if NXT2002, write through NXT chip.
+ * direct write is required for Philips TUV1236D and ALPS TDHU2 */
+ switch (state->demod_chip) {
+ case NXT2004:
+ if (i2c_writebytes(state, state->config->pll_address, data, 4))
+ printk(KERN_WARNING "nxt200x: error writing to tuner\n");
+ /* wait until we have a lock */
+ while (count < 20) {
+ i2c_readbytes(state, state->config->pll_address, &buf, 1);
+ if (buf & 0x40)
+ return 0;
+ msleep(100);
+ count++;
+ }
+ printk("nxt2004: timeout waiting for tuner lock\n");
+ break;
+ case NXT2002:
+ /* set the i2c transfer speed to the tuner */
+ buf = 0x03;
+ nxt200x_writebytes(state, 0x20, &buf, 1);
+
+ /* setup to transfer 4 bytes via i2c */
+ buf = 0x04;
+ nxt200x_writebytes(state, 0x34, &buf, 1);
+
+ /* write actual tuner bytes */
+ nxt200x_writebytes(state, 0x36, data, 4);
+
+ /* set tuner i2c address */
+ buf = state->config->pll_address;
+ nxt200x_writebytes(state, 0x35, &buf, 1);
+
+ /* write UC Opmode to begin transfer */
+ buf = 0x80;
+ nxt200x_writebytes(state, 0x21, &buf, 1);
+
+ while (count < 20) {
+ nxt200x_readbytes(state, 0x21, &buf, 1);
+ if ((buf & 0x80)== 0x00)
+ return 0;
+ msleep(100);
+ count++;
+ }
+ printk("nxt2002: timeout error writing tuner\n");
+ break;
+ default:
+ return -EINVAL;
+ break;
}
+ return 0;
}
static void nxt200x_agc_reset(struct nxt200x_state* state)
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2005-11-01 8:17 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-11-01 8:16 [PATCH 33/37] dvb: determine tuner write method based on nxt chip Michael Krufky
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.