[linux-dvb] Re: [video4linux-cvs] [hg:v4l-dvb] Add support for
Opera S1- DVB-USB
Michael Krufky
mkrufky at linuxtv.org
Mon Apr 23 23:22:45 CEST 2007
Marco Gittler wrote:
> here the new patch against main hg.
> -the tuner i2c addr now without define (as wanted).
> -now 7 bit addr are used (the power_ctrl fkt ist ok so, because this
> is a raw write)
> -the addr >> 1 , addr << 1 is ok so, i think beause the read write is
> now taken from the last bit.
> -now i have no datasheet for the device, all taken from usb-logs
>
> i hope i answered all asked questions.
>
> Signed-off-by: Marco Gittler <g.marco at freenet.de>
Looks good... Still some trivial issues that can be fixed after the
fact. See below for more comments. Meanwhile,
Mauro,
Please pull from:
http://linuxtv.org/hg/~mkrufky/opera
for Marco's patch:
- opera: use 7-bit i2c addresses
dvb-usb-ids.h | 2
opera1.c | 80 +++++++++++++++++++++++---------------
2 files changed, 50 insertions(+), 32 deletions(-)
Marco,
The only outstanding issues left that I see are whitespace-related
problems. The repository whitespace stripper made a few cleanups,
besides that, you should still fix up some of these statements by
inserting spaces between operators. For example:
> + }
> + ret = opera1_xilinx_rw(dev->udev, request,
> + value, buf, len,
> + addr&0x01?OPERA_READ_MSG:OPERA_WRITE_MSG);
>
>
should be:
+ addr & 0x01 ? OPERA_READ_MSG : OPERA_WRITE_MSG);
...This cleanup is needed in numerous places throughout opera1.c
>
> mutex_unlock(&dev->usb_mutex);
> return ret;
> @@ -122,13 +141,10 @@ static int opera1_i2c_xfer(struct i2c_ad
>
> for (i = 0; i < num; i++) {
> if ((tmp = opera1_usb_i2c_msgxfer(d,
> - msg[i].addr,
> + (msg[i].addr<<1)|(msg[i].flags&I2C_M_RD?0x01:0),
> msg[i].buf,
> - msg[i].len,
> - (msg[i].flags ==
> - I2C_M_RD ?
> - OPERA_READ_MSG :
> - OPERA_WRITE_MSG))!= msg[i].len)) {
> + msg[i].len
> + )!= msg[i].len)) {
>
whitespace is all screwed up here... The only way I know how to fix
this is by using emacs. I'll clean it up for you if you give the
go-ahead. Last time I did this, the patch was nacked, so I dont want to
waste my time without your prior knowledge.
> break;
> }
> if (dvb_usb_opera1_debug & 0x10)
> @@ -153,12 +169,12 @@ static int opera1_set_voltage(struct dvb
> static u8 command_13v[1]={0x00};
> static u8 command_18v[1]={0x01};
> struct i2c_msg msg[] = {
> - {.addr = 0xb600,.flags = 0,.buf = command_13v,.len = 1},
> + {.addr = ADDR_B600_VOLTAGE_13V,.flags = 0,.buf = command_13v,.len = 1},
>
^^^ spaces needed after the commas (,)
> };
> struct dvb_usb_adapter *udev_adap =
> (struct dvb_usb_adapter *)(fe->dvb->priv);
> if (voltage == SEC_VOLTAGE_18) {
> - msg[0].addr = 0xb601;
> + msg[0].addr = ADDR_B601_VOLTAGE_18V;
> msg[0].buf = command_18v;
> }
> i2c_transfer(&udev_adap->dev->i2c_adap, msg, 1);
> @@ -231,7 +247,7 @@ static u8 opera1_inittab[] = {
> };
>
> static struct stv0299_config opera1_stv0299_config = {
> - .demod_address = 0xd0,
> + .demod_address = 0xd0>>1,
>
0x68, please .. for the sake of consistency. If you look at the other
driver sources, you'll notice other stv0299's configured at 0x68. we
should keep this standard.
> .min_delay_ms = 100,
> .mclk = 88000000UL,
> .invert = 1,
> @@ -256,19 +272,21 @@ static int opera1_frontend_attach(struct
>
> static int opera1_tuner_attach(struct dvb_usb_adapter *adap)
> {
> - adap->pll_addr = 0xc0;
> - adap->pll_desc = &dvb_pll_opera1;
> - adap->fe->ops.tuner_ops.set_params = dvb_usb_tuner_set_params_i2c;
> + dvb_attach(
> + dvb_pll_attach, adap->fe, 0xc0>>1,
> + &adap->dev->i2c_adap, &dvb_pll_opera1
> + );
>
Again, for the sake of remaining consistent with all other callers of
dvb_pll_attach, lets use 0x60 instead of "0xc0>>1"
> return 0;
> }
>
> static int opera1_power_ctrl(struct dvb_usb_device *d, int onoff)
> {
> - int addr = onoff ? 0xb701 : 0xb700;
> u8 val = onoff ? 0x01 : 0x00;
> +
> if (dvb_usb_opera1_debug)
> info("power %s", onoff ? "on" : "off");
> - return opera1_usb_i2c_msgxfer(d, addr, &val, 1, OPERA_WRITE_MSG);
> + return opera1_xilinx_rw(d->udev, 0xb7, val,
> + &val, 1, OPERA_WRITE_MSG);
> }
>
> static int opera1_streaming_ctrl(struct dvb_usb_adapter *adap, int onoff)
> @@ -276,7 +294,7 @@ static int opera1_streaming_ctrl(struct
> static u8 buf_start[2] = { 0xff, 0x03 };
> static u8 buf_stop[2] = { 0xff, 0x00 };
> struct i2c_msg start_tuner[] = {
> - {.addr = 0xb1a6,.buf = onoff ? buf_start : buf_stop,.len = 2},
> + {.addr = ADDR_B1A6_STREAM_CTRL,.buf = onoff ? buf_start : buf_stop,.len = 2},
>
spaces needed after commas
> };
> if (dvb_usb_opera1_debug)
> info("streaming %s", onoff ? "on" : "off");
> @@ -289,7 +307,7 @@ static int opera1_pid_filter(struct dvb_
> {
> u8 b_pid[3];
> struct i2c_msg msg[] = {
> - {.addr = 0xb1a6,.buf = b_pid,.len = 3},
> + {.addr = ADDR_B1A6_STREAM_CTRL,.buf = b_pid,.len = 3},
>
again
> };
> if (dvb_usb_opera1_debug)
> info("pidfilter index: %d pid: %d %s", index, pid,
> @@ -306,7 +324,7 @@ static int opera1_pid_filter_control(str
> int u = 0x04;
> u8 b_pid[3];
> struct i2c_msg msg[] = {
> - {.addr = 0xb1a6,.buf = b_pid,.len = 3},
> + {.addr = ADDR_B1A6_STREAM_CTRL,.buf = b_pid,.len = 3},
>
again
> };
> if (dvb_usb_opera1_debug)
> info("%s hw-pidfilter", onoff ? "enable" : "disable");
> @@ -356,7 +374,7 @@ static int opera1_rc_query(struct dvb_us
> const u16 startmarker1 = 0x10ed;
> const u16 startmarker2 = 0x11ec;
> struct i2c_msg read_remote[] = {
> - {.addr = 0xb880,.buf = rcbuffer,.flags = I2C_M_RD,.len = 32},
> + {.addr = ADDR_B880_READ_REMOTE,.buf = rcbuffer,.flags = I2C_M_RD,.len = 32},
>
again
> };
> int i = 0;
> u32 send_key = 0;
> @@ -478,7 +496,7 @@ static struct dvb_usb_device_properties
> static struct dvb_usb_device_properties opera1_properties = {
> .caps = DVB_USB_IS_AN_I2C_ADAPTER,
> .usb_ctrl = CYPRESS_FX2,
> - .firmware = "opera.fw",
> + .firmware = "dvb-usb-opera-01.fw",
> .size_of_priv = sizeof(struct opera1_state),
>
> .power_ctrl = opera1_power_ctrl,
> @@ -533,7 +551,7 @@ static int opera1_probe(struct usb_inter
> if (udev->descriptor.idProduct == USB_PID_OPERA1_WARM &&
> udev->descriptor.idVendor == USB_VID_OPERA1 &&
> (d == NULL
> - || opera1_xilinx_load_firmware(udev, "opera1-fpga.fw") != 0)
> + || opera1_xilinx_load_firmware(udev, "dvb-usb-opera1-fpga.fw") != 0)
> ) {
> return -EINVAL;
> }
>
Usually I would do these cleanups myself, but here I am giving you the
opportunity to do them yourself. Please either fix these trivial
issues, or give me the go-ahead to fix them.
Either way, this doesn't hold up your pending patch. Let me know if you
have any questions.
Cheers,
Mike Krufky
More information about the linux-dvb
mailing list