- }
-
-// printk(KERN_INFO "FireSAT: Detected device with GUID %08lx%04lx%04lx\n",(unsigned long)((ud->ne->guid)>>32),(unsigned long)(ud->ne->guid & 0xFFFF),(unsigned long)ud->ne->guid_vendor_id);
- printk(KERN_INFO "%s: loading device\n", __func__);
-
- firesats[0] = NULL;
- firesats[1] = NULL;
-
- ud->device.driver_data = firesats;
-
- for (subunit = 0; subunit < subunitcount; subunit++) {
-
- if (!(firesat = kmalloc(sizeof (struct firesat), GFP_KERNEL)) ||
- !(fe = kmalloc(sizeof (struct dvb_frontend), GFP_KERNEL))) {
-
- printk("%s: couldn't allocate memory.\n", __func__);
- kfree(firesats);
- return -ENOMEM;
- }
-
- memset(firesat, 0, sizeof (struct firesat));
-
- firesat->host = ud->ne->host;
- firesat->guid = ud->ne->guid;
- firesat->guid_vendor_id = ud->ne->guid_vendor_id;
- firesat->nodeentry = ud->ne;
- firesat->isochannel = -1;
- firesat->tone = 0xff;
- firesat->voltage = 0xff;
- firesat->fe = fe;
-
- if (!(firesat->respfrm = kmalloc(sizeof (AVCRspFrm), GFP_KERNEL))) {
- printk("%s: couldn't allocate memory.\n", __func__);
- kfree(firesat);
- return -ENOMEM;
- }
-
- mutex_init(&firesat->avc_mutex);
- init_waitqueue_head(&firesat->avc_wait);
- atomic_set(&firesat->avc_reply_received, 1);
- mutex_init(&firesat->demux_mutex);
- INIT_WORK(&firesat->remote_ctrl_work, avc_remote_ctrl_work);
-
- spin_lock_irqsave(&firesat_list_lock, flags);
- INIT_LIST_HEAD(&firesat->list);
- list_add_tail(&firesat->list, &firesat_list);
- spin_unlock_irqrestore(&firesat_list_lock, flags);
-
- if (subunit == 0) {
- firesat->subunit = 0x7; // 0x7 = don't care
- if (AVCSubUnitInfo(firesat, &subunitcount)) {
- printk("%s: AVC subunit info command failed.\n",__func__);
- spin_lock_irqsave(&firesat_list_lock, flags);
- list_del(&firesat->list);
- spin_unlock_irqrestore(&firesat_list_lock, flags);
- kfree(firesat);
- return -EIO;
- }
- }
-
- printk(KERN_INFO "%s: subunit count = %d\n", __func__, subunitcount);
-
- firesat->subunit = subunit;
-
- /* Reading device model from ROM */
- kv_len = (ud->model_name_kv->value.leaf.len - 2) *
- sizeof(quadlet_t);
- kv_buf = kmalloc((sizeof(quadlet_t) * kv_len), GFP_KERNEL);
- memcpy(kv_buf,
- CSR1212_TEXTUAL_DESCRIPTOR_LEAF_DATA(ud->model_name_kv),
- kv_len);
- while ((kv_buf + kv_len - 1) == '\0') kv_len--;
- kv_buf[kv_len++] = '\0';