Difference between revisions of "CVOC-E121"

From LinuxTVWiki
Jump to: navigation, search
(Created page with '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 one 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
   #include "smsir.h"
+
   static struct list_head g_smscore_registry;
  #include "smsendian.h"
+
  static struct mutex g_smscore_registrylock;
 
+
-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
+
 
    
 
    
  mem_address = firmware->StartAddress;
+
-static int default_mode = 4;
 +
+static int default_mode = 6;
 
    
 
    
- sms_info("loading FW to addr 0x%x size %d",
+
  module_param(default_mode, int, 0644);
+ sms_info("loading FW to addr 0x%x Length %d",
+
  MODULE_PARM_DESC(default_mode, "default firmware id (device mode)");
  mem_address, firmware->Length);
+
@@ -531,6 +531,7 @@ static int smscore_load_firmware_family2
  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