Difference between revisions of "CVOC-E121"

From LinuxTVWiki
Jump to: navigation, search
(Created page with 'right|thumb|200px|CVOC-E121 An ISDB-T 1Seg USB Dongle with Siano Chipset. The CVOC-E121 works with Linux kernel 2.6.35.10 with a ker...')
 
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
[[Image:Cvoc-e121_large.jpg|right|thumb|200px|CVOC-E121]]
 
[[Image:Cvoc-e121_large.jpg|right|thumb|200px|CVOC-E121]]
   
An [[ISDB-T]] [[1Seg USB Dongle]] with [[Siano]] Chipset.
+
An [[ISDB-T]] [[1Seg USB Dongle]] with [[Siano]] Chipset. Works nicely with 1Seg by Brazilian TV stations.
   
 
The CVOC-E121 works with Linux kernel 2.6.35.10 with a kernel patch.
 
The CVOC-E121 works with Linux kernel 2.6.35.10 with a kernel patch.
Line 87: Line 87:
   
 
===Patch for Kernel Source===
 
===Patch for Kernel Source===
  +
This is a patch for kernel version 2.6.35.10.
  +
 
diff -urpN siano.orig/smscoreapi.c siano/smscoreapi.c
 
diff -urpN siano.orig/smscoreapi.c siano/smscoreapi.c
--- siano.orig/smscoreapi.c 2011-01-12 13:11:19.000000000 +0900
+
--- siano.orig/smscoreapi.c 2011-01-19 11:26:37.000000000 +0900
+++ siano/smscoreapi.c 2011-01-12 20:00:16.000000000 +0900
+
+++ siano/smscoreapi.c 2011-01-19 12:08:01.000000000 +0900
@@ -39,7 +39,7 @@
+
@@ -96,7 +96,7 @@ static struct mutex g_smscore_devicesloc
  +
static struct list_head g_smscore_registry;
#include "smsir.h"
 
  +
static struct mutex g_smscore_registrylock;
#include "smsendian.h"
 
 
-static int sms_dbg;
 
+static int sms_dbg=3;
 
module_param_named(debug, sms_dbg, int, 0644);
 
MODULE_PARM_DESC(debug, "set debug level (info=1, adv=2 (or-able))");
 
 
@@ -522,13 +522,14 @@ static int smscore_load_firmware_family2
 
 
 
  +
-static int default_mode = 4;
mem_address = firmware->StartAddress;
 
  +
+static int default_mode = 6;
 
 
  +
module_param(default_mode, int, 0644);
- sms_info("loading FW to addr 0x%x size %d",
 
  +
MODULE_PARM_DESC(default_mode, "default firmware id (device mode)");
+ sms_info("loading FW to addr 0x%x Length %d",
 
  +
@@ -531,6 +531,7 @@ static int smscore_load_firmware_family2
mem_address, firmware->Length);
 
if (coredev->preload_handler) {
 
rc = coredev->preload_handler(coredev->context);
 
 
if (rc < 0)
 
if (rc < 0)
 
return rc;
 
return rc;
Line 115: Line 109:
 
/* PAGE_SIZE buffer shall be enough and dma aligned */
 
/* PAGE_SIZE buffer shall be enough and dma aligned */
 
msg = kmalloc(PAGE_SIZE, GFP_KERNEL | GFP_DMA);
 
msg = kmalloc(PAGE_SIZE, GFP_KERNEL | GFP_DMA);
@@ -575,6 +576,25 @@ static int smscore_load_firmware_family2
+
@@ -577,6 +578,25 @@ static int smscore_load_firmware_family2
 
 
 
if (rc >= 0) {
 
if (rc >= 0) {
Line 123: Line 117:
 
+ (struct SmsMsgData_ST *) msg;
 
+ (struct SmsMsgData_ST *) msg;
 
+ SMS_INIT_MSG(msg, MSG_SMS_UNKNOWNMESSAGE,
 
+ SMS_INIT_MSG(msg, MSG_SMS_UNKNOWNMESSAGE,
+ sizeof(struct SmsMsgHdr_ST) +
+
+ sizeof(struct SmsMsgHdr_ST) +
+ sizeof(u32)*3);
+
+ sizeof(u32)*3);
 
+ UnknownMsg->msgData[0]=0x00040260;
 
+ UnknownMsg->msgData[0]=0x00040260;
 
+ UnknownMsg->msgData[1]=0x0001691c;
 
+ UnknownMsg->msgData[1]=0x0001691c;
 
+ UnknownMsg->msgData[2]=0x00000000;
 
+ UnknownMsg->msgData[2]=0x00000000;
+
+
+
 
+ rc = coredev->sendrequest_handler(
 
+ rc = coredev->sendrequest_handler(
 
+ coredev->context, UnknownMsg
 
+ coredev->context, UnknownMsg
+ ,UnknownMsg->xMsgHeader.msgLength);
+
+ ,UnknownMsg->xMsgHeader.msgLength);
 
+ msleep(100);
 
+ msleep(100);
 
+ }
 
+ }
 
+ }
 
+ }
 
