[PATCH] Add support for the FE_GET_FRONTEND ioctl to or51132

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Pretty much just that.  I was able to figure out how to read the current
modulation without the datasheet, so that information comes from the hardware.
frequency comes from the driver's state, rather than reading the tuner.  The
inversion setting is ignored by the driver, no ATSC frontends use it in fact. I
just return auto inversion.
# HG changeset patch
# User Trent Piepho <xyzzy@xxxxxxxxxxxxx>
# Node ID 1226b4954757859de0d25e0d408f6ab02a913712
# Parent  c42c55c1095ae910401c73147c4dbf3f0e3a5551
Add support for FE_GET_FRONTEND to or51132 frontend

From: Trent Piepho <xyzzy@xxxxxxxxxxxxx>

Adds the FE_GET_FRONTEND ioctl to the or51132 frontend.  Current modulation is
read from the hardware, while frequency is taken from the driver's state.

Signed-off-by: Trent Piepho <xyzzy@xxxxxxxxxxxxx>

diff -r c42c55c1095a -r 1226b4954757 linux/drivers/media/dvb/frontends/or51132.c
--- a/linux/drivers/media/dvb/frontends/or51132.c	Wed Apr  5 18:48:44 2006 -0700
+++ b/linux/drivers/media/dvb/frontends/or51132.c	Wed Apr  5 19:28:20 2006 -0700
@@ -400,6 +400,44 @@ static int or51132_set_parameters(struct
 	return 0;
 }
 
+static int or51132_get_parameters(struct dvb_frontend* fe,
+				  struct dvb_frontend_parameters *param)
+{
+	struct or51132_state* state = fe->demodulator_priv;
+	u8 buf[2];
+
+	/* Receiver Status */
+	buf[0]=0x04;
+	buf[1]=0x00;
+	msleep(30); /* 30ms */
+	if (i2c_writebytes(state,state->config->demod_address,buf,2)) {
+		printk(KERN_WARNING "or51132: get_parameters write error\n");
+		return -EREMOTEIO;
+	}
+	msleep(30); /* 30ms */
+	if (i2c_readbytes(state,state->config->demod_address,buf,2)) {
+		printk(KERN_WARNING "or51132: get_parameters read error\n");
+		return -EREMOTEIO;
+	}
+	switch(buf[0]) {
+		case 0x06: param->u.vsb.modulation = VSB_8; break;
+		case 0x43: param->u.vsb.modulation = QAM_64; break;
+		case 0x45: param->u.vsb.modulation = QAM_256; break;
+		default:
+			printk(KERN_WARNING "or51132: unknown status 0x%02x\n",
+			       buf[0]);
+			return -EREMOTEIO;
+	}
+
+	/* FIXME: Read frequency from frontend, take AFC into account */
+	param->frequency = state->current_frequency;
+
+	/* FIXME: How to read inversion setting? Receiver 6 register? */
+	param->inversion = INVERSION_AUTO;
+
+	return 0;
+}
+
 static int or51132_read_status(struct dvb_frontend* fe, fe_status_t* status)
 {
 	struct or51132_state* state = fe->demodulator_priv;
@@ -618,6 +656,7 @@ static struct dvb_frontend_ops or51132_o
 	.sleep = or51132_sleep,
 
 	.set_frontend = or51132_set_parameters,
+	.get_frontend = or51132_get_parameters,
 	.get_tune_settings = or51132_get_tune_settings,
 
 	.read_status = or51132_read_status,
_______________________________________________

linux-dvb@xxxxxxxxxxx
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb

[Index of Archives]     [Linux Media]     [Video 4 Linux]     [Asterisk]     [Samba]     [Xorg]     [Xfree86]     [Linux USB]

  Powered by Linux