Loading drivers/media/dvb/dvb-usb/az6007.c +120 −119 Original line number Diff line number Diff line Loading @@ -15,7 +15,8 @@ /* debug */ int dvb_usb_az6007_debug; module_param_named(debug, dvb_usb_az6007_debug, int, 0644); MODULE_PARM_DESC(debug, "set debugging level (1=info,xfer=2,rc=4 (or-able))." DVB_USB_DEBUG_STATUS); MODULE_PARM_DESC(debug, "set debugging level (1=info,xfer=2,rc=4 (or-able))." DVB_USB_DEBUG_STATUS); DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); Loading @@ -30,7 +31,7 @@ struct az6007_device_state { bool dont_attach_fe1; }; struct drxk_config terratec_h7_drxk = { static struct drxk_config terratec_h7_drxk = { .adr = 0x29, .single_master = 1, .no_i2c_bridge = 0, Loading @@ -53,7 +54,6 @@ static int drxk_gate_ctrl(struct dvb_frontend *fe, int enable) if (!st) return -EINVAL; if (enable) { #if 0 down(&st->pll_mutex); Loading @@ -68,13 +68,14 @@ static int drxk_gate_ctrl(struct dvb_frontend *fe, int enable) return status; } struct mt2063_config az6007_mt2063_config = { static struct mt2063_config az6007_mt2063_config = { .tuner_address = 0x60, .refclock = 36125000, }; /* check for mutex FIXME */ int az6007_usb_in_op(struct dvb_usb_device *d, u8 req, u16 value, u16 index, u8 *b, int blen) static int az6007_usb_in_op(struct dvb_usb_device *d, u8 req, u16 value, u16 index, u8 *b, int blen) { int ret = -1; Loading @@ -82,15 +83,15 @@ int az6007_usb_in_op(struct dvb_usb_device *d, u8 req, u16 value, u16 index, u8 usb_rcvctrlpipe(d->udev, 0), req, USB_TYPE_VENDOR | USB_DIR_IN, value,index,b,blen, 5000); value, index, b, blen, 5000); if (ret < 0) { warn("usb in operation failed. (%d)", ret); return -EIO; } deb_xfer("in: req. %02x, val: %04x, ind: %04x, buffer: ",req,value,index); deb_xfer("in: req. %02x, val: %04x, ind: %04x, buffer: ", req, value, index); debug_dump(b, blen, deb_xfer); return ret; Loading @@ -101,20 +102,22 @@ static int az6007_usb_out_op(struct dvb_usb_device *d, u8 req, u16 value, { int ret; deb_xfer("out: req. %02x, val: %04x, ind: %04x, buffer: ",req,value,index); deb_xfer("out: req. %02x, val: %04x, ind: %04x, buffer: ", req, value, index); debug_dump(b, blen, deb_xfer); if (blen > 64) { printk(KERN_ERR "az6007: doesn't suport I2C transactions longer than 64 bytes\n"); printk(KERN_ERR "az6007: doesn't suport I2C transactions longer than 64 bytes\n"); return -EOPNOTSUPP; } if ((ret = usb_control_msg(d->udev, ret = usb_control_msg(d->udev, usb_sndctrlpipe(d->udev, 0), req, USB_TYPE_VENDOR | USB_DIR_OUT, value,index,b,blen, 5000)) != blen) { value, index, b, blen, 5000); if (ret != blen) { warn("usb out operation failed. (%d)", ret); return -EIO; } Loading @@ -128,7 +131,7 @@ static int az6007_streaming_ctrl(struct dvb_usb_adapter *adap, int onoff) } /* keys for the enclosed remote control */ struct rc_map_table rc_map_az6007_table[] = { static struct rc_map_table rc_map_az6007_table[] = { {0x0001, KEY_1}, {0x0002, KEY_2}, }; Loading @@ -143,7 +146,6 @@ static int az6007_rc_query(struct dvb_usb_device *d, u32 *event, int *state) /* remove the following return to enabled remote querying */ az6007_usb_in_op(d, READ_REMOTE_REQ, 0, 0, key, 10); deb_rc("remote query key: %x %d\n", key[1], key[1]); Loading Loading @@ -192,8 +194,8 @@ static int az6007_frontend_poweron(struct dvb_usb_adapter *adap) index = 3; blen = 0; if((ret = az6007_usb_out_op(adap->dev,req,value,index,NULL,blen)) != 0) { ret = az6007_usb_out_op(adap->dev, req, value, index, NULL, blen); if (ret != 0) { err("az6007_frontend_poweron failed!!!"); return -EIO; } Loading @@ -205,8 +207,8 @@ static int az6007_frontend_poweron(struct dvb_usb_adapter *adap) index = 3; blen = 0; if((ret = az6007_usb_out_op(adap->dev,req,value,index,NULL,blen)) != 0) { ret = az6007_usb_out_op(adap->dev, req, value, index, NULL, blen); if (ret != 0) { err("az6007_frontend_poweron failed!!!"); return -EIO; } Loading @@ -218,8 +220,8 @@ static int az6007_frontend_poweron(struct dvb_usb_adapter *adap) index = 3; blen = 0; if((ret = az6007_usb_out_op(adap->dev,req,value,index,NULL,blen)) != 0) { ret = az6007_usb_out_op(adap->dev, req, value, index, NULL, blen); if (ret != 0) { err("az6007_frontend_poweron failed!!!"); return -EIO; } Loading @@ -238,35 +240,35 @@ static int az6007_frontend_reset(struct dvb_usb_adapter *adap) info("az6007_frontend_reset adap=%p adap->dev=%p", adap, adap->dev); //reset demodulator /* reset demodulator */ req = 0xC0; value = 1;//high value = 1; /* high */ index = 3; blen = 0; if((ret = az6007_usb_out_op(adap->dev,req,value,index,NULL,blen)) != 0) { ret = az6007_usb_out_op(adap->dev, req, value, index, NULL, blen); if (ret != 0) { err("az6007_frontend_reset failed 1 !!!"); return -EIO; } req = 0xC0; value = 0;//low value = 0; /* low */ index = 3; blen = 0; msleep_interruptible(200); if((ret = az6007_usb_out_op(adap->dev,req,value,index,NULL,blen)) != 0) { ret = az6007_usb_out_op(adap->dev, req, value, index, NULL, blen); if (ret != 0) { err("az6007_frontend_reset failed 2 !!!"); return -EIO; } msleep_interruptible(200); req = 0xC0; value = 1;//high value = 1; /* high */ index = 3; blen = 0; if((ret = az6007_usb_out_op(adap->dev,req,value,index,NULL,blen)) != 0) { ret = az6007_usb_out_op(adap->dev, req, value, index, NULL, blen); if (ret != 0) { err("az6007_frontend_reset failed 3 !!!"); return -EIO; } Loading @@ -285,7 +287,7 @@ static int az6007_led_on_off(struct usb_interface *intf, int onoff) u16 value; u16 index; int blen; //TS through /* TS through */ req = 0xBC; value = onoff; index = 0; Loading @@ -295,8 +297,7 @@ static int az6007_led_on_off(struct usb_interface *intf, int onoff) usb_rcvctrlpipe(interface_to_usbdev(intf), 0), req, USB_TYPE_VENDOR | USB_DIR_OUT, value,index,NULL,blen, 2000); value, index, NULL, blen, 2000); if (ret < 0) { warn("usb in operation failed. (%d)", ret); Loading @@ -304,8 +305,8 @@ static int az6007_led_on_off(struct usb_interface *intf, int onoff) } else ret = 0; deb_xfer("in: req. %02x, val: %04x, ind: %04x, buffer: ",req,value,index); deb_xfer("in: req. %02x, val: %04x, ind: %04x, buffer: ", req, value, index); return ret; } Loading @@ -317,13 +318,14 @@ static int az6007_frontend_tsbypass(struct dvb_usb_adapter *adap,int onoff) u16 value; u16 index; int blen; //TS through /* TS through */ req = 0xC7; value = onoff; index = 0; blen = 0; if((ret = az6007_usb_out_op(adap->dev,req,value,index,NULL,blen)) != 0) ret = az6007_usb_out_op(adap->dev, req, value, index, NULL, blen); if (ret != 0) return -EIO; return 0; } Loading Loading @@ -373,8 +375,7 @@ static int az6007_frontend_attach(struct dvb_usb_adapter *adap) /* Hack - needed due to drxk */ adap->fe2->tuner_priv = adap->fe->tuner_priv; memcpy(&adap->fe2->ops.tuner_ops, &adap->fe->ops.tuner_ops, sizeof(adap->fe->ops.tuner_ops)); &adap->fe->ops.tuner_ops, sizeof(adap->fe->ops.tuner_ops)); return 0; out_free: Loading @@ -388,14 +389,14 @@ static int az6007_frontend_attach(struct dvb_usb_adapter *adap) static struct dvb_usb_device_properties az6007_properties; static void az6007_usb_disconnect(struct usb_interface *intf) static void az6007_usb_disconnect(struct usb_interface *intf) { dvb_usb_device_exit(intf); } /* I2C */ static int az6007_i2c_xfer(struct i2c_adapter *adap,struct i2c_msg msgs[],int num) static int az6007_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num) { struct dvb_usb_device *d = i2c_get_adapdata(adap); int i, j, len; Loading Loading @@ -430,7 +431,8 @@ static int az6007_i2c_xfer(struct i2c_adapter *adap,struct i2c_msg msgs[],int nu value = addr | (1 << 8); length = 6 + msgs[i + 1].len; len = msgs[i + 1].len; ret = az6007_usb_in_op(d,req,value,index,data,length); ret = az6007_usb_in_op(d, req, value, index, data, length); if (ret >= len) { for (j = 0; j < len; j++) { msgs[i + 1].buf[j] = data[j + 5]; Loading @@ -454,16 +456,14 @@ static int az6007_i2c_xfer(struct i2c_adapter *adap,struct i2c_msg msgs[],int nu length = msgs[i].len - 1; len = msgs[i].len - 1; if (dvb_usb_az6007_debug & 2) printk(KERN_CONT "(0x%02x) ", msgs[i].buf[0]); for (j = 0; j < len; j++) { printk(KERN_CONT "(0x%02x) ", msgs[i].buf[0]); for (j = 0; j < len; j++) { data[j] = msgs[i].buf[j + 1]; if (dvb_usb_az6007_debug & 2) printk(KERN_CONT "0x%02x ", data[j]); printk(KERN_CONT "0x%02x ", data[j]); } ret = az6007_usb_out_op(d,req,value,index,data,length); ret = az6007_usb_out_op(d, req, value, index, data, length); } else { /* read bytes */ if (dvb_usb_az6007_debug & 2) Loading @@ -475,9 +475,9 @@ static int az6007_i2c_xfer(struct i2c_adapter *adap,struct i2c_msg msgs[],int nu value = addr; length = msgs[i].len + 6; len = msgs[i].len; ret = az6007_usb_in_op(d,req,value,index,data,length); for (j = 0; j < len; j++) { ret = az6007_usb_in_op(d, req, value, index, data, length); for (j = 0; j < len; j++) { msgs[i].buf[j] = data[j + 5]; if (dvb_usb_az6007_debug & 2) printk(KERN_CONT Loading @@ -499,7 +499,6 @@ static int az6007_i2c_xfer(struct i2c_adapter *adap,struct i2c_msg msgs[],int nu return num; } static u32 az6007_i2c_func(struct i2c_adapter *adapter) { return I2C_FUNC_I2C; Loading @@ -510,12 +509,14 @@ static struct i2c_algorithm az6007_i2c_algo = { .functionality = az6007_i2c_func, }; int az6007_identify_state(struct usb_device *udev, struct dvb_usb_device_properties *props, int az6007_identify_state(struct usb_device *udev, struct dvb_usb_device_properties *props, struct dvb_usb_device_description **desc, int *cold) { u8 b[16]; s16 ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), 0xb7, USB_TYPE_VENDOR | USB_DIR_IN, 6, 0, b, 6, USB_CTRL_GET_TIMEOUT); 0xb7, USB_TYPE_VENDOR | USB_DIR_IN, 6, 0, b, 6, USB_CTRL_GET_TIMEOUT); info("FW GET_VERSION length: %d", ret); Loading Loading @@ -545,7 +546,6 @@ MODULE_DEVICE_TABLE(usb, az6007_usb_table); static struct dvb_usb_device_properties az6007_properties = { .caps = DVB_USB_IS_AN_I2C_ADAPTER, .usb_ctrl = CYPRESS_FX2, //.download_firmware = az6007_download_firmware, .firmware = "dvb-usb-az6007-03.fw", .no_reconnect = 1, Loading @@ -553,8 +553,7 @@ static struct dvb_usb_device_properties az6007_properties = { .num_adapters = 1, .adapter = { { //.caps = DVB_USB_ADAP_RECEIVES_204_BYTE_TS, /* .caps = DVB_USB_ADAP_RECEIVES_204_BYTE_TS, */ .streaming_ctrl = az6007_streaming_ctrl, .frontend_attach = az6007_frontend_attach, Loading @@ -572,7 +571,7 @@ static struct dvb_usb_device_properties az6007_properties = { .size_of_priv = sizeof(struct az6007_device_state), } }, //.power_ctrl = az6007_power_ctrl, /* .power_ctrl = az6007_power_ctrl, */ .read_mac_address = az6007_read_mac_addr, .rc.legacy = { Loading Loading @@ -602,7 +601,7 @@ static struct usb_driver az6007_usb_driver = { .name = "dvb_usb_az6007", .probe = az6007_usb_probe, .disconnect = dvb_usb_device_exit, //.disconnect = az6007_usb_disconnect, /* .disconnect = az6007_usb_disconnect, */ .id_table = az6007_usb_table, }; Loading @@ -611,7 +610,9 @@ static int __init az6007_usb_module_init(void) { int result; info("az6007 usb module init"); if ((result = usb_register(&az6007_usb_driver))) { result = usb_register(&az6007_usb_driver); if (result) { err("usb_register failed. (%d)", result); return result; } Loading Loading
drivers/media/dvb/dvb-usb/az6007.c +120 −119 Original line number Diff line number Diff line Loading @@ -15,7 +15,8 @@ /* debug */ int dvb_usb_az6007_debug; module_param_named(debug, dvb_usb_az6007_debug, int, 0644); MODULE_PARM_DESC(debug, "set debugging level (1=info,xfer=2,rc=4 (or-able))." DVB_USB_DEBUG_STATUS); MODULE_PARM_DESC(debug, "set debugging level (1=info,xfer=2,rc=4 (or-able))." DVB_USB_DEBUG_STATUS); DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); Loading @@ -30,7 +31,7 @@ struct az6007_device_state { bool dont_attach_fe1; }; struct drxk_config terratec_h7_drxk = { static struct drxk_config terratec_h7_drxk = { .adr = 0x29, .single_master = 1, .no_i2c_bridge = 0, Loading @@ -53,7 +54,6 @@ static int drxk_gate_ctrl(struct dvb_frontend *fe, int enable) if (!st) return -EINVAL; if (enable) { #if 0 down(&st->pll_mutex); Loading @@ -68,13 +68,14 @@ static int drxk_gate_ctrl(struct dvb_frontend *fe, int enable) return status; } struct mt2063_config az6007_mt2063_config = { static struct mt2063_config az6007_mt2063_config = { .tuner_address = 0x60, .refclock = 36125000, }; /* check for mutex FIXME */ int az6007_usb_in_op(struct dvb_usb_device *d, u8 req, u16 value, u16 index, u8 *b, int blen) static int az6007_usb_in_op(struct dvb_usb_device *d, u8 req, u16 value, u16 index, u8 *b, int blen) { int ret = -1; Loading @@ -82,15 +83,15 @@ int az6007_usb_in_op(struct dvb_usb_device *d, u8 req, u16 value, u16 index, u8 usb_rcvctrlpipe(d->udev, 0), req, USB_TYPE_VENDOR | USB_DIR_IN, value,index,b,blen, 5000); value, index, b, blen, 5000); if (ret < 0) { warn("usb in operation failed. (%d)", ret); return -EIO; } deb_xfer("in: req. %02x, val: %04x, ind: %04x, buffer: ",req,value,index); deb_xfer("in: req. %02x, val: %04x, ind: %04x, buffer: ", req, value, index); debug_dump(b, blen, deb_xfer); return ret; Loading @@ -101,20 +102,22 @@ static int az6007_usb_out_op(struct dvb_usb_device *d, u8 req, u16 value, { int ret; deb_xfer("out: req. %02x, val: %04x, ind: %04x, buffer: ",req,value,index); deb_xfer("out: req. %02x, val: %04x, ind: %04x, buffer: ", req, value, index); debug_dump(b, blen, deb_xfer); if (blen > 64) { printk(KERN_ERR "az6007: doesn't suport I2C transactions longer than 64 bytes\n"); printk(KERN_ERR "az6007: doesn't suport I2C transactions longer than 64 bytes\n"); return -EOPNOTSUPP; } if ((ret = usb_control_msg(d->udev, ret = usb_control_msg(d->udev, usb_sndctrlpipe(d->udev, 0), req, USB_TYPE_VENDOR | USB_DIR_OUT, value,index,b,blen, 5000)) != blen) { value, index, b, blen, 5000); if (ret != blen) { warn("usb out operation failed. (%d)", ret); return -EIO; } Loading @@ -128,7 +131,7 @@ static int az6007_streaming_ctrl(struct dvb_usb_adapter *adap, int onoff) } /* keys for the enclosed remote control */ struct rc_map_table rc_map_az6007_table[] = { static struct rc_map_table rc_map_az6007_table[] = { {0x0001, KEY_1}, {0x0002, KEY_2}, }; Loading @@ -143,7 +146,6 @@ static int az6007_rc_query(struct dvb_usb_device *d, u32 *event, int *state) /* remove the following return to enabled remote querying */ az6007_usb_in_op(d, READ_REMOTE_REQ, 0, 0, key, 10); deb_rc("remote query key: %x %d\n", key[1], key[1]); Loading Loading @@ -192,8 +194,8 @@ static int az6007_frontend_poweron(struct dvb_usb_adapter *adap) index = 3; blen = 0; if((ret = az6007_usb_out_op(adap->dev,req,value,index,NULL,blen)) != 0) { ret = az6007_usb_out_op(adap->dev, req, value, index, NULL, blen); if (ret != 0) { err("az6007_frontend_poweron failed!!!"); return -EIO; } Loading @@ -205,8 +207,8 @@ static int az6007_frontend_poweron(struct dvb_usb_adapter *adap) index = 3; blen = 0; if((ret = az6007_usb_out_op(adap->dev,req,value,index,NULL,blen)) != 0) { ret = az6007_usb_out_op(adap->dev, req, value, index, NULL, blen); if (ret != 0) { err("az6007_frontend_poweron failed!!!"); return -EIO; } Loading @@ -218,8 +220,8 @@ static int az6007_frontend_poweron(struct dvb_usb_adapter *adap) index = 3; blen = 0; if((ret = az6007_usb_out_op(adap->dev,req,value,index,NULL,blen)) != 0) { ret = az6007_usb_out_op(adap->dev, req, value, index, NULL, blen); if (ret != 0) { err("az6007_frontend_poweron failed!!!"); return -EIO; } Loading @@ -238,35 +240,35 @@ static int az6007_frontend_reset(struct dvb_usb_adapter *adap) info("az6007_frontend_reset adap=%p adap->dev=%p", adap, adap->dev); //reset demodulator /* reset demodulator */ req = 0xC0; value = 1;//high value = 1; /* high */ index = 3; blen = 0; if((ret = az6007_usb_out_op(adap->dev,req,value,index,NULL,blen)) != 0) { ret = az6007_usb_out_op(adap->dev, req, value, index, NULL, blen); if (ret != 0) { err("az6007_frontend_reset failed 1 !!!"); return -EIO; } req = 0xC0; value = 0;//low value = 0; /* low */ index = 3; blen = 0; msleep_interruptible(200); if((ret = az6007_usb_out_op(adap->dev,req,value,index,NULL,blen)) != 0) { ret = az6007_usb_out_op(adap->dev, req, value, index, NULL, blen); if (ret != 0) { err("az6007_frontend_reset failed 2 !!!"); return -EIO; } msleep_interruptible(200); req = 0xC0; value = 1;//high value = 1; /* high */ index = 3; blen = 0; if((ret = az6007_usb_out_op(adap->dev,req,value,index,NULL,blen)) != 0) { ret = az6007_usb_out_op(adap->dev, req, value, index, NULL, blen); if (ret != 0) { err("az6007_frontend_reset failed 3 !!!"); return -EIO; } Loading @@ -285,7 +287,7 @@ static int az6007_led_on_off(struct usb_interface *intf, int onoff) u16 value; u16 index; int blen; //TS through /* TS through */ req = 0xBC; value = onoff; index = 0; Loading @@ -295,8 +297,7 @@ static int az6007_led_on_off(struct usb_interface *intf, int onoff) usb_rcvctrlpipe(interface_to_usbdev(intf), 0), req, USB_TYPE_VENDOR | USB_DIR_OUT, value,index,NULL,blen, 2000); value, index, NULL, blen, 2000); if (ret < 0) { warn("usb in operation failed. (%d)", ret); Loading @@ -304,8 +305,8 @@ static int az6007_led_on_off(struct usb_interface *intf, int onoff) } else ret = 0; deb_xfer("in: req. %02x, val: %04x, ind: %04x, buffer: ",req,value,index); deb_xfer("in: req. %02x, val: %04x, ind: %04x, buffer: ", req, value, index); return ret; } Loading @@ -317,13 +318,14 @@ static int az6007_frontend_tsbypass(struct dvb_usb_adapter *adap,int onoff) u16 value; u16 index; int blen; //TS through /* TS through */ req = 0xC7; value = onoff; index = 0; blen = 0; if((ret = az6007_usb_out_op(adap->dev,req,value,index,NULL,blen)) != 0) ret = az6007_usb_out_op(adap->dev, req, value, index, NULL, blen); if (ret != 0) return -EIO; return 0; } Loading Loading @@ -373,8 +375,7 @@ static int az6007_frontend_attach(struct dvb_usb_adapter *adap) /* Hack - needed due to drxk */ adap->fe2->tuner_priv = adap->fe->tuner_priv; memcpy(&adap->fe2->ops.tuner_ops, &adap->fe->ops.tuner_ops, sizeof(adap->fe->ops.tuner_ops)); &adap->fe->ops.tuner_ops, sizeof(adap->fe->ops.tuner_ops)); return 0; out_free: Loading @@ -388,14 +389,14 @@ static int az6007_frontend_attach(struct dvb_usb_adapter *adap) static struct dvb_usb_device_properties az6007_properties; static void az6007_usb_disconnect(struct usb_interface *intf) static void az6007_usb_disconnect(struct usb_interface *intf) { dvb_usb_device_exit(intf); } /* I2C */ static int az6007_i2c_xfer(struct i2c_adapter *adap,struct i2c_msg msgs[],int num) static int az6007_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num) { struct dvb_usb_device *d = i2c_get_adapdata(adap); int i, j, len; Loading Loading @@ -430,7 +431,8 @@ static int az6007_i2c_xfer(struct i2c_adapter *adap,struct i2c_msg msgs[],int nu value = addr | (1 << 8); length = 6 + msgs[i + 1].len; len = msgs[i + 1].len; ret = az6007_usb_in_op(d,req,value,index,data,length); ret = az6007_usb_in_op(d, req, value, index, data, length); if (ret >= len) { for (j = 0; j < len; j++) { msgs[i + 1].buf[j] = data[j + 5]; Loading @@ -454,16 +456,14 @@ static int az6007_i2c_xfer(struct i2c_adapter *adap,struct i2c_msg msgs[],int nu length = msgs[i].len - 1; len = msgs[i].len - 1; if (dvb_usb_az6007_debug & 2) printk(KERN_CONT "(0x%02x) ", msgs[i].buf[0]); for (j = 0; j < len; j++) { printk(KERN_CONT "(0x%02x) ", msgs[i].buf[0]); for (j = 0; j < len; j++) { data[j] = msgs[i].buf[j + 1]; if (dvb_usb_az6007_debug & 2) printk(KERN_CONT "0x%02x ", data[j]); printk(KERN_CONT "0x%02x ", data[j]); } ret = az6007_usb_out_op(d,req,value,index,data,length); ret = az6007_usb_out_op(d, req, value, index, data, length); } else { /* read bytes */ if (dvb_usb_az6007_debug & 2) Loading @@ -475,9 +475,9 @@ static int az6007_i2c_xfer(struct i2c_adapter *adap,struct i2c_msg msgs[],int nu value = addr; length = msgs[i].len + 6; len = msgs[i].len; ret = az6007_usb_in_op(d,req,value,index,data,length); for (j = 0; j < len; j++) { ret = az6007_usb_in_op(d, req, value, index, data, length); for (j = 0; j < len; j++) { msgs[i].buf[j] = data[j + 5]; if (dvb_usb_az6007_debug & 2) printk(KERN_CONT Loading @@ -499,7 +499,6 @@ static int az6007_i2c_xfer(struct i2c_adapter *adap,struct i2c_msg msgs[],int nu return num; } static u32 az6007_i2c_func(struct i2c_adapter *adapter) { return I2C_FUNC_I2C; Loading @@ -510,12 +509,14 @@ static struct i2c_algorithm az6007_i2c_algo = { .functionality = az6007_i2c_func, }; int az6007_identify_state(struct usb_device *udev, struct dvb_usb_device_properties *props, int az6007_identify_state(struct usb_device *udev, struct dvb_usb_device_properties *props, struct dvb_usb_device_description **desc, int *cold) { u8 b[16]; s16 ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), 0xb7, USB_TYPE_VENDOR | USB_DIR_IN, 6, 0, b, 6, USB_CTRL_GET_TIMEOUT); 0xb7, USB_TYPE_VENDOR | USB_DIR_IN, 6, 0, b, 6, USB_CTRL_GET_TIMEOUT); info("FW GET_VERSION length: %d", ret); Loading Loading @@ -545,7 +546,6 @@ MODULE_DEVICE_TABLE(usb, az6007_usb_table); static struct dvb_usb_device_properties az6007_properties = { .caps = DVB_USB_IS_AN_I2C_ADAPTER, .usb_ctrl = CYPRESS_FX2, //.download_firmware = az6007_download_firmware, .firmware = "dvb-usb-az6007-03.fw", .no_reconnect = 1, Loading @@ -553,8 +553,7 @@ static struct dvb_usb_device_properties az6007_properties = { .num_adapters = 1, .adapter = { { //.caps = DVB_USB_ADAP_RECEIVES_204_BYTE_TS, /* .caps = DVB_USB_ADAP_RECEIVES_204_BYTE_TS, */ .streaming_ctrl = az6007_streaming_ctrl, .frontend_attach = az6007_frontend_attach, Loading @@ -572,7 +571,7 @@ static struct dvb_usb_device_properties az6007_properties = { .size_of_priv = sizeof(struct az6007_device_state), } }, //.power_ctrl = az6007_power_ctrl, /* .power_ctrl = az6007_power_ctrl, */ .read_mac_address = az6007_read_mac_addr, .rc.legacy = { Loading Loading @@ -602,7 +601,7 @@ static struct usb_driver az6007_usb_driver = { .name = "dvb_usb_az6007", .probe = az6007_usb_probe, .disconnect = dvb_usb_device_exit, //.disconnect = az6007_usb_disconnect, /* .disconnect = az6007_usb_disconnect, */ .id_table = az6007_usb_table, }; Loading @@ -611,7 +610,9 @@ static int __init az6007_usb_module_init(void) { int result; info("az6007 usb module init"); if ((result = usb_register(&az6007_usb_driver))) { result = usb_register(&az6007_usb_driver); if (result) { err("usb_register failed. (%d)", result); return result; } Loading