+
 
+
+ if (rc >= 0) {
+
+ if (rc >=0 ) {
+ if (coredev->mode == DEVICE_MODE_NONE) {
+
+ if(coredev->mode == DEVICE_MODE_NONE){
 
struct SmsMsgData_ST *TriggerMsg =
 
struct SmsMsgData_ST *TriggerMsg =
 
(struct SmsMsgData_ST *) msg;
 
(struct SmsMsgData_ST *) msg;
 
 
@@ -585,7 +605,8 @@ static int smscore_load_firmware_family2
+
@@ -587,7 +607,7 @@ static int smscore_load_firmware_family2
 
TriggerMsg->msgData[0] = firmware->StartAddress;
 
TriggerMsg->msgData[0] = firmware->StartAddress;
 
/* Entry point */
 
/* Entry point */
 
TriggerMsg->msgData[1] = 5; /* Priority */
 
TriggerMsg->msgData[1] = 5; /* Priority */
 
- TriggerMsg->msgData[2] = 0x200; /* Stack size */
 
- TriggerMsg->msgData[2] = 0x200; /* Stack size */
+// TriggerMsg->msgData[2] = 0x200; /* Stack size */
 
 
+ TriggerMsg->msgData[2] = 0x400; /* Stack size */
 
+ TriggerMsg->msgData[2] = 0x400; /* Stack size */
 
TriggerMsg->msgData[3] = 0; /* Parameter */
 
TriggerMsg->msgData[3] = 0; /* Parameter */
TriggerMsg->msgData[4] = 4; /* Task ID */
+
TriggerMsg->msgData[4] = 4; /* Task ID */
 
 
 
diff -urpN siano.orig/smscoreapi.h siano/smscoreapi.h
 
diff -urpN siano.orig/smscoreapi.h siano/smscoreapi.h
--- siano.orig/smscoreapi.h 2011-01-12 13:11:19.000000000 +0900
+
--- siano.orig/smscoreapi.h 2011-01-19 11:26:37.000000000 +0900
+++ siano/smscoreapi.h 2011-01-12 19:03:07.000000000 +0900
+
+++ siano/smscoreapi.h 2011-01-19 11:37:12.000000000 +0900
@@ -217,9 +217,12 @@ struct smscore_device_t {
+
@@ -216,10 +216,12 @@ struct smscore_device_t {
  +
#define MSG_SMS_GET_STATISTICS_REQ 615
 
#define MSG_SMS_HO_PER_SLICES_IND 630
 
#define MSG_SMS_HO_PER_SLICES_IND 630
 
#define MSG_SMS_SET_ANTENNA_CONFIG_REQ 651
 
#define MSG_SMS_SET_ANTENNA_CONFIG_REQ 651
#define MSG_SMS_SET_ANTENNA_CONFIG_RES 652
+
-#define MSG_SMS_SET_ANTENNA_CONFIG_RES 652
 
+#define MSG_SMS_GET_ISDBT_STATISTICS_REQ 653
 
+#define MSG_SMS_GET_ISDBT_STATISTICS_REQ 653
 
+#define MSG_SMS_GET_ISDBT_STATISTICS_RES 654
 
+#define MSG_SMS_GET_ISDBT_STATISTICS_RES 654
Line 163: Line 157:
 
#define MSG_SMS_DATA_DOWNLOAD_REQ 660
 
#define MSG_SMS_DATA_DOWNLOAD_REQ 660
 
#define MSG_SMS_DATA_DOWNLOAD_RES 661
 
#define MSG_SMS_DATA_DOWNLOAD_RES 661
+#define MSG_SMS_UNKNOWNMESSAGE 662
+
+#define MSG_SMS_UNKNOWNMESSAGE 662
 
#define MSG_SMS_SWDOWNLOAD_TRIGGER_REQ 664
 
#define MSG_SMS_SWDOWNLOAD_TRIGGER_REQ 664
 
#define MSG_SMS_SWDOWNLOAD_TRIGGER_RES 665
 
#define MSG_SMS_SWDOWNLOAD_TRIGGER_RES 665
 
#define MSG_SMS_SWDOWNLOAD_BACKDOOR_REQ 666
 
#define MSG_SMS_SWDOWNLOAD_BACKDOOR_REQ 666
@@ -458,6 +461,8 @@ struct SMSHOSTLIB_ISDBT_LAYER_STAT_ST {
+
@@ -458,6 +460,8 @@ struct SMSHOSTLIB_ISDBT_LAYER_STAT_ST {
 
};
 
};
 
 
 
struct SMSHOSTLIB_STATISTICS_ISDBT_ST {
 
struct SMSHOSTLIB_STATISTICS_ISDBT_ST {
 
+ u32 UnknownParam;
 
+ u32 UnknownParam;
+
+
+
 
u32 StatisticsType; /* Enumerator identifying the type of the
 
u32 StatisticsType; /* Enumerator identifying the type of the
 
* structure. Values are the same as
 
* structure. Values are the same as
 
* SMSHOSTLIB_DEVICE_MODES_E
 
* SMSHOSTLIB_DEVICE_MODES_E
 
diff -urpN siano.orig/smsdvb.c siano/smsdvb.c
 
diff -urpN siano.orig/smsdvb.c siano/smsdvb.c
--- siano.orig/smsdvb.c 2011-01-12 13:11:19.000000000 +0900
+
--- siano.orig/smsdvb.c 2011-01-19 11:26:37.000000000 +0900
+++ siano/smsdvb.c 2011-01-14 19:40:24.000000000 +0900
+
+++ siano/smsdvb.c 2011-01-19 11:48:51.000000000 +0900
@@ -60,7 +60,7 @@ struct smsdvb_client_t {
 
static struct list_head g_smsdvb_clients;
 
static struct mutex g_smsdvb_clientslock;
 
 
-static int sms_dbg;
 
+static int sms_dbg=3;
 
module_param_named(debug, sms_dbg, int, 0644);
 
MODULE_PARM_DESC(debug, "set debug level (info=1, adv=2 (or-able))");
 
 
 
@@ -331,6 +331,7 @@ static int smsdvb_onresponse(void *conte
 
@@ -331,6 +331,7 @@ static int smsdvb_onresponse(void *conte
 
is_status_update = true;
 
is_status_update = true;
 
break;
 
break;
 
}
 
}
+ case MSG_SMS_GET_ISDBT_STATISTICS_RES:
+
+ case MSG_SMS_GET_ISDBT_STATISTICS_RES:
 
case MSG_SMS_GET_STATISTICS_RES: {
 
case MSG_SMS_GET_STATISTICS_RES: {
 
union {
 
union {
Line 205: Line 190:
 
HIF_TASK,
 
HIF_TASK,
 
sizeof(struct SmsMsgHdr_ST), 0 };
 
sizeof(struct SmsMsgHdr_ST), 0 };
@@ -597,7 +598,7 @@ static int smsdvb_dvbt_set_frontend(stru
+
@@ -711,9 +712,44 @@ static int smsdvb_isdbt_set_frontend(str
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
 
struct smsdvb_client_t *client =
 
container_of(fe, struct smsdvb_client_t, frontend);
 
-
 
+
 
struct {
 
struct SmsMsgHdr_ST Msg;
 
u32 Data[3];
 
@@ -671,7 +672,7 @@ static int smsdvb_isdbt_set_frontend(str
 
} Msg;
 
 
fe->dtv_property_cache.delivery_system = SYS_ISDBT;
 
-
 
+
 
Msg.Msg.msgSrcId = DVBT_BDA_CONTROL_MSG_ID;
 
Msg.Msg.msgDstId = HIF_TASK;
 
Msg.Msg.msgFlags = 0;
 
@@ -711,9 +712,41 @@ static int smsdvb_isdbt_set_frontend(str
 
 
return -EINVAL;
 
return -EINVAL;
 
}
 
}
Line 240: Line 207:
 
+ Msg.Data[0] = 0;
 
+ Msg.Data[0] = 0;
 
+ Msg.Data[1] = BW_ISDBT_1SEG;
 
+ Msg.Data[1] = BW_ISDBT_1SEG;
  +
+ Msg.Data[2] = 12000000;
  +
+ Msg.Data[3] = 1;
 
+ sms_info("%s: freq %d segwidth %d segindex %d\n", __func__,
 
+ sms_info("%s: freq %d segwidth %d segindex %d\n", __func__,
 
+ c->frequency, c->isdbt_sb_segment_count,
 
+ c->frequency, c->isdbt_sb_segment_count,
Line 246: Line 215:
 
+ &client->tune_done);
 
+ &client->tune_done);
 
+ msleep(100);
 
+ msleep(100);
+
 
 
+
 
+
 
+ Msg.Data[0] = 50500000;
 
+ Msg.Data[0] = 50500000;
 
+ Msg.Data[1] = BW_ISDBT_3SEG;
 
+ Msg.Data[1] = BW_ISDBT_3SEG;
  +
+ Msg.Data[2] = 12000000;
  +
+ Msg.Data[3] = 1;
 
+ sms_info("%s: freq %d segwidth %d segindex %d\n", __func__,
 
+ sms_info("%s: freq %d segwidth %d segindex %d\n", __func__,
 
+ c->frequency, c->isdbt_sb_segment_count,
 
+ c->frequency, c->isdbt_sb_segment_count,
Line 266: Line 236:
 
sms_info("%s: freq %d segwidth %d segindex %d\n", __func__,
 
sms_info("%s: freq %d segwidth %d segindex %d\n", __func__,
 
c->frequency, c->isdbt_sb_segment_count,
 
c->frequency, c->isdbt_sb_segment_count,
@@ -778,6 +811,22 @@ static int smsdvb_sleep(struct dvb_front
+
@@ -778,6 +814,26 @@ static int smsdvb_sleep(struct dvb_front
 
sms_board_dvb3_event(client, DVB3_EVENT_SLEEP);
 
 
 
  +
sms_board_dvb3_event(client, DVB3_EVENT_SLEEP);
  +
 
+ struct {
 
+ struct {
+ struct SmsMsgHdr_ST Msg;
+
+ struct SmsMsgHdr_ST Msg;
 
+ u32 Data[4];
 
+ u32 Data[4];
 
+ } Msg;
 
+ } Msg;
Line 286: Line 256:
 
+ smsdvb_sendrequest_and_wait(client, &Msg, sizeof(Msg),
 
+ smsdvb_sendrequest_and_wait(client, &Msg, sizeof(Msg),
 
+ &client->tune_done);
 
+ &client->tune_done);
  +
+ msleep(100);
  +
+
  +
+
  +
+
 
return 0;
 
return 0;
 
}
 
}
+
diff -urpN siano.orig/smsdvb.mod.c siano/smsdvb.mod.c
 
--- siano.orig/smsdvb.mod.c 2011-01-12 13:11:19.000000000 +0900
 
+++ siano/smsdvb.mod.c 2011-01-12 20:10:51.000000000 +0900
 
@@ -42,6 +42,7 @@ __attribute__((section("__versions"))) =
 
{ 0x507e90c, "kmem_cache_alloc_notrace" },
 
{ 0x3cdbba9a, "malloc_sizes" },
 
{ 0xb6dfba8d, "sms_board_event" },
 
+ { 0xf9a482f9, "msleep" },
 
{ 0x50f0327f, "sms_board_lna_control" },
 
{ 0xedbfea0f, "smscore_get_device_mode" },
 
{ 0xc9225f0, "sms_board_led_feedback" },
 
   
   
Line 316: Line 279:
   
   
[[Category:ISDB-T]]
+
[[Category:ISDB-T_USB_Devices]]

Latest revision as of 13:24, 30 March 2011

CVOC-E121

An ISDB-T 1Seg USB Dongle with Siano Chipset. Works nicely with 1Seg by Brazilian TV stations.

The CVOC-E121 works with Linux kernel 2.6.35.10 with a kernel patch.

Overview/Features

  • USB interface
  • Inputs: Antenna, Remote

Components Used

  • Siano Nova B Digital Receiver

Other Images


Identification

# lsusb -v
Bus 001 Device 002: ID 187f:0201 Siano Mobile Silicon Nova B
Device Descriptor:
 bLength                18
 bDescriptorType         1
 bcdUSB               2.00
 bDeviceClass            0 (Defined at Interface level)
 bDeviceSubClass         0 
 bDeviceProtocol         0 
 bMaxPacketSize0        64
 idVendor           0x187f Siano Mobile Silicon
 idProduct          0x0201 Nova B
 bcdDevice            0.04
 iManufacturer           1 
 iProduct                2 
 iSerial                 0 
 bNumConfigurations      1
 Configuration Descriptor:
   bLength                 9
   bDescriptorType         2
   wTotalLength           32
   bNumInterfaces          1
   bConfigurationValue     1
   iConfiguration          0 
   bmAttributes         0x80
     (Bus Powered)
   MaxPower              100mA
   Interface Descriptor:
     bLength                 9
     bDescriptorType         4
     bInterfaceNumber        0
     bAlternateSetting       0
     bNumEndpoints           2
     bInterfaceClass       255 Vendor Specific Class
     bInterfaceSubClass    255 Vendor Specific Subclass
     bInterfaceProtocol    255 Vendor Specific Protocol
     iInterface              0 
     Endpoint Descriptor:
       bLength                 7
       bDescriptorType         5
       bEndpointAddress     0x81  EP 1 IN
       bmAttributes            2
         Transfer Type            Bulk
         Synch Type               None
         Usage Type               Data
       wMaxPacketSize     0x0200  1x 512 bytes
       bInterval               0
     Endpoint Descriptor:
       bLength                 7
       bDescriptorType         5
       bEndpointAddress     0x02  EP 2 OUT
       bmAttributes            2
         Transfer Type            Bulk
         Synch Type               None
         Usage Type               Data
       wMaxPacketSize     0x0200  1x 512 bytes
       bInterval               0

Making it Work

Firmware

You can use the driver for windows as well as for linux. When you install this device on your windows computer, installer in the CD-ROM will install 'isdbt_nova_12mhz_b0.inp' into the c:¥windows¥system32. You can copy and use this file to your linux firmware folder (ex. /lib/firmware).

Drivers

The driver comes with linux kernel drivers/media/dvb/siano/. However this driver needs a patch. You need to set SMS_SIANO_MDTV in the .config file during the kernel rebuild process.

Patch for Kernel Source

This is a patch for kernel version 2.6.35.10.

diff -urpN siano.orig/smscoreapi.c siano/smscoreapi.c
--- siano.orig/smscoreapi.c	2011-01-19 11:26:37.000000000 +0900
+++ siano/smscoreapi.c	2011-01-19 12:08:01.000000000 +0900
@@ -96,7 +96,7 @@ static struct mutex g_smscore_devicesloc
 static struct list_head g_smscore_registry;
 static struct mutex g_smscore_registrylock;
 
-static int default_mode = 4;
+static int default_mode = 6;
 
 module_param(default_mode, int, 0644);
 MODULE_PARM_DESC(default_mode, "default firmware id (device mode)");
@@ -531,6 +531,7 @@ static int smscore_load_firmware_family2
 		if (rc < 0)
 			return rc;
 	}
+	size-=12;
 
 	/* PAGE_SIZE buffer shall be enough and dma aligned */
 	msg = kmalloc(PAGE_SIZE, GFP_KERNEL | GFP_DMA);
@@ -577,6 +578,25 @@ static int smscore_load_firmware_family2
 
 	if (rc >= 0) {
 		if (coredev->mode == DEVICE_MODE_NONE) {
+			sms_debug("sending unknown command.");
+			struct SmsMsgData_ST *UnknownMsg =
+				(struct SmsMsgData_ST *) msg;
+			SMS_INIT_MSG(msg, MSG_SMS_UNKNOWNMESSAGE,
+				sizeof(struct SmsMsgHdr_ST) +
+				sizeof(u32)*3);
+			UnknownMsg->msgData[0]=0x00040260;
+			UnknownMsg->msgData[1]=0x0001691c;
+			UnknownMsg->msgData[2]=0x00000000;
+	
+			rc = coredev->sendrequest_handler(
+				coredev->context, UnknownMsg
+				,UnknownMsg->xMsgHeader.msgLength);
+			msleep(100);
+		}
+	}
+
+	if (rc >=0 ) {
+		if(coredev->mode == DEVICE_MODE_NONE){
 			struct SmsMsgData_ST *TriggerMsg =
 				(struct SmsMsgData_ST *) msg;
 
@@ -587,7 +607,7 @@ static int smscore_load_firmware_family2
 			TriggerMsg->msgData[0] = firmware->StartAddress;
 						/* Entry point */
 			TriggerMsg->msgData[1] = 5; /* Priority */
-			TriggerMsg->msgData[2] = 0x200; /* Stack size */
+			TriggerMsg->msgData[2] = 0x400; /* Stack size */
 			TriggerMsg->msgData[3] = 0; /* Parameter */
			TriggerMsg->msgData[4] = 4; /* Task ID */ 
 
diff -urpN siano.orig/smscoreapi.h siano/smscoreapi.h
--- siano.orig/smscoreapi.h	2011-01-19 11:26:37.000000000 +0900
+++ siano/smscoreapi.h	2011-01-19 11:37:12.000000000 +0900
@@ -216,10 +216,12 @@ struct smscore_device_t {
 #define MSG_SMS_GET_STATISTICS_REQ			615
 #define MSG_SMS_HO_PER_SLICES_IND			630
 #define MSG_SMS_SET_ANTENNA_CONFIG_REQ			651
-#define MSG_SMS_SET_ANTENNA_CONFIG_RES			652
+#define MSG_SMS_GET_ISDBT_STATISTICS_REQ		653
+#define MSG_SMS_GET_ISDBT_STATISTICS_RES		654
 #define MSG_SMS_SLEEP_RESUME_COMP_IND			655
 #define MSG_SMS_DATA_DOWNLOAD_REQ			660
 #define MSG_SMS_DATA_DOWNLOAD_RES			661
+#define MSG_SMS_UNKNOWNMESSAGE				662
 #define MSG_SMS_SWDOWNLOAD_TRIGGER_REQ		664
 #define MSG_SMS_SWDOWNLOAD_TRIGGER_RES		665
 #define MSG_SMS_SWDOWNLOAD_BACKDOOR_REQ		666
@@ -458,6 +460,8 @@ struct SMSHOSTLIB_ISDBT_LAYER_STAT_ST {
 };
 
 struct SMSHOSTLIB_STATISTICS_ISDBT_ST {
+	u32 UnknownParam;
+
 	u32 StatisticsType; /* Enumerator identifying the type of the
 				* structure.  Values are the same as
 				* SMSHOSTLIB_DEVICE_MODES_E
diff -urpN siano.orig/smsdvb.c siano/smsdvb.c
--- siano.orig/smsdvb.c	2011-01-19 11:26:37.000000000 +0900
+++ siano/smsdvb.c	2011-01-19 11:48:51.000000000 +0900
@@ -331,6 +331,7 @@ static int smsdvb_onresponse(void *conte
 		is_status_update = true;
 		break;
 	}
+	case MSG_SMS_GET_ISDBT_STATISTICS_RES:
 	case MSG_SMS_GET_STATISTICS_RES: {
 		union {
 			struct SMSHOSTLIB_STATISTICS_ISDBT_ST  isdbt;
@@ -476,7 +477,7 @@ static int smsdvb_sendrequest_and_wait(s
 static int smsdvb_send_statistics_request(struct smsdvb_client_t *client)
 {
 	int rc;
-	struct SmsMsgHdr_ST Msg = { MSG_SMS_GET_STATISTICS_REQ,
+	struct SmsMsgHdr_ST Msg = { MSG_SMS_GET_ISDBT_STATISTICS_REQ,
 				    DVBT_BDA_CONTROL_MSG_ID,
 				    HIF_TASK,
 				    sizeof(struct SmsMsgHdr_ST), 0 };
@@ -711,9 +712,44 @@ static int smsdvb_isdbt_set_frontend(str
 		return -EINVAL;
 	}
 
+	Msg.Data[0] = 50500000;
+	Msg.Data[1] = BW_ISDBT_3SEG;
+	Msg.Data[2] = 12000000;
+	Msg.Data[3] = 1;
+	sms_info("%s: freq %d segwidth %d segindex %d\n", __func__,
+		 c->frequency, c->isdbt_sb_segment_count,
+		 c->isdbt_sb_segment_idx);
+	smsdvb_sendrequest_and_wait(client, &Msg, sizeof(Msg),
+					   &client->tune_done);
+	msleep(200);
+
+	Msg.Data[0] = 0;
+	Msg.Data[1] = BW_ISDBT_1SEG;
+	Msg.Data[2] = 12000000;
+	Msg.Data[3] = 1;
+	sms_info("%s: freq %d segwidth %d segindex %d\n", __func__,
+		 c->frequency, c->isdbt_sb_segment_count,
+		 c->isdbt_sb_segment_idx);
+	smsdvb_sendrequest_and_wait(client, &Msg, sizeof(Msg),
+					   &client->tune_done);
+	msleep(100);
+
+	Msg.Data[0] = 50500000;
+	Msg.Data[1] = BW_ISDBT_3SEG;
+	Msg.Data[2] = 12000000;
+	Msg.Data[3] = 1;
+	sms_info("%s: freq %d segwidth %d segindex %d\n", __func__,
+		 c->frequency, c->isdbt_sb_segment_count,
+		 c->isdbt_sb_segment_idx);
+	smsdvb_sendrequest_and_wait(client, &Msg, sizeof(Msg),
+					   &client->tune_done);
+	msleep(100);
+
+
 	Msg.Data[0] = c->frequency;
+	Msg.Data[1] = BW_ISDBT_1SEG;
 	Msg.Data[2] = 12000000;
-	Msg.Data[3] = c->isdbt_sb_segment_idx;
+	Msg.Data[3] = 1;
 
 	sms_info("%s: freq %d segwidth %d segindex %d\n", __func__,
 		 c->frequency, c->isdbt_sb_segment_count,
@@ -778,6 +814,26 @@ static int smsdvb_sleep(struct dvb_front
 
	sms_board_dvb3_event(client, DVB3_EVENT_SLEEP);
  
+	struct {
+		struct SmsMsgHdr_ST	Msg; 
+		u32		Data[4];
+	} Msg;
+
+	Msg.Msg.msgSrcId  = DVBT_BDA_CONTROL_MSG_ID;
+	Msg.Msg.msgDstId  = HIF_TASK;
+	Msg.Msg.msgFlags  = 0;
+	Msg.Msg.msgType   = MSG_SMS_ISDBT_TUNE_REQ;
+	Msg.Msg.msgLength = sizeof(Msg);
+	Msg.Data[0] = 0;
+	Msg.Data[1] = BW_ISDBT_1SEG;
+	Msg.Data[2] = 12000000;
+	Msg.Data[3] = 1;
+	smsdvb_sendrequest_and_wait(client, &Msg, sizeof(Msg),
+					   &client->tune_done);
+	msleep(100);
+
+
+
 	return 0;
 }
   


Sample Kernel Output

usb 1-2: new high speed USB device using ehci_hcd and address 2
smscore_set_device_mode: firmware download success: isdbt_nova_12mhz_b0.inp
usbcore: registered new interface driver smsusb
DVB: registering new adapter (Siano Nova B Digital Receiver)
DVB: registering adapter 0 frontend 0 (Siano Mobile Digital MDTV Receiver)...

Remote Control Support

The package comes with IR remote, but not functional with this patch.

External Links