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;
 }
 
