summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/media/dvb/firesat/avc_api.c17
-rw-r--r--drivers/media/dvb/firesat/firesat.h3
-rw-r--r--drivers/media/dvb/firesat/firesat_1394.c28
3 files changed, 31 insertions, 17 deletions
diff --git a/drivers/media/dvb/firesat/avc_api.c b/drivers/media/dvb/firesat/avc_api.c
index d70795623fb9..0ad6420e342f 100644
--- a/drivers/media/dvb/firesat/avc_api.c
+++ b/drivers/media/dvb/firesat/avc_api.c
@@ -251,7 +251,7 @@ int AVCTuner_DSD(struct firesat *firesat, struct dvb_frontend_parameters *params
// printk(KERN_INFO "%s\n", __func__);
- if(firesat->type == FireSAT_DVB_S)
+ if (firesat->type == FireSAT_DVB_S || firesat->type == FireSAT_DVB_S2)
AVCTuner_tuneQPSK(firesat, params, &CmdFrm);
else {
if(firesat->type == FireSAT_DVB_T) {
@@ -654,21 +654,6 @@ int AVCIdentifySubunit(struct firesat *firesat, unsigned char *systemId, int *tr
}
if(systemId)
*systemId = RspFrm.operand[7];
- if(transport)
- *transport = RspFrm.operand[14] & 0x7;
- switch(RspFrm.operand[14] & 0x7) {
- case 1:
- printk(KERN_INFO "%s: found DVB/S\n",__func__);
- break;
- case 2:
- printk(KERN_INFO "%s: found DVB/C\n",__func__);
- break;
- case 3:
- printk(KERN_INFO "%s: found DVB/T\n",__func__);
- break;
- default:
- printk(KERN_INFO "%s: found unknown tuner id %u\n",__func__,RspFrm.operand[14] & 0x7);
- }
if(has_ci)
*has_ci = (RspFrm.operand[14] >> 4) & 0x1;
return 0;
diff --git a/drivers/media/dvb/firesat/firesat.h b/drivers/media/dvb/firesat/firesat.h
index f852a1ac7740..d1e2ce37063e 100644
--- a/drivers/media/dvb/firesat/firesat.h
+++ b/drivers/media/dvb/firesat/firesat.h
@@ -13,7 +13,8 @@
enum model_type {
FireSAT_DVB_S = 1,
FireSAT_DVB_C = 2,
- FireSAT_DVB_T = 3
+ FireSAT_DVB_T = 3,
+ FireSAT_DVB_S2 = 4
};
struct firesat {
diff --git a/drivers/media/dvb/firesat/firesat_1394.c b/drivers/media/dvb/firesat/firesat_1394.c
index c7ccf633c24b..dcac70a2991e 100644
--- a/drivers/media/dvb/firesat/firesat_1394.c
+++ b/drivers/media/dvb/firesat/firesat_1394.c
@@ -263,6 +263,8 @@ static int firesat_probe(struct device *dev)
int result;
unsigned char subunitcount = 0xff, subunit;
struct firesat **firesats = kmalloc(sizeof (void*) * 2,GFP_KERNEL);
+ int kv_len;
+ char *kv_buf;
if (!firesats) {
printk("%s: couldn't allocate memory.\n", __func__);
@@ -329,6 +331,32 @@ static int firesat_probe(struct device *dev)
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';
+
+ /* Determining the device model */
+ if (strcmp(kv_buf, "FireDTV S/CI") == 0) {
+ printk(KERN_INFO "%s: found DVB/S\n", __func__);
+ firesat->type = 1;
+ } else if (strcmp(kv_buf, "FireDTV C/CI") == 0) {
+ printk(KERN_INFO "%s: found DVB/C\n", __func__);
+ firesat->type = 2;
+ } else if (strcmp(kv_buf, "FireDTV T/CI") == 0) {
+ printk(KERN_INFO "%s: found DVB/T\n", __func__);
+ firesat->type = 3;
+ } else if (strcmp(kv_buf, "FireDTV S2 ") == 0) {
+ printk(KERN_INFO "%s: found DVB/S2\n", __func__);
+ firesat->type = 4;
+ }
+ kfree(kv_buf);
+
if (AVCIdentifySubunit(firesat, NULL, (int*)&firesat->type, &firesat->has_ci)) {
printk("%s: cannot identify subunit %d\n", __func__, subunit);
spin_lock_irqsave(&firesat_list_lock, flags);