add board id to support OneImage solution
authorluowei <lw@rock-chips.com>
Tue, 3 Sep 2013 10:47:51 +0000 (18:47 +0800)
committerluowei <lw@rock-chips.com>
Tue, 3 Sep 2013 10:47:51 +0000 (18:47 +0800)
arch/arm/plat-rk/Kconfig
arch/arm/plat-rk/Makefile
arch/arm/plat-rk/bid/Kconfig [new file with mode: 0755]
arch/arm/plat-rk/bid/Makefile [new file with mode: 0755]
arch/arm/plat-rk/bid/board-id-flash.c [new file with mode: 0755]
arch/arm/plat-rk/bid/board-id-hw.c [new file with mode: 0755]
arch/arm/plat-rk/bid/board-id.c [new file with mode: 0755]
arch/arm/plat-rk/include/plat/board.h
include/linux/board-id-hw.h [new file with mode: 0755]
include/linux/board-id-operator.h [new file with mode: 0755]
include/linux/board-id.h [new file with mode: 0755]

index 4ec8fea9c287b1d15f30f9f2af698c1db7a9b492..2e12de51e2ef0d1cce233087de493bfa243e6c23 100755 (executable)
@@ -123,6 +123,7 @@ config RK_CLOCK_PROC
        depends on PROC_FS
 
 source arch/arm/plat-rk/rk_pm_tests/Kconfig
+source arch/arm/plat-rk/bid/Kconfig
 
 if !ARCH_RK29
 menu "Support for RK power manage"
index 73c2524089b3dda78fc7b285c4b342b8747d2bbb..3e80a937bc0e9183bbb5d1fa8494c0984ca4fcdf 100755 (executable)
@@ -19,3 +19,4 @@ obj-$(CONFIG_DVFS) += dvfs.o
 obj-y += pwm.o
 obj-$(CONFIG_RK_TIMER) += rk_timer.o
 obj-$(CONFIG_RK_PM_TESTS) += rk_pm_tests/
+obj-$(CONFIG_BOARD_ID) += bid/
diff --git a/arch/arm/plat-rk/bid/Kconfig b/arch/arm/plat-rk/bid/Kconfig
new file mode 100755 (executable)
index 0000000..6e14bc9
--- /dev/null
@@ -0,0 +1,19 @@
+menuconfig BOARD_ID\r
+       bool "board id support for OneImage solution"\r
+       default n       \r
+\r
+choice
+       depends on BOARD_ID\r
+       prompt  "board id type"\r
+       \r
+config BOARD_ID_FLASH\r
+bool "board id save in flash"\r
+\r
+config BOARD_ID_AUTO_XML\r
+bool "auto print cust.xml"\r
+       depends on BOARD_ID_FLASH\r
+\r
+config BOARD_ID_HW\r
+bool "board id get from hardware such as gpios"\r
+\r
+endchoice\r
diff --git a/arch/arm/plat-rk/bid/Makefile b/arch/arm/plat-rk/bid/Makefile
new file mode 100755 (executable)
index 0000000..dacc5df
--- /dev/null
@@ -0,0 +1,5 @@
+# rockchip board id select devices\r
+\r
+obj-$(CONFIG_BOARD_ID)                                 += board-id.o\r
+obj-$(CONFIG_BOARD_ID_FLASH)                           += board-id-flash.o\r
+obj-$(CONFIG_BOARD_ID_HW)                              += board-id-hw.o\r
diff --git a/arch/arm/plat-rk/bid/board-id-flash.c b/arch/arm/plat-rk/bid/board-id-flash.c
new file mode 100755 (executable)
index 0000000..5d80d36
--- /dev/null
@@ -0,0 +1,870 @@
+#include <linux/kernel.h>\r
+#include <linux/irq.h>\r
+#include <linux/gpio.h>\r
+#include <linux/input.h>\r
+#include <linux/platform_device.h>\r
+#include <linux/fs.h>\r
+#include <linux/uaccess.h>\r
+#include <linux/miscdevice.h>\r
+#include <linux/circ_buf.h>\r
+#include <linux/interrupt.h>\r
+#include <linux/miscdevice.h>\r
+#include <mach/iomux.h>\r
+#include <mach/gpio.h>\r
+#include <asm/gpio.h>\r
+#include <linux/delay.h>\r
+#include <linux/poll.h>\r
+#include <linux/wait.h>\r
+#include <linux/wakelock.h>\r
+#include <linux/workqueue.h>\r
+#include <linux/slab.h>\r
+#include <linux/proc_fs.h>\r
+\r
+\r
+#include <linux/file.h>\r
+#include <linux/mm.h>\r
+#include <linux/list.h>\r
+#include <linux/debugfs.h>\r
+#include <linux/mempolicy.h>\r
+#include <linux/sched.h>\r
+#include <asm/io.h>\r
+#include <asm/uaccess.h>\r
+#include <asm/cacheflush.h>\r
+#include <linux/fb.h>\r
+#include <plat/ipp.h>\r
+\r
+\r
+#include <linux/board-id.h>\r
+\r
+\r
+extern struct board_id_private_data *g_board_id;\r
+\r
+#if defined(CONFIG_BOARD_ID_AUTO_XML)\r
+\r
+#define        MAX_BUF_LEN     200\r
+static ssize_t board_id_proc_write(struct file *file, const char __user *buffer,\r
+                          size_t count, loff_t *data)\r
+{\r
+       char c;\r
+       int rc;\r
+       int i = 0, num = 0, j = 0;\r
+       struct board_id_private_data *board_id = g_board_id;\r
+       char buf[MAX_BUF_LEN];\r
+       struct device_id_name  *device_id_name_start = board_id->tp_id_name;    \r
+       struct area_id_name  *area_id_name_start = board_id->area_area_id_name;\r
+       int max_id = TP_ID_NUMS + LCD_ID_NUMS + KEY_ID_NUMS + CODEC_ID_NUMS + WIFI_ID_NUMS + BT_ID_NUMS + GPS_ID_NUMS + FM_ID_NUMS + MODEM_ID_NUMS + DDR_ID_NUMS + FLASH_ID_NUMS + HDMI_ID_NUMS\r
+               + BATTERY_ID_NUMS + CHARGE_ID_NUMS + BACKLIGHT_ID_NUMS + HEADSET_ID_NUMS + MICPHONE_ID_NUMS + SPEAKER_ID_NUMS + VIBRATOR_ID_NUMS + TV_ID_NUMS\r
+               + ECHIP_ID_NUMS + HUB_ID_NUMS + TPAD_ID_NUMS + PMIC_ID_NUMS + REGULATOR_ID_NUMS + RTC_ID_NUMS + CAMERA_FRONT_ID_NUMS + CAMERA_BACK_ID_NUMS + ANGLE_ID_NUMS + ACCEL_ID_NUMS\r
+               + COMPASS_ID_NUMS + GYRO_ID_NUMS + LIGHT_ID_NUMS + PROXIMITY_ID_NUMS + TEMPERATURE_ID_NUMS + PRESSURE_ID_NUMS;\r
+       \r
+       rc = get_user(c, buffer);\r
+       if (rc)\r
+       {\r
+               atomic_set(&board_id->flags.debug_flag, 0);\r
+               return rc; \r
+       }\r
+\r
+       \r
+       num = c - '0';\r
+\r
+       printk("%s command list:debug close:0,debug enable:1, create /data/board-id-data.txt :2, create /data/board-id-cust.xml:3, create /data/board-id-device.xml :4\n",__func__);\r
+\r
+       switch(num)\r
+       {\r
+               case 0:\r
+               case 1:                 \r
+               if(board_id)\r
+               atomic_set(&board_id->flags.debug_flag, num);\r
+               break;\r
+\r
+               case 2: \r
+               printk("%s:create /data/board-id-data.txt file\n",__func__);\r
+               if(!board_id->board_id_data_filp)\r
+               board_id->board_id_data_filp = filp_open("/data/board-id-data.txt",O_CREAT|O_TRUNC|O_RDWR,0);\r
+\r
+               if (board_id->board_id_data_filp)\r
+               {\r
+                 board_id->board_id_data_fs = get_fs();\r
+                 set_fs(get_ds());\r
+               }\r
+               \r
+               memset(buf, 0, MAX_BUF_LEN);\r
+               for(i=0; i<max_id; i++)\r
+               {                       \r
+                       if(device_id_name_start->type && *device_id_name_start->dev_name)\r
+                       {\r
+                               snprintf(buf, MAX_BUF_LEN, "type=%d,id=%d,name=%s:%s,%d", device_id_name_start->type, device_id_name_start->id, device_id_name_start->dev_name, device_id_name_start->description, device_id_name_start->device_id);                    \r
+                               buf[MAX_BUF_LEN-1] = '\n';\r
+                               board_id->board_id_data_filp->f_op->write(board_id->board_id_data_filp, buf, MAX_BUF_LEN, &board_id->board_id_data_filp->f_pos);\r
+                       }\r
+                       memset(buf,0,MAX_BUF_LEN);\r
+                       device_id_name_start++;\r
+               }\r
+\r
+               memset(buf, '\n', MAX_BUF_LEN);\r
+               board_id->board_id_data_filp->f_op->write(board_id->board_id_data_filp, buf, 3, &board_id->board_id_data_filp->f_pos);  \r
+               device_id_name_start = board_id->device_selected;\r
+               memset(buf, 0, MAX_BUF_LEN);\r
+               for(i=0; i<DEVICE_NUM_TYPES; i++)\r
+               {                       \r
+                       if(device_id_name_start->type && *device_id_name_start->dev_name)\r
+                       {\r
+                               snprintf(buf, MAX_BUF_LEN, "device_selected: type=%d,id=%d,name=%s:%s,%d", device_id_name_start->type, device_id_name_start->id, device_id_name_start->dev_name, device_id_name_start->description, device_id_name_start->device_id);                   \r
+                               buf[MAX_BUF_LEN-1] = '\n';\r
+                               board_id->board_id_data_filp->f_op->write(board_id->board_id_data_filp, buf, MAX_BUF_LEN, &board_id->board_id_data_filp->f_pos);                                \r
+                       }\r
+                       memset(buf, 0, MAX_BUF_LEN);\r
+                       device_id_name_start++;\r
+               }\r
+\r
+               memset(buf, '\n', MAX_BUF_LEN);\r
+               board_id->board_id_data_filp->f_op->write(board_id->board_id_data_filp, buf, 3, &board_id->board_id_data_filp->f_pos);  \r
+               area_id_name_start = board_id->area_area_id_name;\r
+               memset(buf, 0, MAX_BUF_LEN);\r
+               for(i=AREA_ID_NULL; i<AREA_ID_NUMS+1; i++)\r
+               {                       \r
+                       if(area_id_name_start->type && (strlen(area_id_name_start->locale_language) > 0))\r
+                       {\r
+                               if(i == AREA_ID_NUMS)\r
+                               snprintf(buf, MAX_BUF_LEN, "area_selected: type=%d,id=%d,name=%s_%s", area_id_name_start->type, area_id_name_start->id, area_id_name_start->locale_language, area_id_name_start->locale_region);\r
+                               else\r
+                               snprintf(buf, MAX_BUF_LEN, "type=%d,id=%d,name=%s_%s", area_id_name_start->type, area_id_name_start->id, area_id_name_start->locale_language, area_id_name_start->locale_region);                       \r
+                               buf[MAX_BUF_LEN-1] = '\n';\r
+                               board_id->board_id_data_filp->f_op->write(board_id->board_id_data_filp, buf, MAX_BUF_LEN, &board_id->board_id_data_filp->f_pos);                                \r
+                       }\r
+                       memset(buf, 0, MAX_BUF_LEN);\r
+                       area_id_name_start++;\r
+               }\r
+\r
+               \r
+               break;\r
+\r
+               case 3:         \r
+       \r
+               if(!board_id->board_id_area_filp)\r
+               board_id->board_id_area_filp = filp_open("/data/board-id-cust.xml",O_CREAT|O_TRUNC|O_RDWR,0);\r
+\r
+               if (board_id->board_id_area_filp)\r
+               {\r
+                 board_id->board_id_area_fs = get_fs();\r
+                 set_fs(get_ds());\r
+               }\r
+\r
+               board_id->board_id_area_filp->f_op->write(board_id->board_id_area_filp, "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n", 40, &board_id->board_id_area_filp->f_pos);\r
+\r
+               board_id->board_id_area_filp->f_op->write(board_id->board_id_area_filp, "<cust>\n", 7, &board_id->board_id_area_filp->f_pos);   \r
+               \r
+               area_id_name_start = board_id->area_area_id_name;\r
+               memset(buf, 0, MAX_BUF_LEN);\r
+               for(i=AREA_ID_NULL; i<AREA_ID_NUMS; i++)\r
+               {                                               \r
+                       if(area_id_name_start->type && (strlen(area_id_name_start->locale_language) > 0) && (strlen(area_id_name_start->locale_region) > 0))\r
+                       \r
+                       {\r
+                               memset(buf, 0, MAX_BUF_LEN);\r
+                               snprintf(buf, MAX_BUF_LEN, "\t<if tid=\"%d\" bid=\"%d\" area=\"%s\">\n",area_id_name_start->type, area_id_name_start->id, area_id_name_start->country_area);                                    \r
+                               board_id->board_id_area_filp->f_op->write(board_id->board_id_area_filp, buf, MAX_BUF_LEN, &board_id->board_id_area_filp->f_pos);\r
+\r
+                               memset(buf, 0, MAX_BUF_LEN);\r
+                               snprintf(buf, MAX_BUF_LEN, "\t\t<set name=\"persist.sys.language\" value=\"%s\"/>\n\t\t<set name=\"persist.sys.country\" value=\"%s\"/>\n\t\t<set name=\"persist.sys.timezone\" value=\"%s\"/>\n", area_id_name_start->locale_language, area_id_name_start->locale_region, area_id_name_start->timezone);\r
+                               board_id->board_id_area_filp->f_op->write(board_id->board_id_area_filp, buf, MAX_BUF_LEN, &board_id->board_id_area_filp->f_pos);\r
+\r
+\r
+                               memset(buf, 0, MAX_BUF_LEN);\r
+                               snprintf(buf, MAX_BUF_LEN, "\t\t<set name=\"ro.product.locale.language\" value=\"%s\"/>\n\t\t<set name=\"ro.product.locale.region\" value=\"%s\"/>\n", area_id_name_start->locale_language, area_id_name_start->locale_region);\r
+                               board_id->board_id_area_filp->f_op->write(board_id->board_id_area_filp, buf, MAX_BUF_LEN, &board_id->board_id_area_filp->f_pos);\r
+                               //memset(buf, 0, MAX_BUF_LEN);\r
+                               //snprintf(buf, MAX_BUF_LEN, "\t\t<cp src=\"cust/app/area.apk\" des=\"system/app/area.apk\" mode=\"0644\"/>\n \t\t<rm src=\"system/app/area.apk\" />\n");                                       \r
+                               //board_id->board_id_area_filp->f_op->write(board_id->board_id_area_filp, buf, MAX_BUF_LEN, &board_id->board_id_area_filp->f_pos);\r
+                               for(j=0; j<GMS_ID_NUMS; j++)\r
+                               {\r
+                                       if(xml_config[i].gms_flag[j])\r
+                                       {\r
+                                               memset(buf, 0, MAX_BUF_LEN);\r
+                                               snprintf(buf, MAX_BUF_LEN, "\t\t<rm src=\"cust/app/%s\" des=\"system/app/%s\" mode=\"0644\"/>\n", gms_name[j].gms_name, gms_name[j].gms_name);  \r
+                                               board_id->board_id_area_filp->f_op->write(board_id->board_id_area_filp, buf, MAX_BUF_LEN, &board_id->board_id_area_filp->f_pos);\r
+                                       }\r
+                               }\r
+                               \r
+                               //</if>         \r
+                               memset(buf, 0, MAX_BUF_LEN);\r
+                               snprintf(buf, MAX_BUF_LEN, "\t</if>\n");                                        \r
+                               board_id->board_id_area_filp->f_op->write(board_id->board_id_area_filp, buf, MAX_BUF_LEN, &board_id->board_id_area_filp->f_pos);\r
+                               \r
+                       }\r
+               \r
+                       memset(buf, 0, MAX_BUF_LEN);\r
+                       if(i < AREA_ID_NUMS)\r
+                       area_id_name_start++;\r
+                       \r
+               }\r
+               \r
+               memset(buf, 0, MAX_BUF_LEN);\r
+               snprintf(buf, MAX_BUF_LEN, "\t<if area=\"!China\" language=\"!zh\" local=\"!CN\">\n");\r
+               board_id->board_id_area_filp->f_op->write(board_id->board_id_area_filp, buf, MAX_BUF_LEN, &board_id->board_id_area_filp->f_pos);\r
+\r
+               memset(buf, 0, MAX_BUF_LEN);\r
+               snprintf(buf, MAX_BUF_LEN, "\t\t<cp src=\"cust/app/area.apk\" des=\"system/app/area.apk\" mode=\"0644\"/>\n \t\t<rm src=\"system/app/area.apk\" />\n\t</if>\n");                                        \r
+               board_id->board_id_area_filp->f_op->write(board_id->board_id_area_filp, buf, MAX_BUF_LEN, &board_id->board_id_area_filp->f_pos);        \r
+\r
+               board_id->board_id_area_filp->f_op->write(board_id->board_id_area_filp, "</cust>\n", 8, &board_id->board_id_area_filp->f_pos);\r
+               \r
+               printk("%s:/data/board-id-cust.xml file\n",__func__);\r
+               break;\r
+\r
+\r
+               case 4:                 \r
+               if(!board_id->board_id_device_filp)\r
+               board_id->board_id_device_filp = filp_open("/data/board-id-device.xml",O_CREAT|O_TRUNC|O_RDWR,0);\r
+\r
+               if (board_id->board_id_device_filp)\r
+               {\r
+                 board_id->board_id_device_fs = get_fs();\r
+                 set_fs(get_ds());\r
+               }\r
+               \r
+               board_id->board_id_device_filp->f_op->write(board_id->board_id_device_filp, "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n", 40, &board_id->board_id_device_filp->f_pos);\r
+\r
+               board_id->board_id_device_filp->f_op->write(board_id->board_id_device_filp, "<device>\n", 9, &board_id->board_id_device_filp->f_pos);   \r
+               \r
+               device_id_name_start = board_id->tp_id_name;\r
+               memset(buf, 0, MAX_BUF_LEN);\r
+\r
+               for(i=DEVICE_TYPE_TP; i<DEVICE_NUM_TYPES; i++)\r
+               {                       \r
+                       device_id_name_start = board_id->device_start_addr[i];\r
+                       \r
+                       device_id_name_start = board_id->tp_id_name;\r
+                       \r
+                       for(j=0; j<max_id; j++)\r
+                       {                       \r
+                               if((device_id_name_start->type == i) && (strlen(device_id_name_start->dev_name) > 0))\r
+                               {\r
+\r
+                                       memset(buf, 0, MAX_BUF_LEN);\r
+                                       snprintf(buf, MAX_BUF_LEN, "\t<if tid=\"%d\" bid=\"%d\" type=\"%s\" dev=\"%s\" desc=\"%s\">\n", device_id_name_start->type,  device_id_name_start->id, device_id_name_start->type_name, device_id_name_start->dev_name, device_id_name_start->description);                                     \r
+                                       board_id->board_id_device_filp->f_op->write(board_id->board_id_device_filp, buf, MAX_BUF_LEN, &board_id->board_id_device_filp->f_pos);\r
+\r
+                                       if(DEVICE_TYPE_KEY == device_id_name_start->type)\r
+                                       {\r
+                                               memset(buf, 0, MAX_BUF_LEN);   //added by luodh\r
+                                               snprintf(buf, MAX_BUF_LEN, "\t\t<set name=\"ro.product.locale.keylayout\" value=\"%s\"/>\n",  device_id_name_start->dev_name);\r
+                                               board_id->board_id_device_filp->f_op->write(board_id->board_id_device_filp, buf, MAX_BUF_LEN, &board_id->board_id_device_filp->f_pos);  \r
+                                       }\r
+                                       memset(buf, 0, MAX_BUF_LEN);\r
+                                       snprintf(buf, MAX_BUF_LEN, "\t\t<cp src=\"cust/so/type.dev.so\" des=\"system/lib/hw/type.dev.so\" mode=\"0644\"/>\n \t\t<rm src=\"system/lib/hw/type.dev.so\"/>\n");                                    \r
+                                       board_id->board_id_device_filp->f_op->write(board_id->board_id_device_filp, buf, MAX_BUF_LEN, &board_id->board_id_device_filp->f_pos);  \r
+\r
+                                       memset(buf, 0, MAX_BUF_LEN);\r
+                                       snprintf(buf, MAX_BUF_LEN, "\t</if>\n");\r
+                                       board_id->board_id_device_filp->f_op->write(board_id->board_id_device_filp, buf, MAX_BUF_LEN, &board_id->board_id_device_filp->f_pos);\r
+\r
+                                       memset(buf, 0, MAX_BUF_LEN);\r
+\r
+                                       //printk("%s:type=%d,id=%d\n",__func__,device_id_name_start->type, device_id_name_start->id);\r
+                                       \r
+                               }       \r
+                               \r
+                               device_id_name_start++; \r
+\r
+                       }\r
+\r
+                       memset(buf, 0, MAX_BUF_LEN);\r
+\r
+               }       \r
+                               \r
+               //board_id->board_id_device_filp->f_op->write(board_id->board_id_device_filp, "\t</type>\n", 9, &board_id->board_id_device_filp->f_pos);\r
+                               \r
+               board_id->board_id_device_filp->f_op->write(board_id->board_id_device_filp, "</device>\n", 10, &board_id->board_id_device_filp->f_pos);\r
+               \r
+               printk("%s:/data/board-id-device.xml file\n",__func__);\r
+               break;\r
+\r
+               default:\r
+               break;\r
+\r
+       }\r
+               \r
+       printk("%s %d\n", __func__, __LINE__);\r
+       return count; \r
+}\r
+\r
+static const struct file_operations board_id_proc_fops = {\r
+       .owner          = THIS_MODULE, \r
+       .write          = board_id_proc_write,\r
+};\r
+\r
+#endif\r
+\r
+static int board_id_open(struct inode *inode, struct file *file)\r
+{\r
+       struct board_id_private_data *board_id = g_board_id;\r
+       \r
+       return 0;\r
+}\r
+\r
+static int board_id_release(struct inode *inode, struct file *file)\r
+{      \r
+       struct board_id_private_data *board_id = g_board_id;\r
+\r
+       return 0;\r
+}\r
+\r
+static struct device_id_name device_selected[DEVICE_NUM_TYPES]; \r
+\r
+static long board_id_ioctl(struct file *file, unsigned int cmd, unsigned long arg)\r
+{\r
+       struct board_id_private_data *board_id = g_board_id;\r
+       void __user *argp = (void __user *)arg;\r
+       struct area_id_name area_select = board_id->area_select;\r
+       struct operator_id_name operator_select = board_id->operator_select;\r
+       struct reserve_id_name reserve_select = board_id->reserve_select;\r
+       struct device_id_name device_selected_temp, device_selected_last_temp;\r
+       struct area_id_name language_last_select;       \r
+       struct operator_id_name operator_last_select;\r
+       struct reserve_id_name reserve_last_select;\r
+       int result = 0;\r
+       int i = 0;\r
+       switch(cmd)\r
+       {\r
+               case BOARD_ID_IOCTL_READ_AREA_ID:\r
+                       mutex_lock(&board_id->operation_mutex);\r
+                       if(copy_to_user(argp, &area_select, sizeof(struct area_id_name)))\r
+                       {\r
+                               printk("%s:fail to copy area_id_name to user\n",__func__);\r
+                               mutex_unlock(&board_id->operation_mutex);\r
+                               return -EFAULT;\r
+                       }\r
+                       DBG_ID("%s:BOARD_ID_IOCTL_READ_LANGUAGE_ID:%s_%s\n",__func__,area_select.locale_language,area_select.locale_region);\r
+                       mutex_unlock(&board_id->operation_mutex);\r
+                       break;\r
+\r
+               case BOARD_ID_IOCTL_READ_OPERATOR_ID:\r
+                       mutex_lock(&board_id->operation_mutex);\r
+                       if(copy_to_user(argp, &operator_select, sizeof(struct operator_id_name)))\r
+                       {\r
+                               printk("%s:fail to copy operator_id_name to user\n",__func__);\r
+                               mutex_unlock(&board_id->operation_mutex);\r
+                               return -EFAULT;\r
+                       }\r
+                       DBG_ID("%s:BOARD_ID_IOCTL_READ_operator_ID:%s_%s\n",__func__,operator_select.operator_name,operator_select.locale_region);\r
+                       mutex_unlock(&board_id->operation_mutex);\r
+                       break;\r
+\r
+               case BOARD_ID_IOCTL_READ_RESERVE_ID:\r
+                       mutex_lock(&board_id->operation_mutex);\r
+                       if(copy_to_user(argp, &reserve_select, sizeof(struct reserve_id_name)))\r
+                       {\r
+                               printk("%s:fail to copy reserve_id_name to user\n",__func__);\r
+                               mutex_unlock(&board_id->operation_mutex);\r
+                               return -EFAULT;\r
+                       }\r
+                       DBG_ID("%s:BOARD_ID_IOCTL_READ_RESERVE_ID:%s,%s\n",__func__,reserve_select.reserve_name, reserve_select.locale_region);\r
+                       mutex_unlock(&board_id->operation_mutex);\r
+                       break;\r
+\r
+               case BOARD_ID_IOCTL_READ_STATUS:\r
+                       mutex_lock(&board_id->operation_mutex);\r
+                       if(copy_to_user(argp, &board_id->vendor_data[DEVICE_TYPE_STATUS], sizeof(board_id->vendor_data[DEVICE_TYPE_STATUS])))\r
+                       {\r
+                               printk("%s:line=%d:fail to copy vendor_data to user\n",__func__,__LINE__);      \r
+                               mutex_unlock(&board_id->operation_mutex);       \r
+                               return -EFAULT;\r
+                       }\r
+                       mutex_unlock(&board_id->operation_mutex);\r
+                       DBG_ID("%s:BOARD_ID_IOCTL_READ_STATUS=0x%x\n",__func__,board_id->vendor_data[DEVICE_TYPE_STATUS]);\r
+                       break;\r
+\r
+               case BOARD_ID_IOCTL_READ_VENDOR_DATA:   \r
+                       mutex_lock(&board_id->operation_mutex);                 \r
+                       DBG_ID("%s:BOARD_ID_IOCTL_READ_VENDOR_DATA:\n",__func__);\r
+                       if(copy_to_user(argp, board_id->vendor_data, sizeof(board_id->vendor_data)))\r
+                       {\r
+                               printk("%s:line=%d:fail to copy vendor_data to user\n",__func__,__LINE__);      \r
+                               mutex_unlock(&board_id->operation_mutex);       \r
+                               return -EFAULT;\r
+                       }\r
+                       mutex_unlock(&board_id->operation_mutex);\r
+                       \r
+                       break;\r
+               \r
+       }\r
+       \r
+       mutex_lock(&board_id->operation_mutex); \r
+       switch(cmd)\r
+       {       \r
+               \r
+               case BOARD_ID_IOCTL_READ_TP_ID:\r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_TP];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_LCD_ID:\r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_LCD];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_KEY_ID:\r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_KEY];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_CODEC_ID:\r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_CODEC];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_WIFI_ID:\r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_WIFI];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_BT_ID:\r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_BT];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_GPS_ID:\r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_GPS];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_FM_ID:\r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_FM];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_MODEM_ID:\r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_MODEM];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_DDR_ID:\r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_DDR];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_FLASH_ID:\r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_FLASH];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_HDMI_ID:\r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_HDMI];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_BATTERY_ID:\r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_BATTERY];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_CHARGE_ID:\r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_CHARGE];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_BACKLIGHT_ID:\r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_BACKLIGHT];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_HEADSET_ID:\r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_HEADSET];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_MICPHONE_ID:\r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_MICPHONE];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_SPEAKER_ID:\r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_SPEAKER];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_VIBRATOR_ID:   \r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_VIBRATOR];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_TV_ID:\r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_TV];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_ECHIP_ID:              \r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_ECHIP];\r
+                       break; \r
+               case BOARD_ID_IOCTL_READ_HUB_ID:                \r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_HUB];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_TPAD_ID:\r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_TPAD];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_PMIC_ID:\r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_PMIC];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_REGULATOR_ID:  \r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_REGULATOR];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_RTC_ID:\r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_RTC];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_CAMERA_FRONT_ID:       \r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_CAMERA_FRONT];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_CAMERA_BACK_ID:\r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_CAMERA_BACK];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_SENSOR_ANGLE_ID:\r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_ANGLE];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_SENSOR_ACCEL_ID:       \r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_ACCEL];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_SENSOR_COMPASS_ID:     \r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_COMPASS];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_SENSOR_GYRO_ID :       \r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_GYRO];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_SENSOR_LIGHT_ID:       \r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_LIGHT];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_SENSOR_PROXIMITY_ID:\r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_PROXIMITY];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_SENSOR_TEMPERATURE_ID: \r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_TEMPERATURE];\r
+                       break;\r
+               case BOARD_ID_IOCTL_READ_SENSOR_PRESSURE_ID:    \r
+                       device_selected_temp = board_id->device_selected[DEVICE_TYPE_PRESSURE];\r
+                       break;\r
+               \r
+               case BOARD_ID_IOCTL_WRITE_TP_ID: \r
+               case BOARD_ID_IOCTL_WRITE_LCD_ID: \r
+               case BOARD_ID_IOCTL_WRITE_KEY_ID: \r
+               case BOARD_ID_IOCTL_WRITE_CODEC_ID: \r
+               case BOARD_ID_IOCTL_WRITE_WIFI_ID: \r
+               case BOARD_ID_IOCTL_WRITE_BT_ID:        \r
+               case BOARD_ID_IOCTL_WRITE_GPS_ID: \r
+               case BOARD_ID_IOCTL_WRITE_FM_ID: \r
+               case BOARD_ID_IOCTL_WRITE_MODEM_ID:     \r
+               case BOARD_ID_IOCTL_WRITE_DDR_ID: \r
+               case BOARD_ID_IOCTL_WRITE_FLASH_ID: \r
+               case BOARD_ID_IOCTL_WRITE_HDMI_ID: \r
+               case BOARD_ID_IOCTL_WRITE_BATTERY_ID: \r
+               case BOARD_ID_IOCTL_WRITE_CHARGE_ID:  \r
+               case BOARD_ID_IOCTL_WRITE_BACKLIGHT_ID: \r
+               case BOARD_ID_IOCTL_WRITE_HEADSET_ID: \r
+               case BOARD_ID_IOCTL_WRITE_MICPHONE_ID: \r
+               case BOARD_ID_IOCTL_WRITE_SPEAKER_ID: \r
+               case BOARD_ID_IOCTL_WRITE_VIBRATOR_ID: \r
+               case BOARD_ID_IOCTL_WRITE_TV_ID: \r
+               case BOARD_ID_IOCTL_WRITE_ECHIP_ID:\r
+               case BOARD_ID_IOCTL_WRITE_HUB_ID:\r
+               case BOARD_ID_IOCTL_WRITE_PMIC_ID: \r
+               case BOARD_ID_IOCTL_WRITE_REGULATOR_ID: \r
+               case BOARD_ID_IOCTL_WRITE_RTC_ID: \r
+               case BOARD_ID_IOCTL_WRITE_CAMERA_FRONT_ID: \r
+               case BOARD_ID_IOCTL_WRITE_CAMERA_BACK_ID:       \r
+               case BOARD_ID_IOCTL_WRITE_SENSOR_ANGLE_ID: \r
+               case BOARD_ID_IOCTL_WRITE_SENSOR_ACCEL_ID: \r
+               case BOARD_ID_IOCTL_WRITE_SENSOR_COMPASS_ID: \r
+               case BOARD_ID_IOCTL_WRITE_SENSOR_GYRO_ID: \r
+               case BOARD_ID_IOCTL_WRITE_SENSOR_LIGHT_ID: \r
+               case BOARD_ID_IOCTL_WRITE_SENSOR_PROXIMITY_ID:\r
+               case BOARD_ID_IOCTL_WRITE_SENSOR_TEMPERATURE_ID:\r
+               case BOARD_ID_IOCTL_READ_DEVICE_NAME_BY_ID:\r
+                       if(copy_from_user(&device_selected_temp, argp, sizeof(struct device_id_name)))\r
+                       {\r
+                               printk("%s:line=%d:fail to copy device_id_name from user\n",__func__, __LINE__);        \r
+                               mutex_unlock(&board_id->operation_mutex);       \r
+                               return -EFAULT;\r
+                       }\r
+                       DBG_ID("%s:write: type=%d,id=%d,name=%s\n",__func__, (int)device_selected_temp.type, (int)device_selected_temp.id, device_selected_temp.dev_name);\r
+                       break;\r
+                       \r
+       }       \r
+\r
+       switch(cmd)\r
+       {       \r
+               case BOARD_ID_IOCTL_READ_TP_ID:\r
+               case BOARD_ID_IOCTL_READ_LCD_ID:\r
+               case BOARD_ID_IOCTL_READ_KEY_ID:\r
+               case BOARD_ID_IOCTL_READ_CODEC_ID:\r
+               case BOARD_ID_IOCTL_READ_WIFI_ID:\r
+               case BOARD_ID_IOCTL_READ_BT_ID:\r
+               case BOARD_ID_IOCTL_READ_GPS_ID:\r
+               case BOARD_ID_IOCTL_READ_FM_ID:\r
+               case BOARD_ID_IOCTL_READ_MODEM_ID:\r
+               case BOARD_ID_IOCTL_READ_DDR_ID:\r
+               case BOARD_ID_IOCTL_READ_FLASH_ID:\r
+               case BOARD_ID_IOCTL_READ_HDMI_ID:\r
+               case BOARD_ID_IOCTL_READ_BATTERY_ID:\r
+               case BOARD_ID_IOCTL_READ_CHARGE_ID:\r
+               case BOARD_ID_IOCTL_READ_BACKLIGHT_ID:\r
+               case BOARD_ID_IOCTL_READ_HEADSET_ID:\r
+               case BOARD_ID_IOCTL_READ_MICPHONE_ID:\r
+               case BOARD_ID_IOCTL_READ_SPEAKER_ID:\r
+               case BOARD_ID_IOCTL_READ_VIBRATOR_ID:   \r
+               case BOARD_ID_IOCTL_READ_TV_ID:\r
+               case BOARD_ID_IOCTL_READ_ECHIP_ID:\r
+               case BOARD_ID_IOCTL_READ_HUB_ID:        \r
+               case BOARD_ID_IOCTL_READ_PMIC_ID:\r
+               case BOARD_ID_IOCTL_READ_REGULATOR_ID:  \r
+               case BOARD_ID_IOCTL_READ_RTC_ID:\r
+               case BOARD_ID_IOCTL_READ_CAMERA_FRONT_ID:       \r
+               case BOARD_ID_IOCTL_READ_CAMERA_BACK_ID:                \r
+               case BOARD_ID_IOCTL_READ_SENSOR_ANGLE_ID:       \r
+               case BOARD_ID_IOCTL_READ_SENSOR_ACCEL_ID:       \r
+               case BOARD_ID_IOCTL_READ_SENSOR_COMPASS_ID:     \r
+               case BOARD_ID_IOCTL_READ_SENSOR_GYRO_ID :       \r
+               case BOARD_ID_IOCTL_READ_SENSOR_LIGHT_ID:       \r
+               case BOARD_ID_IOCTL_READ_SENSOR_PROXIMITY_ID:\r
+               case BOARD_ID_IOCTL_READ_SENSOR_TEMPERATURE_ID:                         \r
+               case BOARD_ID_IOCTL_READ_SENSOR_PRESSURE_ID:    \r
+                       if(copy_to_user(argp, &device_selected_temp, sizeof(struct device_id_name)))\r
+                       {\r
+                               printk("%s:line=%d:fail to copy device_selected_temp.dev_name=%s to user\n",__func__,__LINE__,device_selected_temp.dev_name);   \r
+                               mutex_unlock(&board_id->operation_mutex);       \r
+                               return -EFAULT;\r
+                       }\r
+                       DBG_ID("%s:read: type=%d,id=%d,name=%s\n",__func__, (int)device_selected_temp.type, (int)device_selected_temp.id, device_selected_temp.dev_name);\r
+                       break;\r
+                       \r
+\r
+\r
+               case BOARD_ID_IOCTL_WRITE_TP_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_TP] = device_selected_temp;\r
+                       break; \r
+               case BOARD_ID_IOCTL_WRITE_LCD_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_LCD] = device_selected_temp;\r
+                       break; \r
+               case BOARD_ID_IOCTL_WRITE_KEY_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_KEY] = device_selected_temp;\r
+                       break; \r
+               case BOARD_ID_IOCTL_WRITE_CODEC_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_CODEC] = device_selected_temp;\r
+                       break; \r
+               case BOARD_ID_IOCTL_WRITE_WIFI_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_WIFI] = device_selected_temp;\r
+                       break; \r
+               case BOARD_ID_IOCTL_WRITE_BT_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_BT] = device_selected_temp;\r
+                       break;  \r
+               case BOARD_ID_IOCTL_WRITE_GPS_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_GPS] = device_selected_temp;\r
+                       break; \r
+               case BOARD_ID_IOCTL_WRITE_FM_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_FM] = device_selected_temp;\r
+                       break; \r
+               case BOARD_ID_IOCTL_WRITE_MODEM_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_MODEM] = device_selected_temp;\r
+                       break;  \r
+               case BOARD_ID_IOCTL_WRITE_DDR_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_DDR] = device_selected_temp;\r
+                       break; \r
+               case BOARD_ID_IOCTL_WRITE_FLASH_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_FLASH] = device_selected_temp;\r
+                       break; \r
+               case BOARD_ID_IOCTL_WRITE_HDMI_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_HDMI] = device_selected_temp;\r
+                       break; \r
+               case BOARD_ID_IOCTL_WRITE_BATTERY_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_BATTERY] = device_selected_temp;\r
+                       break; \r
+               case BOARD_ID_IOCTL_WRITE_CHARGE_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_CHARGE] = device_selected_temp;\r
+                       break;  \r
+               case BOARD_ID_IOCTL_WRITE_BACKLIGHT_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_BACKLIGHT] = device_selected_temp;\r
+                       break; \r
+               case BOARD_ID_IOCTL_WRITE_HEADSET_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_HEADSET] = device_selected_temp;\r
+                       break; \r
+               case BOARD_ID_IOCTL_WRITE_MICPHONE_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_MICPHONE] = device_selected_temp;\r
+                       break; \r
+               case BOARD_ID_IOCTL_WRITE_SPEAKER_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_SPEAKER] = device_selected_temp;\r
+                       break; \r
+               case BOARD_ID_IOCTL_WRITE_VIBRATOR_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_VIBRATOR] = device_selected_temp;\r
+                       break; \r
+               case BOARD_ID_IOCTL_WRITE_TV_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_TV] = device_selected_temp;\r
+                       break; \r
+               case BOARD_ID_IOCTL_WRITE_ECHIP_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_ECHIP] = device_selected_temp;\r
+                       break; \r
+               case BOARD_ID_IOCTL_WRITE_HUB_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_HUB] = device_selected_temp;\r
+                       break; \r
+               case BOARD_ID_IOCTL_WRITE_TPAD_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_TPAD] = device_selected_temp;\r
+                       break; \r
+               case BOARD_ID_IOCTL_WRITE_PMIC_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_PMIC] = device_selected_temp;\r
+                       break; \r
+               case BOARD_ID_IOCTL_WRITE_REGULATOR_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_REGULATOR] = device_selected_temp;\r
+                       break; \r
+               case BOARD_ID_IOCTL_WRITE_RTC_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_RTC] = device_selected_temp;\r
+                       break; \r
+               case BOARD_ID_IOCTL_WRITE_CAMERA_FRONT_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_CAMERA_FRONT] = device_selected_temp;\r
+                       break; \r
+               case BOARD_ID_IOCTL_WRITE_CAMERA_BACK_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_CAMERA_BACK] = device_selected_temp;\r
+                       break;  \r
+               case BOARD_ID_IOCTL_WRITE_SENSOR_ANGLE_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_ANGLE] = device_selected_temp;\r
+                       break; \r
+               case BOARD_ID_IOCTL_WRITE_SENSOR_ACCEL_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_ACCEL] = device_selected_temp;\r
+                       break; \r
+               case BOARD_ID_IOCTL_WRITE_SENSOR_COMPASS_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_COMPASS] = device_selected_temp;\r
+                       break; \r
+               case BOARD_ID_IOCTL_WRITE_SENSOR_GYRO_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_GYRO] = device_selected_temp;\r
+                       break; \r
+               case BOARD_ID_IOCTL_WRITE_SENSOR_LIGHT_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_LIGHT] = device_selected_temp;\r
+                       break; \r
+               case BOARD_ID_IOCTL_WRITE_SENSOR_PROXIMITY_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_PROXIMITY] = device_selected_temp;\r
+                       break;\r
+               case BOARD_ID_IOCTL_WRITE_SENSOR_TEMPERATURE_ID:\r
+                       board_id->device_selected[DEVICE_TYPE_TEMPERATURE] = device_selected_temp;\r
+                       break;\r
+                       \r
+       }\r
+\r
+       \r
+       mutex_unlock(&board_id->operation_mutex);\r
+\r
+       switch(cmd)\r
+       {\r
+               case BOARD_ID_IOCTL_READ_DEVICE_NAME_BY_ID:             \r
+                       mutex_lock(&board_id->operation_mutex); \r
+                       if(&board_id->device_start_addr[(unsigned)device_selected_temp.type][(unsigned)device_selected_temp.id])\r
+                       memcpy(&device_selected_last_temp, &board_id->device_start_addr[(unsigned)device_selected_temp.type][(unsigned)device_selected_temp.id], sizeof(struct device_id_name));\r
+                       else\r
+                       {\r
+                               printk("%s:fail to find device,type=%d,id=%d\n",__func__, device_selected_temp.type, device_selected_temp.id);\r
+                               mutex_unlock(&board_id->operation_mutex);\r
+                               return -1;\r
+                       }\r
+                       if(copy_to_user(argp, &device_selected_last_temp, sizeof(struct device_id_name)))\r
+                       {\r
+                               printk("%s:line=%d:fail to copy device_selected_last_temp.dev_name=%s to user\n",__func__,__LINE__,device_selected_last_temp.dev_name); \r
+                               mutex_unlock(&board_id->operation_mutex);       \r
+                               return -EFAULT;\r
+                       }\r
+                       DBG_ID("%s:read: type=%d,id=%d,name=%s\n",__func__, (int)device_selected_last_temp.type, (int)device_selected_last_temp.id, device_selected_last_temp.dev_name);\r
+                       \r
+                       mutex_unlock(&board_id->operation_mutex);       \r
+                       break;\r
+\r
+               case BOARD_ID_IOCTL_READ_AREA_NAME_BY_ID:\r
+                       mutex_lock(&board_id->operation_mutex); \r
+                       if(copy_from_user(&language_last_select, argp, sizeof(struct area_id_name)))\r
+                       {\r
+                               printk("%s:line=%d:fail to copy area_id_name from user\n",__func__, __LINE__);  \r
+                               mutex_unlock(&board_id->operation_mutex);       \r
+                               return -EFAULT;\r
+                       }                       \r
+                       \r
+                       if(copy_to_user(argp, &board_id->area_area_id_name[language_last_select.id], sizeof(struct area_id_name)))\r
+                       {\r
+                               printk("%s:fail to copy area_id_name to user\n",__func__);\r
+                               mutex_unlock(&board_id->operation_mutex);\r
+                               return -EFAULT;\r
+                       }\r
+                       \r
+                       mutex_unlock(&board_id->operation_mutex);\r
+                       \r
+                       DBG_ID("%s:BOARD_ID_IOCTL_READ_LANGUAGE_NAME_BY_ID:%s_%s\n",__func__,language_last_select.locale_language,language_last_select.locale_region);\r
+                       break;  \r
+\r
+               case BOARD_ID_IOCTL_READ_OPERATOR_NAME_BY_ID:\r
+                       mutex_lock(&board_id->operation_mutex); \r
+                       if(copy_from_user(&operator_last_select, argp, sizeof(struct operator_id_name)))\r
+                       {\r
+                               printk("%s:line=%d:fail to copy operator_id_name from user\n",__func__, __LINE__);      \r
+                               mutex_unlock(&board_id->operation_mutex);       \r
+                               return -EFAULT;\r
+                       }       \r
+\r
+                       for(i=OPERATOR_ID_20000_NO_OPERATOR; i<OPERATOR_ID_NUMS; i++)\r
+                       {\r
+                               if(operator_last_select.id == board_id->area_operator_id_name[i].id)\r
+                               {\r
+                                       if(copy_to_user(argp, &board_id->area_operator_id_name[i], sizeof(struct operator_id_name)))\r
+                                       {\r
+                                               printk("%s:fail to copy operator_id_name to user\n",__func__);\r
+                                               mutex_unlock(&board_id->operation_mutex);\r
+                                               return -EFAULT;\r
+                                       }\r
+                               }\r
+                       }\r
+                       mutex_unlock(&board_id->operation_mutex);\r
+                       \r
+                       DBG_ID("%s:BOARD_ID_IOCTL_READ_OPERATOR_NAME_BY_ID:%s_%s\n",__func__,operator_last_select.operator_name,operator_last_select.locale_region);\r
+                       break;  \r
+\r
+               case BOARD_ID_IOCTL_READ_RESERVE_NAME_BY_ID:\r
+                       mutex_lock(&board_id->operation_mutex); \r
+                       if(copy_from_user(&reserve_last_select, argp, sizeof(struct reserve_id_name)))\r
+                       {\r
+                               printk("%s:line=%d:fail to copy reserve_id_name from user\n",__func__, __LINE__);       \r
+                               mutex_unlock(&board_id->operation_mutex);       \r
+                               return -EFAULT;\r
+                       }                       \r
+                       \r
+                       if(copy_to_user(argp, &board_id->area_reserve_id_name[reserve_last_select.id], sizeof(struct reserve_id_name)))\r
+                       {\r
+                               printk("%s:fail to copy reserve_id_name to user\n",__func__);\r
+                               mutex_unlock(&board_id->operation_mutex);\r
+                               return -EFAULT;\r
+                       }\r
+                       \r
+                       mutex_unlock(&board_id->operation_mutex);\r
+                       \r
+                       DBG_ID("%s:BOARD_ID_IOCTL_READ_RESERVE_NAME_BY_ID:%s_%s\n",__func__,reserve_last_select.reserve_name, reserve_last_select.locale_region);\r
+                       break;  \r
+                               \r
+       }\r
+\r
+       DBG_ID("%s:cmd=%d\n",__func__,cmd);\r
+       return 0;\r
+}\r
+\r
+static int __init board_id_init(void)\r
+{\r
+       int result ;    \r
+       struct proc_dir_entry *board_id_proc_entry;\r
+       \r
+       struct board_id_private_data *board_id = g_board_id;\r
+\r
+       if(!board_id)\r
+               return -1;\r
+\r
+       board_id->id_fops.owner = THIS_MODULE;\r
+       board_id->id_fops.open = board_id_open;\r
+       board_id->id_fops.release = board_id_release;   \r
+       board_id->id_fops.unlocked_ioctl = board_id_ioctl;\r
+\r
+       board_id->id_miscdev.minor = MISC_DYNAMIC_MINOR;\r
+       board_id->id_miscdev.name = "board_id_misc";\r
+       board_id->id_miscdev.fops = &board_id->id_fops;\r
+       result = misc_register(&board_id->id_miscdev);\r
+       if(result < 0) {\r
+               printk("%s:misc_register err,ret=%d\n",__func__,result);\r
+               return result;\r
+       }\r
+\r
+       \r
+#if defined(CONFIG_BOARD_ID_AUTO_XML)\r
+       board_id_proc_entry = proc_create("driver/board_id_dbg", 0660, NULL, &board_id_proc_fops); \r
+#endif\r
+       board_id->board_id_data_filp = NULL;    \r
+       board_id->board_id_area_filp = NULL;    \r
+       board_id->board_id_device_filp = NULL;\r
+\r
+       printk("%s:\n",__func__);\r
+\r
+       return 0;\r
+       \r
+}\r
+\r
+static void __exit board_id_exit(void)\r
+{\r
+       struct board_id_private_data *board_id = g_board_id;\r
+\r
+       if(!board_id)\r
+               return ;\r
+\r
+       misc_deregister(&board_id->id_miscdev);\r
+\r
+       set_fs(board_id->board_id_data_fs);\r
+       filp_close(board_id->board_id_data_filp, NULL);\r
+\r
+       set_fs(board_id->board_id_area_fs);\r
+       filp_close(board_id->board_id_area_filp, NULL);\r
+\r
+       set_fs(board_id->board_id_device_fs);\r
+       filp_close(board_id->board_id_device_filp, NULL);\r
+}\r
+\r
+subsys_initcall_sync(board_id_init);\r
+module_exit(board_id_exit);\r
+\r
+MODULE_AUTHOR("ROCKCHIP Corporation:lw@rock-chips.com");\r
+MODULE_DESCRIPTION("rockchip board id misc interface for vendor");\r
+MODULE_LICENSE("GPL");\r
diff --git a/arch/arm/plat-rk/bid/board-id-hw.c b/arch/arm/plat-rk/bid/board-id-hw.c
new file mode 100755 (executable)
index 0000000..760732b
--- /dev/null
@@ -0,0 +1,163 @@
+#include <linux/kernel.h>\r
+#include <linux/init.h>\r
+#include <linux/platform_device.h>\r
+#include <linux/input.h>\r
+#include <linux/io.h>\r
+#include <linux/delay.h>\r
+#include <linux/i2c.h>\r
+#include <linux/skbuff.h>\r
+\r
+#include <mach/board.h>\r
+#include <mach/io.h>\r
+#include <mach/gpio.h>\r
+#include <mach/iomux.h>\r
+\r
+#include <linux/board-id.h>\r
+\r
+#if 0\r
+#define DBG(x...)  printk(x)\r
+#else\r
+#define DBG(x...)\r
+#endif\r
+\r
+extern void kernel_restart(char *cmd);\r
+\r
+struct board_id_hw_private_data {\r
+       struct mutex id_mutex;\r
+       int last_value[16];\r
+       int board_id;\r
+       struct board_id_platform_data *pdata;\r
+};\r
+\r
+static struct board_id_hw_private_data *g_id;\r
+\r
+\r
+enum board_id_hw get_board_id_hw(void)\r
+{\r
+       struct board_id_hw_private_data *id = g_id;\r
+       DBG("%s:id:0x%x\n",__func__,id->board_id);\r
+       return id->board_id;\r
+}\r
+EXPORT_SYMBOL(get_board_id_hw);\r
+\r
+static int _get_board_id_hw(struct board_id_hw_private_data *id)\r
+{\r
+       int result = 0;\r
+       int value1 = 0, value2 = 0, value3 = 0;\r
+       int i = 0, j = 0;\r
+       \r
+       id->board_id = -1;\r
+                       \r
+       for(i=0; i<id->pdata->num_gpio; i++)\r
+       {\r
+               gpio_request(id->pdata->gpio_pin[i],"gpio_board_id");\r
+               gpio_direction_input(id->pdata->gpio_pin[i]);\r
+               gpio_pull_updown(id->pdata->gpio_pin[i], PullDisable);\r
+               for(j=0; j<1000; j++)\r
+               {\r
+                       value1 = gpio_get_value(id->pdata->gpio_pin[i]);\r
+                       if(value1 < 0)\r
+                               continue;\r
+                       mdelay(1);\r
+                       value2 = gpio_get_value(id->pdata->gpio_pin[i]);\r
+                       if(value2 < 0)\r
+                               continue;\r
+                       mdelay(1);\r
+                       value3 = gpio_get_value(id->pdata->gpio_pin[i]);\r
+                       if(value3 < 0)\r
+                               continue;\r
+                       if((value1 == value2) && (value2 == value3))\r
+                               break;\r
+               }\r
+               if(j >= 1000)\r
+               {\r
+                       printk("%s:hareware error,gpio level changed always!\n",__func__);                      \r
+                       kernel_restart(NULL);\r
+               }\r
+               \r
+               result = (value1 << i) | result;\r
+               \r
+               DBG("%s:gpio:%d,value:%d\n",__func__,id->pdata->gpio_pin[i],value1);\r
+       }\r
+\r
+       id->board_id = result;\r
+\r
+       \r
+       DBG("%s:num=%d,id=0x%x\n",__func__,id->pdata->num_gpio, id->board_id);\r
+\r
+       return result;\r
+}\r
+\r
+\r
+static int __devinit board_id_hw_probe(struct platform_device *pdev)\r
+{\r
+       struct board_id_platform_data *pdata = pdev->dev.platform_data;\r
+       struct board_id_hw_private_data *id = NULL;\r
+       int result = 0;\r
+\r
+       if(!pdata)\r
+               return -ENOMEM;\r
+       \r
+       id = kzalloc(sizeof(struct board_id_hw_private_data), GFP_KERNEL);\r
+       if (id == NULL) {\r
+               dev_err(&pdev->dev, "Unable to allocate private data\n");\r
+               return -ENOMEM;\r
+       }\r
+\r
+       id->pdata = pdata;\r
+       \r
+       if(pdata->init_platform_hw)\r
+               pdata->init_platform_hw();\r
+       \r
+       result = _get_board_id_hw(id);\r
+\r
+       if(pdata->init_parameter)\r
+               pdata->init_parameter(id->board_id);\r
+\r
+       if(pdata->exit_platform_hw)\r
+               pdata->exit_platform_hw();\r
+       \r
+       platform_set_drvdata(pdev, id); \r
+       g_id = id;\r
+       \r
+       printk("%s:board id :0x%x\n",__func__,result);\r
+       return 0;\r
+}\r
+\r
+static int __devexit board_id_hw_remove(struct platform_device *pdev)\r
+{\r
+       //struct board_id_platform_data *pdata = pdev->dev.platform_data;\r
+       struct board_id_hw_private_data *id = platform_get_drvdata(pdev);\r
+       \r
+       kfree(id);\r
+       \r
+       return 0;\r
+}\r
+\r
+static struct platform_driver board_id_hw_driver = {\r
+       .probe          = board_id_hw_probe,\r
+       .remove         = __devexit_p(board_id_hw_remove),\r
+       .driver         = {\r
+               .name   = "board_id_hw",\r
+               .owner  = THIS_MODULE,\r
+       },\r
+};\r
+\r
+static int __init board_id_hw_init(void)\r
+{\r
+       return platform_driver_register(&board_id_hw_driver);\r
+}\r
+\r
+static void __exit board_id_hw_exit(void)\r
+{\r
+       platform_driver_unregister(&board_id_hw_driver);\r
+}\r
+\r
+arch_initcall_sync(board_id_hw_init);\r
+module_exit(board_id_hw_exit);\r
+\r
+MODULE_AUTHOR("ROCKCHIP Corporation:lw@rock-chips.com");\r
+MODULE_DESCRIPTION("Interface for get board id");\r
+MODULE_LICENSE("GPL");\r
+\r
+\r
diff --git a/arch/arm/plat-rk/bid/board-id.c b/arch/arm/plat-rk/bid/board-id.c
new file mode 100755 (executable)
index 0000000..17f5cc8
--- /dev/null
@@ -0,0 +1,1184 @@
+#include <linux/module.h>\r
+#include <linux/kernel.h>\r
+#include <linux/irq.h>\r
+#include <linux/gpio.h>\r
+#include <linux/input.h>\r
+#include <linux/platform_device.h>\r
+#include <linux/fs.h>\r
+#include <linux/uaccess.h>\r
+#include <linux/miscdevice.h>\r
+#include <linux/circ_buf.h>\r
+#include <linux/interrupt.h>\r
+#include <linux/miscdevice.h>\r
+#include <mach/iomux.h>\r
+#include <mach/gpio.h>\r
+#include <asm/gpio.h>\r
+#include <linux/delay.h>\r
+#include <linux/poll.h>\r
+#include <linux/wait.h>\r
+#include <linux/wakelock.h>\r
+#include <linux/workqueue.h>\r
+#include <linux/slab.h>\r
+#include <linux/spi/spi.h>\r
+#include <mach/board.h>\r
+#include <linux/board-id.h>\r
+\r
+\r
+struct board_id_private_data *g_board_id;\r
+\r
+extern char GetSNSectorInfoBeforeNandInit(char * pbuf);\r
+extern char GetVendor0InfoBeforeNandInit(char * pbuf);\r
+\r
+static struct device_id_name tp_id_name[TP_ID_NUMS] = {\r
+       {DEVICE_TYPE_TP, TP_ID_NULL, "tp", "no_tp", "no", "no_tp", ((DEVICE_TYPE_TP<<8)+TP_ID_NULL)},\r
+       {DEVICE_TYPE_TP, TP_ID_GT813, "tp", "Goodix-TS", "Goodix-TS", "gt813", ((DEVICE_TYPE_TP<<8)+TP_ID_GT813)},\r
+       {DEVICE_TYPE_TP, TP_ID_EKTF2K, "tp", "elan-ktf2k", "elan-ktf2k", "elan-ktf2k", ((DEVICE_TYPE_TP<<8)+TP_ID_EKTF2K)},\r
+       \r
+};\r
+\r
+\r
+static struct device_id_name lcd_id_name[LCD_ID_NUMS] = {\r
+       {DEVICE_TYPE_LCD, LCD_ID_NULL, "lcd", "no_lcd", "no", "no_lcd", ((DEVICE_TYPE_LCD<<8)+LCD_ID_NULL)},\r
+       {DEVICE_TYPE_LCD, LCD_ID_IVO_M101_NWN8, "lcd", "IVO_M101_NWN8", "IVO_M101_NWN8", "101' 1280*800", ((DEVICE_TYPE_LCD<<8)+LCD_ID_IVO_M101_NWN8)}, \r
+       {DEVICE_TYPE_LCD, LCD_ID_EDID_I2C, "lcd", "lcd_edid_i2c", "edid", "auto lcd edid", ((DEVICE_TYPE_LCD<<8)+LCD_ID_EDID_I2C)},\r
+\r
+};\r
+\r
+\r
+static struct device_id_name key_id_name[KEY_ID_NUMS] = {\r
+       {DEVICE_TYPE_KEY, KEY_ID_NULL, "key", "no_key", "no", "no_key", ((DEVICE_TYPE_KEY<<8)+KEY_ID_NULL)},\r
+       {DEVICE_TYPE_KEY, KEY_ID_SHUTTLE, "key", "shuttle_key", "shuttle", "shuttle_key", ((DEVICE_TYPE_KEY<<8)+KEY_ID_SHUTTLE)},\r
+       {DEVICE_TYPE_KEY, KEY_ID_BITLAND, "key", "blueberry_kb", "bitland", "bitland_key", ((DEVICE_TYPE_KEY<<8)+KEY_ID_BITLAND)},\r
+       {DEVICE_TYPE_KEY, KEY_ID_MALATA, "key", "malata_key", "malata", "malata_key", ((DEVICE_TYPE_KEY<<8)+KEY_ID_MALATA)},\r
+       {DEVICE_TYPE_KEY, KEY_ID_CAPSENSE, "key", "cy8c20236", "cy8c20236", "cy8c20236_key", ((DEVICE_TYPE_KEY<<8)+KEY_ID_CAPSENSE)},\r
+\r
+       //  type                           id       type_name    driver_name     dev_name         description       device_id        \r
+       {DEVICE_TYPE_KEY, KEY_ID_ENGLISH_US, "key", "blueberry_kb", "english_us", "english_us_key", ((DEVICE_TYPE_KEY<<8)+KEY_ID_ENGLISH_US)},\r
+       {DEVICE_TYPE_KEY, KEY_ID_ENGLISH_UK, "key", "blueberry_kb", "english_uk", "english_uk_key", ((DEVICE_TYPE_KEY<<8)+KEY_ID_ENGLISH_UK)},\r
+\r
+       {DEVICE_TYPE_KEY, KEY_ID_TURKISH, "key", "blueberry_kb", "turkish", "turkish_key", ((DEVICE_TYPE_KEY<<8)+KEY_ID_TURKISH)},\r
+       {DEVICE_TYPE_KEY, KEY_ID_SLOVENIAN, "key", "blueberry_kb", "slovenian", "slovenian_key", ((DEVICE_TYPE_KEY<<8)+KEY_ID_SLOVENIAN)},\r
+       {DEVICE_TYPE_KEY, KEY_ID_RUSSIAN, "key", "blueberry_kb", "russian", "russian_key", ((DEVICE_TYPE_KEY<<8)+KEY_ID_RUSSIAN)},\r
+       {DEVICE_TYPE_KEY, KEY_ID_CZECH, "key", "blueberry_kb", "czech", "czech_key", ((DEVICE_TYPE_KEY<<8)+KEY_ID_CZECH)},\r
+       {DEVICE_TYPE_KEY, KEY_ID_HUNGARIAN, "key", "blueberry_kb", "hungarian", "hungarian_key", ((DEVICE_TYPE_KEY<<8)+KEY_ID_HUNGARIAN)},\r
+       {DEVICE_TYPE_KEY, KEY_ID_HINDI, "key", "blueberry_kb", "hindi", "hindi_key", ((DEVICE_TYPE_KEY<<8)+KEY_ID_HINDI)},\r
+       {DEVICE_TYPE_KEY, KEY_ID_THAI, "key", "blueberry_kb", "thai", "thai_key", ((DEVICE_TYPE_KEY<<8)+KEY_ID_THAI)},\r
+       {DEVICE_TYPE_KEY, KEY_ID_PORTUGUESE, "key", "blueberry_kb", "portuguese", "portuguese_key", ((DEVICE_TYPE_KEY<<8)+KEY_ID_PORTUGUESE)},\r
+       {DEVICE_TYPE_KEY, KEY_ID_ARABIC, "key", "blueberry_kb", "arabic", "arabic_key", ((DEVICE_TYPE_KEY<<8)+KEY_ID_ARABIC)},\r
+       {DEVICE_TYPE_KEY, KEY_ID_GREEK, "key", "blueberry_kb", "greek", "greek_key", ((DEVICE_TYPE_KEY<<8)+KEY_ID_GREEK)},\r
+       //Nordics \r
+       {DEVICE_TYPE_KEY, KEY_ID_SWEDISH, "key", "blueberry_kb", "swedish", "swedish_key", ((DEVICE_TYPE_KEY<<8)+KEY_ID_SWEDISH)},\r
+       {DEVICE_TYPE_KEY, KEY_ID_NORWEGIAN, "key", "blueberry_kb", "norwegian", "norwegian_key", ((DEVICE_TYPE_KEY<<8)+KEY_ID_NORWEGIAN)},\r
+       {DEVICE_TYPE_KEY, KEY_ID_FINNISH, "key", "blueberry_kb", "finnish", "finnish_key", ((DEVICE_TYPE_KEY<<8)+KEY_ID_FINNISH)},\r
+       {DEVICE_TYPE_KEY, KEY_ID_DANISH, "key", "blueberry_kb", "danish", "danish_key", ((DEVICE_TYPE_KEY<<8)+KEY_ID_DANISH)},\r
+       {DEVICE_TYPE_KEY, KEY_ID_ESTONIAN, "key", "blueberry_kb", "estonian", "estonian_key", ((DEVICE_TYPE_KEY<<8)+KEY_ID_ESTONIAN)},\r
+\r
+       {DEVICE_TYPE_KEY, KEY_ID_FRENCH, "key", "blueberry_kb", "french", "french_key", ((DEVICE_TYPE_KEY<<8)+KEY_ID_FRENCH)},\r
+       {DEVICE_TYPE_KEY, KEY_ID_GERMAN, "key", "blueberry_kb", "german", "german_key", ((DEVICE_TYPE_KEY<<8)+KEY_ID_GERMAN)},\r
+       {DEVICE_TYPE_KEY, KEY_ID_HEBREW, "key", "blueberry_kb", "hebrew", "hebrew_key", ((DEVICE_TYPE_KEY<<8)+KEY_ID_HEBREW)},\r
+       {DEVICE_TYPE_KEY, KEY_ID_ITALIAN, "key", "blueberry_kb", "italian", "italian_key", ((DEVICE_TYPE_KEY<<8)+KEY_ID_ITALIAN)},\r
+       {DEVICE_TYPE_KEY, KEY_ID_SPANISH, "key", "blueberry_kb", "spanish", "spanish_key", ((DEVICE_TYPE_KEY<<8)+KEY_ID_SPANISH)},\r
+\r
+       {DEVICE_TYPE_KEY, KEY_ID_SWISS, "key", "blueberry_kb", "swiss", "swiss_key", ((DEVICE_TYPE_KEY<<8)+KEY_ID_SWISS)},\r
+    {DEVICE_TYPE_KEY, KEY_ID_DUTCH, "key", "blueberry_kb", "dutch", "dutch_key", ((DEVICE_TYPE_KEY<<8)+KEY_ID_DUTCH)},\r
+    {DEVICE_TYPE_KEY, KEY_ID_BELGIAN, "key", "blueberry_kb", "belgian", "belgian_key", ((DEVICE_TYPE_KEY<<8)+KEY_ID_BELGIAN)},\r
+    {DEVICE_TYPE_KEY, KEY_ID_NORDIC, "key", "blueberry_kb", "nordic", "nordic_kb", ((DEVICE_TYPE_KEY<<8)+KEY_ID_NORDIC)},\r
+\r
+\r
+};\r
+\r
+\r
+static struct device_id_name  codec_id_name[CODEC_ID_NUMS] = { \r
+       {DEVICE_TYPE_CODEC, CODEC_ID_NULL, "codec", "no_codec", "no", "no_codec", ((DEVICE_TYPE_CODEC<<8)+CODEC_ID_NULL)},              \r
+       //to add\r
+       {DEVICE_TYPE_CODEC, CODEC_ID_WM8994, "codec", "wm8994", "wm8994", "wm8994", ((DEVICE_TYPE_CODEC<<8)+CODEC_ID_WM8994)},          \r
+       {DEVICE_TYPE_CODEC, CODEC_ID_WM8900, "codec", "wm8900", "wm8900", "wm8900", ((DEVICE_TYPE_CODEC<<8)+CODEC_ID_WM8900)},          \r
+       {DEVICE_TYPE_CODEC, CODEC_ID_WM8988, "codec", "wm8988", "wm8988", "wm8988", ((DEVICE_TYPE_CODEC<<8)+CODEC_ID_WM8988)},          \r
+       {DEVICE_TYPE_CODEC, CODEC_ID_RT5616, "codec", "rt5616", "rt5616", "rt5616", ((DEVICE_TYPE_CODEC<<8)+CODEC_ID_RT5616)},          \r
+       {DEVICE_TYPE_CODEC, CODEC_ID_RT5621, "codec", "rt5621", "rt5621", "rt5621", ((DEVICE_TYPE_CODEC<<8)+CODEC_ID_RT5621)},          \r
+       {DEVICE_TYPE_CODEC, CODEC_ID_RT5623, "codec", "rt5623", "rt5623", "rt5623", ((DEVICE_TYPE_CODEC<<8)+CODEC_ID_RT5623)},          \r
+       {DEVICE_TYPE_CODEC, CODEC_ID_RT3224, "codec", "rt3224", "rt3224", "rt3224", ((DEVICE_TYPE_CODEC<<8)+CODEC_ID_RT3224)},          \r
+       {DEVICE_TYPE_CODEC, CODEC_ID_RT5625, "codec", "rt5625", "rt5625", "rt5625", ((DEVICE_TYPE_CODEC<<8)+CODEC_ID_RT5625)},          \r
+       {DEVICE_TYPE_CODEC, CODEC_ID_RT5631, "codec", "rt5631", "rt5631", "rt5631", ((DEVICE_TYPE_CODEC<<8)+CODEC_ID_RT5631)},          \r
+       {DEVICE_TYPE_CODEC, CODEC_ID_RT5639, "codec", "rt5639", "rt5639", "rt5639", ((DEVICE_TYPE_CODEC<<8)+CODEC_ID_RT5639)},          \r
+       {DEVICE_TYPE_CODEC, CODEC_ID_RT5640, "codec", "rt5640", "rt5640", "rt5640", ((DEVICE_TYPE_CODEC<<8)+CODEC_ID_RT5640)},          \r
+       {DEVICE_TYPE_CODEC, CODEC_ID_RT5642, "codec", "rt5642", "rt5642", "rt5642", ((DEVICE_TYPE_CODEC<<8)+CODEC_ID_RT5642)},          \r
+       {DEVICE_TYPE_CODEC, CODEC_ID_RT3261, "codec", "rt3261", "rt3261", "rt3261", ((DEVICE_TYPE_CODEC<<8)+CODEC_ID_RT3261)},          \r
+       {DEVICE_TYPE_CODEC, CODEC_ID_AIC3262, "codec", "aic3262", "aic3262", "aic3262", ((DEVICE_TYPE_CODEC<<8)+CODEC_ID_AIC3262)},             \r
+       {DEVICE_TYPE_CODEC, CODEC_ID_RK610, "codec", "rk610_i2c_codec", "rk610", "rk610", ((DEVICE_TYPE_CODEC<<8)+CODEC_ID_RK610)},             \r
+       {DEVICE_TYPE_CODEC, CODEC_ID_RK616, "codec", "rk616", "rk616", "rk616", ((DEVICE_TYPE_CODEC<<8)+CODEC_ID_RK616)},\r
+       {DEVICE_TYPE_CODEC, CODEC_ID_RK1000, "codec", "rk1000", "rk1000", "rk1000", ((DEVICE_TYPE_CODEC<<8)+CODEC_ID_RK1000)},\r
+       {DEVICE_TYPE_CODEC, CODEC_ID_CS42L52, "codec", "cs42l52", "cs42l52", "cs42l52", ((DEVICE_TYPE_CODEC<<8)+CODEC_ID_CS42L52)},\r
+       {DEVICE_TYPE_CODEC, CODEC_ID_ES8323, "codec", "es8323", "es8323", "es8323", ((DEVICE_TYPE_CODEC<<8)+CODEC_ID_ES8323)},\r
+       \r
+};\r
+\r
+\r
+static struct device_id_name wifi_id_name[WIFI_ID_NUMS] = {\r
+       {DEVICE_TYPE_WIFI, WIFI_ID_NULL, "wifi", "no_wifi", "no", "no_wifi", ((DEVICE_TYPE_WIFI<<8)+WIFI_ID_NULL)},\r
+       {DEVICE_TYPE_WIFI, WIFI_ID_BCM, "wifi", "bcmdhd_wlan", "bcm", "WIFI_MODULE_BCM product", ((DEVICE_TYPE_WIFI<<8)+WIFI_ID_BCM)},\r
+       {DEVICE_TYPE_WIFI, WIFI_ID_BCM4319, "wifi", "bcmdhd_wlan", "bcm4319", "WIFI_MODULE_BCM4319", ((DEVICE_TYPE_WIFI<<8)+WIFI_ID_BCM4319)},  \r
+       {DEVICE_TYPE_WIFI, WIFI_ID_BCM4330, "wifi", "bcmdhd_wlan", "bcm4330", "WIFI_MODULE_BCM4330", ((DEVICE_TYPE_WIFI<<8)+WIFI_ID_BCM4330)},\r
+       {DEVICE_TYPE_WIFI, WIFI_ID_RK903_26M, "wifi", "bcmdhd_wlan", "rk903_26m", "WIFI_MODULE_RK903_26M", ((DEVICE_TYPE_WIFI<<8)+WIFI_ID_RK903_26M)},\r
+       {DEVICE_TYPE_WIFI, WIFI_ID_RK903_37M, "wifi", "bcmdhd_wlan", "rk903_37m", "WIFI_MODULE_RK903_37M", ((DEVICE_TYPE_WIFI<<8)+WIFI_ID_RK903_37M)},\r
+       {DEVICE_TYPE_WIFI, WIFI_ID_BCM4329, "wifi", "bcmdhd_wlan", "bcm4329", "WIFI_MODULE_BCM4329", ((DEVICE_TYPE_WIFI<<8)+WIFI_ID_BCM4329)},  \r
+       {DEVICE_TYPE_WIFI, WIFI_ID_RK901, "wifi", "bcmdhd_wlan", "rk901", "WIFI_MODULE_RK901", ((DEVICE_TYPE_WIFI<<8)+WIFI_ID_RK901)},\r
+       {DEVICE_TYPE_WIFI, WIFI_ID_AP6181, "wifi", "ap6181", "ap6181", "WIFI_MODULE_AP6181", ((DEVICE_TYPE_WIFI<<8)+WIFI_ID_AP6181)},\r
+       {DEVICE_TYPE_WIFI, WIFI_ID_AP6210, "wifi", "ap6210", "ap6210", "WIFI_MODULE_AP6210", ((DEVICE_TYPE_WIFI<<8)+WIFI_ID_AP6210)},\r
+       {DEVICE_TYPE_WIFI, WIFI_ID_AP6330, "wifi", "ap6330", "ap6330", "WIFI_MODULE_AP6330", ((DEVICE_TYPE_WIFI<<8)+WIFI_ID_AP6330)},\r
+       {DEVICE_TYPE_WIFI, WIFI_ID_AP6476, "wifi", "ap6476", "ap6476", "WIFI_MODULE_AP6476", ((DEVICE_TYPE_WIFI<<8)+WIFI_ID_AP6476)},\r
+       {DEVICE_TYPE_WIFI, WIFI_ID_AP6493, "wifi", "ap6493", "ap6493", "WIFI_MODULE_AP6493", ((DEVICE_TYPE_WIFI<<8)+WIFI_ID_AP6493)},\r
+       {DEVICE_TYPE_WIFI, WIFI_ID_GB86302I, "wifi", "gb86302i", "gb86302i", "WIFI_MODULE_GB86302I", ((DEVICE_TYPE_WIFI<<8)+WIFI_ID_GB86302I)},\r
+\r
+       {DEVICE_TYPE_WIFI, WIFI_ID_RTL8192CU, "wifi", "rtl8192cu_usb", "rtl8192cu_usb", "WIFI_MODULE_RTL8192CU_USB", ((DEVICE_TYPE_WIFI<<8)+WIFI_ID_RTL8192CU)},\r
+       {DEVICE_TYPE_WIFI, WIFI_ID_RTL8188EU, "wifi", "rt8188eu_usb", "rt8188eu_usb", "WIFI_MODULE_RTL8188EU_USB", ((DEVICE_TYPE_WIFI<<8)+WIFI_ID_RTL8188EU)},\r
+       {DEVICE_TYPE_WIFI, WIFI_ID_RTL8723AU, "wifi", "rtl8723au_usb", "rtl8723au_usb", "WIFI_MODULE_RTL8723AU_USB", ((DEVICE_TYPE_WIFI<<8)+WIFI_ID_RTL8723AU)},\r
+\r
+       \r
+       {DEVICE_TYPE_WIFI, WIFI_ID_COMBO, "wifi", "combo-wifi", "combo-wifi", "WIFI_MODULE_MT product", ((DEVICE_TYPE_WIFI<<8)+WIFI_ID_COMBO)},\r
+       {DEVICE_TYPE_WIFI, WIFI_ID_MT5931, "wifi", "combo-wifi", "mt5931", "WIFI_MODULE_MT5931", ((DEVICE_TYPE_WIFI<<8)+WIFI_ID_MT5931)},\r
+       {DEVICE_TYPE_WIFI, WIFI_ID_RT5370, "wifi", "rt5370_usb", "rt5370", "WIFI_MODULE_RT5370_USB", ((DEVICE_TYPE_WIFI<<8)+WIFI_ID_RT5370)},\r
+\r
+};\r
+\r
+\r
+static struct device_id_name bt_id_name[BT_ID_NUMS] = {\r
+       {DEVICE_TYPE_BT, BT_ID_NULL, "bt", "no_bluetooth", "no", "no_bluetooth", ((DEVICE_TYPE_BT<<8)+BT_ID_NULL)},\r
+       {DEVICE_TYPE_BT, BT_ID_NH660, "bt", "nh660", "nh660", "BT_MODULE_NH660", ((DEVICE_TYPE_BT<<8)+BT_ID_NH660)},    \r
+       {DEVICE_TYPE_BT, BT_ID_BCM4330, "bt", "rfkill_rk", "bcm4330", "BT_MODULE_BCM4330", ((DEVICE_TYPE_BT<<8)+BT_ID_BCM4330)},\r
+       {DEVICE_TYPE_BT, BT_ID_RK903_26M, "bt", "rfkill_rk", "rk903_26m", "BT_MODULE_RK903_26M", ((DEVICE_TYPE_BT<<8)+BT_ID_RK903_26M)},\r
+       {DEVICE_TYPE_BT, BT_ID_RK903, "bt", "rfkill_rk", "rk903", "BT_MODULE_RK903_37M", ((DEVICE_TYPE_BT<<8)+BT_ID_RK903)},\r
+       {DEVICE_TYPE_BT, BT_ID_BCM4329, "bt", "rfkill_rk", "bcm4329", "BT_MODULE_BCM4329", ((DEVICE_TYPE_BT<<8)+BT_ID_BCM4329)},\r
+       {DEVICE_TYPE_BT, BT_ID_MV8787, "bt", "rfkill_rk", "mv8787", "BT_MODULE_MV8787", ((DEVICE_TYPE_BT<<8)+BT_ID_MV8787)},\r
+       {DEVICE_TYPE_BT, BT_ID_AP6210, "bt", "rfkill_rk", "ap6210", "BT_MODULE_AP6210", ((DEVICE_TYPE_BT<<8)+BT_ID_AP6210)},\r
+       {DEVICE_TYPE_BT, BT_ID_AP6330, "bt", "rfkill_rk", "ap6330", "BT_MODULE_AP6330", ((DEVICE_TYPE_BT<<8)+BT_ID_AP6330)},\r
+       {DEVICE_TYPE_BT, BT_ID_AP6476, "bt", "rfkill_rk", "ap6476", "BT_MODULE_AP6476", ((DEVICE_TYPE_BT<<8)+BT_ID_AP6476)},\r
+       {DEVICE_TYPE_BT, BT_ID_AP6493, "bt", "rfkill_rk", "ap6493", "BT_MODULE_AP6493", ((DEVICE_TYPE_BT<<8)+BT_ID_AP6493)},\r
+       {DEVICE_TYPE_BT, BT_ID_RFKILL, "bt", "rfkill_rk", "bcm", "bcm product", ((DEVICE_TYPE_BT<<8)+BT_ID_RFKILL)},\r
+       {DEVICE_TYPE_BT, BT_ID_RTL8723, "bt", "rfkill_rk", "rtl8723", "BT_MODULE_RTL8723", ((DEVICE_TYPE_BT<<8)+BT_ID_RTL8723)},\r
+       {DEVICE_TYPE_BT, BT_ID_MT6622, "bt", "mt6622", "mt6622", "BT_MODULE_MT6622", ((DEVICE_TYPE_BT<<8)+BT_ID_MT6622)},\r
+       \r
+};\r
+       \r
+static struct device_id_name  gps_id_name[GPS_ID_NUMS] = {\r
+       {DEVICE_TYPE_GPS, GPS_ID_NULL, "gps", "no_gps", "no", "no_gps", ((DEVICE_TYPE_GPS<<8)+GPS_ID_NULL)},            \r
+       \r
+       //to add\r
+       {DEVICE_TYPE_GPS, GPS_ID_RK_HV5820, "gps", "gps_hv5820b", "hv5820b", "gps rk2928", ((DEVICE_TYPE_GPS<<8)+GPS_ID_RK_HV5820)},\r
+       {DEVICE_TYPE_GPS, GPS_ID_BCM4751, "gps", "bcm4751", "bcm4751", "gps bcm4751", ((DEVICE_TYPE_GPS<<8)+GPS_ID_BCM4751)},\r
+       {DEVICE_TYPE_GPS, GPS_ID_GNS7560, "gps", "gns7560", "gns7560", "gps gns7560", ((DEVICE_TYPE_GPS<<8)+GPS_ID_GNS7560)},\r
+       {DEVICE_TYPE_GPS, GPS_ID_MT3326, "gps", "mt3326", "mt3326", "gps mt3326", ((DEVICE_TYPE_GPS<<8)+GPS_ID_MT3326)},\r
+       \r
+};\r
+\r
+static struct device_id_name  fm_id_name[FM_ID_NUMS] = {\r
+       {DEVICE_TYPE_FM, FM_ID_NULL, "fm", "no_fm", "no", "no_fm", ((DEVICE_TYPE_FM<<8)+FM_ID_NULL)},   \r
+       \r
+       //to add\r
+};\r
+\r
+\r
+static struct device_id_name  modem_id_name[MODEM_ID_NUMS] = {\r
+       {DEVICE_TYPE_MODEM, MODEM_ID_NULL, "modem", "no_modem", "no", "no_modem", ((DEVICE_TYPE_MODEM<<8)+MODEM_ID_NULL)},              \r
+       \r
+       //to add\r
+       {DEVICE_TYPE_MODEM, MODEM_ID_MT6229, "modem", "bp-auto", "mt6229", "USI MT6229 WCDMA", ((DEVICE_TYPE_MODEM<<8)+MODEM_ID_MT6229)},       \r
+       {DEVICE_TYPE_MODEM, MODEM_ID_MU509, "modem", "bp-auto", "mu509", "huawei MU509 WCDMA", ((DEVICE_TYPE_MODEM<<8)+MODEM_ID_MU509)},        \r
+       {DEVICE_TYPE_MODEM, MODEM_ID_MI700, "modem", "bp-auto", "mi700", "thinkwill MI700 WCDMA", ((DEVICE_TYPE_MODEM<<8)+MODEM_ID_MI700)},     \r
+       {DEVICE_TYPE_MODEM, MODEM_ID_MW100, "modem", "bp-auto", "mw100", "thinkwill MW100 WCDMA", ((DEVICE_TYPE_MODEM<<8)+MODEM_ID_MW100)},     \r
+       {DEVICE_TYPE_MODEM, MODEM_ID_TD8801, "modem", "bp-auto", "td8801", "spreadtrum SC8803 TD-SCDMA", ((DEVICE_TYPE_MODEM<<8)+MODEM_ID_TD8801)},     \r
+       {DEVICE_TYPE_MODEM, MODEM_ID_SC6610, "modem", "bp-auto", "sc6610", "spreadtrum SC6610 GSM", ((DEVICE_TYPE_MODEM<<8)+MODEM_ID_SC6610)},  \r
+       {DEVICE_TYPE_MODEM, MODEM_ID_M50, "modem", "bp-auto", "m50", "spreadtrum RDA GSM", ((DEVICE_TYPE_MODEM<<8)+MODEM_ID_M50)},      \r
+       {DEVICE_TYPE_MODEM, MODEM_ID_MT6250, "modem", "bp-auto", "mt6250", "ZINN M50  EDGE", ((DEVICE_TYPE_MODEM<<8)+MODEM_ID_MT6250)}, \r
+       {DEVICE_TYPE_MODEM, MODEM_ID_C66A, "modem", "bp-auto", "c66a", "zhongben w200 gsm", ((DEVICE_TYPE_MODEM<<8)+MODEM_ID_C66A)},\r
+       \r
+};\r
+       \r
+static struct device_id_name  ddr_id_name[DDR_ID_NUMS] = {\r
+       {DEVICE_TYPE_DDR, DDR_ID_NULL, "ddr", "no_ddr", "no", "no_ddr", ((DEVICE_TYPE_DDR<<8)+DDR_ID_NULL)},\r
+       \r
+       //to add\r
+};\r
+\r
+static struct device_id_name  flash_id_name[FLASH_ID_NUMS] = {\r
+       {DEVICE_TYPE_FLASH, FLASH_ID_NULL, "flash", "no_flash", "no", "no_flash", ((DEVICE_TYPE_FLASH<<8)+FLASH_ID_NULL)},              \r
+       \r
+       //to add\r
+};\r
+\r
+\r
+static struct device_id_name  hdmi_id_name[HDMI_ID_NUMS] = {\r
+       {DEVICE_TYPE_HDMI, HDMI_ID_NULL, "hdmi", "no_hdmi", "no", "no_hdmi", ((DEVICE_TYPE_HDMI<<8)+HDMI_ID_NULL)},             \r
+       \r
+       //to add\r
+       {DEVICE_TYPE_HDMI, HDMI_ID_RK30, "hdmi", "rk_hdmi", "rk", "rk3066 hdmi", ((DEVICE_TYPE_HDMI<<8)+HDMI_ID_RK30)},\r
+       {DEVICE_TYPE_HDMI, HDMI_ID_CAT66121, "hdmi", "cat66121_hdmi", "cat66121", "hdmi cat66121", ((DEVICE_TYPE_HDMI<<8)+HDMI_ID_CAT66121)},\r
+       {DEVICE_TYPE_HDMI, HDMI_ID_RK610, "hdmi", "rk610_hdmi", "rk610", "hdmi rk610", ((DEVICE_TYPE_HDMI<<8)+HDMI_ID_RK610)},\r
+       \r
+};\r
+\r
+\r
+static struct device_id_name  battery_id_name[BATTERY_ID_NUMS] = {\r
+       {DEVICE_TYPE_BATTERY, BATTERY_ID_NULL, "battery", "no_battery", "no", "no_battery", ((DEVICE_TYPE_BATTERY<<8)+BATTERY_ID_NULL)},        \r
+       \r
+       //to add\r
+       {DEVICE_TYPE_BATTERY, BATTERY_ID_3300MAH, "battery", "rk30-battery", "3300mah", "3300mah battery", ((DEVICE_TYPE_BATTERY<<8)+BATTERY_ID_3300MAH)},\r
+       {DEVICE_TYPE_BATTERY, BATTERY_ID_3600MAH, "battery", "rk30-battery", "3600mah", "3600mah battery", ((DEVICE_TYPE_BATTERY<<8)+BATTERY_ID_3600MAH)},\r
+       {DEVICE_TYPE_BATTERY, BATTERY_ID_4700MAH, "battery", "rk30-battery", "4700mah", "4700mah battery", ((DEVICE_TYPE_BATTERY<<8)+BATTERY_ID_4700MAH)},\r
+       {DEVICE_TYPE_BATTERY, BATTERY_ID_7000MAH, "battery", "rk30-battery", "7000mah", "7000mah battery", ((DEVICE_TYPE_BATTERY<<8)+BATTERY_ID_7000MAH)},\r
+       {DEVICE_TYPE_BATTERY, BATTERY_ID_7700MAH, "battery", "rk30-battery", "7700mah", "7700mah battery", ((DEVICE_TYPE_BATTERY<<8)+BATTERY_ID_7700MAH)},\r
+       {DEVICE_TYPE_BATTERY, BATTERY_ID_9000MAH, "battery", "rk30-battery", "9000mah", "9000mah battery", ((DEVICE_TYPE_BATTERY<<8)+BATTERY_ID_9000MAH)},\r
+       {DEVICE_TYPE_BATTERY, BATTERY_ID_BLUEBERRY, "battery", "blueberry_bat", "blueberry", "blueberry battery", ((DEVICE_TYPE_BATTERY<<8)+BATTERY_ID_BLUEBERRY)},\r
+       \r
+};\r
+\r
+\r
+\r
+static struct device_id_name  charge_id_name[CHARGE_ID_NUMS] = {\r
+       {DEVICE_TYPE_CHARGE, CHARGE_ID_NULL, "charge", "no_charge", "no", "no_charge", ((DEVICE_TYPE_CHARGE<<8)+CHARGE_ID_NULL)},       \r
+       \r
+       //to add\r
+       {DEVICE_TYPE_CHARGE, CHARGE_ID_CW2015, "charge", "cw2015", "cw2015", "charge cw2015", ((DEVICE_TYPE_CHARGE<<8)+CHARGE_ID_CW2015)},      \r
+       {DEVICE_TYPE_CHARGE, CHARGE_ID_BQ24193, "charge", "bq24193", "bq24193", "charge BQ24193", ((DEVICE_TYPE_CHARGE<<8)+CHARGE_ID_BQ24193)}, \r
+       {DEVICE_TYPE_CHARGE, CHARGE_ID_BQ27541, "charge", "bq27541", "bq27541", "charge BQ27541", ((DEVICE_TYPE_CHARGE<<8)+CHARGE_ID_BQ27541)}, \r
+       {DEVICE_TYPE_CHARGE, CHARGE_ID_OZ8806, "charge", "oz8806", "oz8806", "charge OZ8806", ((DEVICE_TYPE_CHARGE<<8)+CHARGE_ID_OZ8806)},      \r
+       \r
+};\r
+\r
+       \r
+static struct device_id_name  backlight_id_name[BACKLIGHT_ID_NUMS] = {\r
+       {DEVICE_TYPE_BACKLIGHT, BACKLIGHT_ID_NULL, "backlight", "no_backlight", "no", "no_backlight", ((DEVICE_TYPE_BACKLIGHT<<8)+BACKLIGHT_ID_NULL)},          \r
+       \r
+       //to add\r
+       {DEVICE_TYPE_BACKLIGHT, BACKLIGHT_ID_RK29, "backlight", "rk29_backlight", "rk29_backlight", "rk29_backlight", ((DEVICE_TYPE_BACKLIGHT<<8)+BACKLIGHT_ID_RK29)},\r
+       {DEVICE_TYPE_BACKLIGHT, BACKLIGHT_ID_WM831X, "backlight", "wm831x", "wm831x", "wm831x_backlight", ((DEVICE_TYPE_BACKLIGHT<<8)+BACKLIGHT_ID_WM831X)},\r
+       \r
+};\r
+\r
+static struct device_id_name  headset_id_name[HEADSET_ID_NUMS] = {\r
+       {DEVICE_TYPE_HEADSET, HEADSET_ID_NULL, "headset", "no_headset", "no", "no_headset", ((DEVICE_TYPE_HEADSET<<8)+HEADSET_ID_NULL)},                \r
+       \r
+       //to add\r
+       {DEVICE_TYPE_HEADSET, HEADSET_ID_RK29, "headset", "rk_headsetdet", "rk_headsetdet", "rk29 headset", ((DEVICE_TYPE_HEADSET<<8)+HEADSET_ID_RK29)},\r
+       \r
+};\r
+\r
+\r
+\r
+static struct device_id_name  micphone_id_name[MICPHONE_ID_NUMS] = {\r
+       {DEVICE_TYPE_MICPHONE, MICPHONE_ID_NULL, "micphone", "no_micphone", "no", "no_micphone", ((DEVICE_TYPE_MICPHONE<<8)+MICPHONE_ID_NULL)},         \r
+       \r
+       //to add\r
+       {DEVICE_TYPE_MICPHONE, MICPHONE_ID_ANALOGIC, "micphone", "analogic", "analogic", "micphone analogic", ((DEVICE_TYPE_MICPHONE<<8)+MICPHONE_ID_ANALOGIC)},        \r
+       {DEVICE_TYPE_MICPHONE, MICPHONE_ID_DIGITAL, "micphone", "digital", "digital", "micphone digital", ((DEVICE_TYPE_MICPHONE<<8)+MICPHONE_ID_DIGITAL)},     \r
+};\r
+\r
+\r
+static struct device_id_name  speaker_id_name[SPEAKER_ID_NUMS] = {\r
+       {DEVICE_TYPE_SPEAKER, SPEAKER_ID_NULL, "speaker", "no_speaker", "no", "no_speaker", ((DEVICE_TYPE_SPEAKER<<8)+SPEAKER_ID_NULL)},                \r
+       \r
+       //to add\r
+       {DEVICE_TYPE_SPEAKER, SPEAKER_ID_0W8, "speaker", "speaker_08w", "speaker_08w", "speaker 0.8W", ((DEVICE_TYPE_SPEAKER<<8)+SPEAKER_ID_0W8)},\r
+       {DEVICE_TYPE_SPEAKER, SPEAKER_ID_1W0, "speaker", "speaker_10w", "speaker_10w", "speaker 1.0W", ((DEVICE_TYPE_SPEAKER<<8)+SPEAKER_ID_1W0)},\r
+       {DEVICE_TYPE_SPEAKER, SPEAKER_ID_1W5, "speaker", "speaker_15w", "speaker_15w", "speaker 1.5W", ((DEVICE_TYPE_SPEAKER<<8)+SPEAKER_ID_1W5)},\r
+       \r
+};\r
+\r
+static struct device_id_name  vibrator_id_name[VIBRATOR_ID_NUMS] = {\r
+       {DEVICE_TYPE_VIBRATOR, VIBRATOR_ID_NULL, "vibrator", "no_vibrator", "no", "no_vibrator", ((DEVICE_TYPE_VIBRATOR<<8)+VIBRATOR_ID_NULL)},         \r
+       \r
+       //to add        \r
+       {DEVICE_TYPE_VIBRATOR, VIBRATOR_ID_RK29, "vibrator", "timed-gpio", "timed-gpio", "vibrator gpio", ((DEVICE_TYPE_VIBRATOR<<8)+VIBRATOR_ID_RK29)},        \r
+};\r
+\r
+static struct device_id_name  tv_id_name[TV_ID_NUMS] = {\r
+       {DEVICE_TYPE_TV, TV_ID_NULL, "tv", "no_tv", "no", "no_tv", ((DEVICE_TYPE_TV<<8)+TV_ID_NULL)},           \r
+       \r
+       //to add\r
+       {DEVICE_TYPE_TV, TV_ID_RK610, "tv", "rk610_tvout", "rk610_tvout", "tv rk610", ((DEVICE_TYPE_TV<<8)+TV_ID_RK610)},\r
+};\r
+\r
+\r
+static struct device_id_name  echip_id_name[ECHIP_ID_NUMS] = {\r
+       {DEVICE_TYPE_ECHIP, ECHIP_ID_NULL, "echip", "no_ec", "no", "no_ec", ((DEVICE_TYPE_ECHIP<<8)+ECHIP_ID_NULL)},            \r
+       \r
+       //to add\r
+       {DEVICE_TYPE_ECHIP, ECHIP_ID_IT8561, "echip", "ec_dev_i2c", "ec_dev_i2c", "ec it8561", ((DEVICE_TYPE_ECHIP<<8)+ECHIP_ID_IT8561)},\r
+       {DEVICE_TYPE_ECHIP, ECHIP_ID_ITE, "echip", "ite", "ite", "ec ite", ((DEVICE_TYPE_ECHIP<<8)+ECHIP_ID_ITE)},\r
+};\r
+\r
+\r
+static struct device_id_name  hub_id_name[HUB_ID_NUMS] = {\r
+       {DEVICE_TYPE_HUB, HUB_ID_NULL, "hub", "no_hub", "no", "no_hub", ((DEVICE_TYPE_HUB<<8)+HUB_ID_NULL)},            \r
+       \r
+       //to add\r
+       {DEVICE_TYPE_HUB, HUB_ID_USB4604, "hub", "usb4604", "usb4604", "3 ports", ((DEVICE_TYPE_HUB<<8)+HUB_ID_USB4604)},\r
+};\r
+\r
+static struct device_id_name  tpad_id_name[TPAD_ID_NUMS] = {\r
+       {DEVICE_TYPE_TPAD, TPAD_ID_NULL, "tpad", "no_tpad", "no", "no_tpad", ((DEVICE_TYPE_TPAD<<8)+TPAD_ID_NULL)},             \r
+       \r
+       //to add\r
+       {DEVICE_TYPE_TPAD, TPAD_ID_ELAN, "tpad", "blueberry_tp", "elan", "elan", ((DEVICE_TYPE_TPAD<<8)+TPAD_ID_ELAN)},\r
+       {DEVICE_TYPE_TPAD, TPAD_ID_SYNS, "tpad", "a10_tp_syn", "syns", "syns", ((DEVICE_TYPE_TPAD<<8)+TPAD_ID_SYNS)},\r
+};\r
+\r
+       \r
+\r
+static struct device_id_name  pmic_id_name[PMIC_ID_NUMS] = {\r
+       {DEVICE_TYPE_PMIC, PMIC_ID_NULL, "pmic", "no_pmic", "no", "no_pmic", ((DEVICE_TYPE_PMIC<<8)+PMIC_ID_NULL)},             \r
+       \r
+       //to add\r
+       {DEVICE_TYPE_PMIC, PMIC_ID_WM831X, "pmic", "wm831x", "wm831x", "wm831x", ((DEVICE_TYPE_PMIC<<8)+PMIC_ID_WM831X)},\r
+       {DEVICE_TYPE_PMIC, PMIC_ID_WM8326, "pmic", "wm8326", "wm8326", "wm8326", ((DEVICE_TYPE_PMIC<<8)+PMIC_ID_WM8326)},\r
+       {DEVICE_TYPE_PMIC, PMIC_ID_TPS65910, "pmic", "tps65910", "tps65910", "tps65910", ((DEVICE_TYPE_PMIC<<8)+PMIC_ID_TPS65910)},\r
+       {DEVICE_TYPE_PMIC, PMIC_ID_ACT8846, "pmic", "act8846", "act8846", "act8846", ((DEVICE_TYPE_PMIC<<8)+PMIC_ID_ACT8846)},\r
+       \r
+};\r
+\r
+static struct device_id_name  regulator_id_name[REGULATOR_ID_NUMS] = {\r
+       {DEVICE_TYPE_REGULATOR, REGULATOR_ID_NULL, "regulator", "no_regulator", "no", "no_regulator", ((DEVICE_TYPE_REGULATOR<<8)+REGULATOR_ID_NULL)},          \r
+       \r
+       //to add\r
+       {DEVICE_TYPE_REGULATOR, REGULATOR_ID_PWM3, "regulator", "pwm3", "pwm3", "regulator pwm3", ((DEVICE_TYPE_REGULATOR<<8)+REGULATOR_ID_PWM3)},\r
+       \r
+};\r
+\r
+\r
+static struct device_id_name  rtc_id_name[RTC_ID_NUMS] = {\r
+       {DEVICE_TYPE_RTC, RTC_ID_NULL, "rtc", "no_rtc", "no", "no_rtc", ((DEVICE_TYPE_RTC<<8)+RTC_ID_NULL)},            \r
+       \r
+       //to add\r
+       {DEVICE_TYPE_RTC, RTC_ID_HYM8563, "rtc", "rtc_hym8563", "hym8563", "hym8563", ((DEVICE_TYPE_RTC<<8)+RTC_ID_HYM8563)},   \r
+       {DEVICE_TYPE_RTC, RTC_ID_PCF8563, "rtc", "rtc-pcf8563", "pcf8563", "pcf8563", ((DEVICE_TYPE_RTC<<8)+RTC_ID_PCF8563)},   \r
+       {DEVICE_TYPE_RTC, RTC_ID_TPS65910, "rtc", "rtc_tps65910", "tps65910", "tps65910", ((DEVICE_TYPE_RTC<<8)+RTC_ID_TPS65910)},      \r
+       {DEVICE_TYPE_RTC, RTC_ID_WM8326, "rtc", "rtc_wm8326", "wm8326", "wm8326", ((DEVICE_TYPE_RTC<<8)+RTC_ID_WM8326)},                \r
+       {DEVICE_TYPE_RTC, RTC_ID_RK, "rtc", "rk_rtc", "rk", "rk_rtc", ((DEVICE_TYPE_RTC<<8)+RTC_ID_RK)},        \r
+       \r
+};\r
+\r
+static struct device_id_name  camera_front_id_name[CAMERA_FRONT_ID_NUMS] = {\r
+       {DEVICE_TYPE_CAMERA_FRONT, CAMERA_FRONT_ID_NULL, "camera_front", "no_front", "no", "no_camera_front", ((DEVICE_TYPE_CAMERA_FRONT<<8)\r
+\r
++CAMERA_FRONT_ID_NULL)},               \r
+       \r
+       //to add\r
+       \r
+};\r
+\r
+static struct device_id_name  camera_back_id_name[CAMERA_BACK_ID_NUMS] = {\r
+       {DEVICE_TYPE_CAMERA_BACK, CAMERA_BACK_ID_NULL, "camera_back", "no_back", "no", "no_camera_back", ((DEVICE_TYPE_CAMERA_BACK<<8)+CAMERA_BACK_ID_NULL)},           \r
+       \r
+       //to add\r
+};\r
+       \r
+static struct device_id_name  sensor_angle_id_name[ANGLE_ID_NUMS] = {\r
+       {DEVICE_TYPE_ANGLE, ANGLE_ID_NULL, "angle", "no_angle", "no", "no_angle_sensor", ((DEVICE_TYPE_ANGLE<<8)+ANGLE_ID_NULL)},               \r
+       \r
+       //to add\r
+       \r
+};\r
+\r
+static struct device_id_name  sensor_accel_id_name[ACCEL_ID_NUMS] = {\r
+       {DEVICE_TYPE_ACCEL, ACCEL_ID_NULL, "accel", "no_accel", "no", "no_accel_sensor", ((DEVICE_TYPE_ACCEL<<8)+ACCEL_ID_NULL)},               \r
+       \r
+       //to add\r
+       \r
+};\r
+\r
+static struct device_id_name  sensor_compass_id_name[COMPASS_ID_NUMS] = {\r
+       {DEVICE_TYPE_COMPASS, COMPASS_ID_NULL, "compass", "no_compass", "no", "no_compass_sensor", ((DEVICE_TYPE_COMPASS<<8)+COMPASS_ID_NULL)},         \r
+       \r
+       //to add\r
+       \r
+};\r
+\r
+static struct device_id_name  sensor_gyroscope_id_name[GYRO_ID_NUMS] = {\r
+       {DEVICE_TYPE_GYRO, GYRO_ID_NULL, "gyro", "no_gyro", "no", "no_gyro_sensor", ((DEVICE_TYPE_GYRO<<8)+GYRO_ID_NULL)},              \r
+       \r
+       //to add\r
+       \r
+};\r
+\r
+static struct device_id_name  sensor_light_id_name[LIGHT_ID_NUMS] = {\r
+       {DEVICE_TYPE_LIGHT, LIGHT_ID_NULL, "light", "no_light", "no", "no_light_sensor", ((DEVICE_TYPE_LIGHT<<8)+LIGHT_ID_NULL)},               \r
+       \r
+       //to add\r
+       \r
+};\r
+\r
+static struct device_id_name  sensor_proximity_id_name[PROXIMITY_ID_NUMS] = {\r
+       {DEVICE_TYPE_PROXIMITY, PROXIMITY_ID_NULL, "proximity", "no_proximity", "no", "no_proximity_sensor", ((DEVICE_TYPE_PROXIMITY<<8)+PROXIMITY_ID_NULL)},           \r
+       \r
+       //to add\r
+       \r
+};\r
+\r
+static struct device_id_name  sensor_temperature_id_name[TEMPERATURE_ID_NUMS] = {\r
+       {DEVICE_TYPE_TEMPERATURE, TEMPERATURE_ID_NULL, "temperature", "no_temp", "no", "no_temperature_sensor", ((DEVICE_TYPE_TEMPERATURE<<8)\r
+\r
++TEMPERATURE_ID_NULL)},                \r
+       \r
+       //to add\r
+       \r
+};\r
+       \r
+static struct device_id_name  sensor_pressure_id_name[PRESSURE_ID_NUMS] = {\r
+       {DEVICE_TYPE_PRESSURE, PRESSURE_ID_NULL, "pressure", "no_pressure", "no", "no_pressure_sensor", ((DEVICE_TYPE_PRESSURE<<8)+PRESSURE_ID_NULL)},          \r
+       \r
+       //to add\r
+       \r
+};\r
+\r
+static struct area_id_name area_area_id_name[AREA_ID_NUMS] = {\r
+       {DEVICE_TYPE_AREA, AREA_ID_NULL, "no", "no", "no", "no", "no", USER_DEFINE_NULL}, \r
+       {DEVICE_TYPE_AREA,AREA_ID_ALBANIA,"Albania",LOCALE_LANGUAGE_EL,LOCALE_REGION_AL,COUNTRY_GEO_NULL,TIME_ZONE_BELGRADE,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_ALGERIA,"Algeria",LOCALE_LANGUAGE_AR,LOCALE_REGION_DZ,COUNTRY_GEO_NULL,TIME_ZONE_WINDHOEK,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_ANGOLA,"Angola",LOCALE_LANGUAGE_PT,LOCALE_REGION_AO,COUNTRY_GEO_NULL,TIME_ZONE_WINDHOEK,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_ARGENTINA,"Argentina",LOCALE_LANGUAGE_ES,LOCALE_REGION_AR,COUNTRY_GEO_NULL,TIME_ZONE_BUENOS_AIRES,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_AUSTRALIA,"Australia",LOCALE_LANGUAGE_EN,LOCALE_REGION_AU,COUNTRY_GEO_NULL,TIME_ZONE_PERTH,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_AUSTRIA,"Austria",LOCALE_LANGUAGE_DE,LOCALE_REGION_AT,COUNTRY_GEO_NULL,TIME_ZONE_BELGRADE,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_AZERBAIJAN,"Azerbaijan",LOCALE_LANGUAGE_RU,LOCALE_REGION_AZ,COUNTRY_GEO_NULL,TIME_ZONE_BAKU,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_BAHRAIN,"Bahrain",LOCALE_LANGUAGE_AR,LOCALE_REGION_BH,COUNTRY_GEO_NULL,TIME_ZONE_KUWAIT,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_BANGLADESH,"Bangladesh",LOCALE_LANGUAGE_EN,LOCALE_REGION_BD,COUNTRY_GEO_NULL,TIME_ZONE_ASTANA,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_BARBADOS,"Barbados",LOCALE_LANGUAGE_EN,LOCALE_REGION_BB,COUNTRY_GEO_NULL,TIME_ZONE_ATLANTIC_TIME_BARBADOS,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_BELARUS,"Belarus",LOCALE_LANGUAGE_BE,LOCALE_REGION_BY,COUNTRY_GEO_NULL,TIME_ZONE_MINSK,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_BELGIUM,"Belgium",LOCALE_LANGUAGE_FR,LOCALE_REGION_BE,COUNTRY_GEO_NULL,TIME_ZONE_BRUSSELS,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_BOLIVIA,"Bolivia",LOCALE_LANGUAGE_ES,LOCALE_REGION_BO,COUNTRY_GEO_NULL,TIME_ZONE_SANTIAGO,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_BOSNIA_AND_HERZEGOVINA,"Bosnia and Herzegovina",LOCALE_LANGUAGE_SR,LOCALE_REGION_BA,COUNTRY_GEO_NULL,TIME_ZONE_SARAJEVO,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_BOTSWANA,"Botswana",LOCALE_LANGUAGE_EN,LOCALE_REGION_BW,COUNTRY_GEO_NULL,TIME_ZONE_HARARE,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_BRAZIL,"Brazil",LOCALE_LANGUAGE_PT,LOCALE_REGION_BR,COUNTRY_GEO_NULL,TIME_ZONE_BRASILIA,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_BULGARIA,"Bulgaria",LOCALE_LANGUAGE_BG,LOCALE_REGION_BG,COUNTRY_GEO_NULL,TIME_ZONE_ATHENS_ISTANBUL,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_CANADA,"Canada",LOCALE_LANGUAGE_EN,LOCALE_REGION_CA,COUNTRY_GEO_NULL,TIME_ZONE_NEWFOUNDLAND,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_CHILE,"Chile",LOCALE_LANGUAGE_ES,LOCALE_REGION_CL,COUNTRY_GEO_NULL,TIME_ZONE_SANTIAGO,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_CHINA,"China",LOCALE_LANGUAGE_ZH,LOCALE_REGION_CN,COUNTRY_GEO_NULL,TIME_ZONE_BEIJING,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_COLOMBIA,"Colombia",LOCALE_LANGUAGE_ES,LOCALE_REGION_CO,COUNTRY_GEO_NULL,TIME_ZONE_BOGOTA,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_COTE_D_IVOIRE,"Cote d'Ivoire",LOCALE_LANGUAGE_FR,LOCALE_REGION_CI,COUNTRY_GEO_NULL,TIME_ZONE_LONDON_DUBLIN,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_CROATIA,"Croatia",LOCALE_LANGUAGE_HR,LOCALE_REGION_HR,COUNTRY_GEO_NULL,TIME_ZONE_BELGRADE,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_CYPRUS,"Cyprus",LOCALE_LANGUAGE_EN,LOCALE_REGION_CY,COUNTRY_GEO_NULL,TIME_ZONE_BEIRUT_LEBANON,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_CZECH_REPUBLIC,"Czech Republic",LOCALE_LANGUAGE_CS,LOCALE_REGION_CZ,COUNTRY_GEO_NULL,TIME_ZONE_BRUSSELS,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_DENMARK,"Denmark",LOCALE_LANGUAGE_DA,LOCALE_REGION_DK,COUNTRY_GEO_NULL,TIME_ZONE_BRUSSELS,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_ECUADOR,"Ecuador",LOCALE_LANGUAGE_ES,LOCALE_REGION_EC,COUNTRY_GEO_NULL,TIME_ZONE_MEXICO_CITY,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_EGYPT,"Egypt",LOCALE_LANGUAGE_AR,LOCALE_REGION_EG,COUNTRY_GEO_NULL,TIME_ZONE_CAIRO,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_ESTONIA,"Estonia",LOCALE_LANGUAGE_ET,LOCALE_REGION_EE,COUNTRY_GEO_NULL,TIME_ZONE_HELSINKI,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_FINLAND,"Finland",LOCALE_LANGUAGE_FI,LOCALE_REGION_FI,COUNTRY_GEO_NULL,TIME_ZONE_HELSINKI,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_FRANCE_INC_GUADELOUPE,"France (inc Guadeloupe)",LOCALE_LANGUAGE_FR,LOCALE_REGION_FR,COUNTRY_GEO_NULL,TIME_ZONE_BRUSSELS,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_GEORGIA,"Georgia",LOCALE_LANGUAGE_RU,LOCALE_REGION_GE,COUNTRY_GEO_NULL,TIME_ZONE_TBILISI,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_GERMANY,"Germany",LOCALE_LANGUAGE_DE,LOCALE_REGION_DE,COUNTRY_GEO_NULL,TIME_ZONE_BRUSSELS,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_GREECE,"Greece",LOCALE_LANGUAGE_EL,LOCALE_REGION_GR,COUNTRY_GEO_NULL,TIME_ZONE_ATHENS_ISTANBUL,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_HAITI,"Haiti",LOCALE_LANGUAGE_FR,LOCALE_REGION_HT,COUNTRY_GEO_NULL,TIME_ZONE_BOGOTA,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_HONDURAS,"Honduras",LOCALE_LANGUAGE_ES,LOCALE_REGION_HN,COUNTRY_GEO_NULL,TIME_ZONE_CENTRAL_AMERICA,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_HONG_KONG,"Hong Kong",LOCALE_LANGUAGE_ZH,LOCALE_REGION_HK,COUNTRY_GEO_NULL,TIME_ZONE_HONG_KONG,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_HUNGARY,"Hungary",LOCALE_LANGUAGE_HU,LOCALE_REGION_HU,COUNTRY_GEO_NULL,TIME_ZONE_BELGRADE,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_ICELAND,"Iceland",LOCALE_LANGUAGE_EN,LOCALE_REGION_IS,COUNTRY_GEO_NULL,TIME_ZONE_LONDON_DUBLIN,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_INDIA,"India en_US",LOCALE_LANGUAGE_EN,LOCALE_REGION_IN,COUNTRY_GEO_NULL,TIME_ZONE_KOLKATA,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_INDONESIA,"Indonesia",LOCALE_LANGUAGE_IN,LOCALE_REGION_ID,COUNTRY_GEO_NULL,TIME_ZONE_HONG_KONG,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_IRELAND,"Ireland",LOCALE_LANGUAGE_EN,LOCALE_REGION_IE,COUNTRY_GEO_NULL,TIME_ZONE_LONDON_DUBLIN,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_ISRAEL,"Israel iw",LOCALE_LANGUAGE_IW,LOCALE_REGION_IL,COUNTRY_GEO_NULL,TIME_ZONE_JERUSALEM,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_ITALY,"Italy",LOCALE_LANGUAGE_IT,LOCALE_REGION_IT,COUNTRY_GEO_NULL,TIME_ZONE_BRUSSELS,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_JAMAICA,"Jamaica",LOCALE_LANGUAGE_EN,LOCALE_REGION_JM,COUNTRY_GEO_NULL,TIME_ZONE_EASTERN_TIME,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_JAPAN,"Japan",LOCALE_LANGUAGE_JA,LOCALE_REGION_JP,COUNTRY_GEO_NULL,TIME_ZONE_TOKYO_OSAKA,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_JORDAN,"Jordan",LOCALE_LANGUAGE_AR,LOCALE_REGION_JO,COUNTRY_GEO_NULL,TIME_ZONE_AMMAN_JORDAN,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_KAZAKHSTAN,"Kazakhstan",LOCALE_LANGUAGE_RU,LOCALE_REGION_KZ,COUNTRY_GEO_NULL,TIME_ZONE_MOSCOW,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_KENYA,"Kenya",LOCALE_LANGUAGE_SW,LOCALE_REGION_KE,COUNTRY_GEO_NULL,TIME_ZONE_NAIROBI,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_KOREA_SOUTH,"Korea (South)",LOCALE_LANGUAGE_KO,LOCALE_REGION_KR,COUNTRY_GEO_NULL,TIME_ZONE_SEOUL,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_KUWAIT,"Kuwait",LOCALE_LANGUAGE_AR,LOCALE_REGION_KW,COUNTRY_GEO_NULL,TIME_ZONE_KUWAIT,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_LATVIA,"Latvia",LOCALE_LANGUAGE_LV,LOCALE_REGION_LV,COUNTRY_GEO_NULL,TIME_ZONE_MINSK,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_LEBANON,"Lebanon",LOCALE_LANGUAGE_AR,LOCALE_REGION_LB,COUNTRY_GEO_NULL,TIME_ZONE_BEIRUT_LEBANON,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_LITHUANIA,"Lithuania",LOCALE_LANGUAGE_LT,LOCALE_REGION_LT,COUNTRY_GEO_NULL,TIME_ZONE_MINSK,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_LUXEMBOURG,"Luxembourg",LOCALE_LANGUAGE_FR,LOCALE_REGION_LU,COUNTRY_GEO_NULL,TIME_ZONE_BRUSSELS,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_MACEDONIA,"Macedonia",LOCALE_LANGUAGE_EN,LOCALE_REGION_MK,COUNTRY_GEO_NULL,TIME_ZONE_AMSTERDAM_BERLIN,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_MALAYSIA,"Malaysia",LOCALE_LANGUAGE_MS,LOCALE_REGION_MY,COUNTRY_GEO_NULL,TIME_ZONE_KUALA_LUMPUR,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_MEXICO,"Mexico",LOCALE_LANGUAGE_ES,LOCALE_REGION_MX,COUNTRY_GEO_NULL,TIME_ZONE_CHIHUAHUA,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_MOLDOVA,"Moldova",LOCALE_LANGUAGE_RU,LOCALE_REGION_MD,COUNTRY_GEO_NULL,TIME_ZONE_ATHENS_ISTANBUL,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_MOROCCO,"Morocco",LOCALE_LANGUAGE_AR,LOCALE_REGION_MA,COUNTRY_GEO_NULL,TIME_ZONE_CASABLANCA,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_NEPAL,"Nepal",LOCALE_LANGUAGE_EN,LOCALE_REGION_NP,COUNTRY_GEO_NULL,TIME_ZONE_KATHMANDU,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_NETHERLAND_ANTILLES,"Netherland Antilles",LOCALE_LANGUAGE_NL,LOCALE_REGION_AN,COUNTRY_GEO_NULL,TIME_ZONE_SANTIAGO,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_NETHERLANDS_INC_BONAIRE,"Netherlands (inc Bonn) nl",LOCALE_LANGUAGE_NL,LOCALE_REGION_NL,COUNTRY_GEO_NULL,TIME_ZONE_AMSTERDAM_BERLIN,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_NEW_ZEALAND,"New Zealand",LOCALE_LANGUAGE_EN,LOCALE_REGION_NZ,COUNTRY_GEO_NULL,TIME_ZONE_AUCKLAND,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_NIGERIA,"Nigeria",LOCALE_LANGUAGE_EN,LOCALE_REGION_NG,COUNTRY_GEO_NULL,TIME_ZONE_WINDHOEK,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_NORWAY,"Norway",LOCALE_LANGUAGE_NO,LOCALE_REGION_NO,COUNTRY_GEO_NULL,TIME_ZONE_AMSTERDAM_BERLIN,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_OMAN,"Oman",LOCALE_LANGUAGE_AR,LOCALE_REGION_OM,COUNTRY_GEO_NULL,TIME_ZONE_DUBAI,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_PAKISTAN,"Pakistan",LOCALE_LANGUAGE_EN,LOCALE_REGION_PK,COUNTRY_GEO_NULL,TIME_ZONE_ISLAMABAD_KARACHI,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_PARAGUAY,"Paraguay",LOCALE_LANGUAGE_ES,LOCALE_REGION_PY,COUNTRY_GEO_NULL,TIME_ZONE_SANTIAGO,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_PERU,"Peru",LOCALE_LANGUAGE_ES,LOCALE_REGION_PE,COUNTRY_GEO_NULL,TIME_ZONE_EASTERN_TIME,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_PHILIPPINES,"Philippines",LOCALE_LANGUAGE_TL,LOCALE_REGION_PH,COUNTRY_GEO_NULL,TIME_ZONE_KUALA_LUMPUR,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_POLAND,"Poland",LOCALE_LANGUAGE_PL,LOCALE_REGION_PL,COUNTRY_GEO_NULL,TIME_ZONE_BELGRADE,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_PORTUGAL,"Portugal",LOCALE_LANGUAGE_PT,LOCALE_REGION_PT,COUNTRY_GEO_NULL,TIME_ZONE_LONDON_DUBLIN,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_QATAR,"Qatar",LOCALE_LANGUAGE_AR,LOCALE_REGION_QA,COUNTRY_GEO_NULL,TIME_ZONE_MOSCOW,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_ROMANIA,"Romania",LOCALE_LANGUAGE_RO,LOCALE_REGION_RO,COUNTRY_GEO_NULL,TIME_ZONE_HELSINKI,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_RUSSIA,"Russia",LOCALE_LANGUAGE_RU,LOCALE_REGION_RU,COUNTRY_GEO_NULL,TIME_ZONE_VLADIVOSTOK,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_SAUDI_ARABIA,"Saudi Arabia",LOCALE_LANGUAGE_AR,LOCALE_REGION_SA,COUNTRY_GEO_NULL,TIME_ZONE_KUWAIT,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_SERBIA,"Serbia",LOCALE_LANGUAGE_SR,LOCALE_REGION_CS,COUNTRY_GEO_NULL,TIME_ZONE_BELGRADE,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_SINGAPORE,"Singapore",LOCALE_LANGUAGE_EN,LOCALE_REGION_SG,COUNTRY_GEO_NULL,TIME_ZONE_HONG_KONG,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_SLOVAKIA,"Slovakia",LOCALE_LANGUAGE_SK,LOCALE_REGION_SK,COUNTRY_GEO_NULL,TIME_ZONE_AMSTERDAM_BERLIN,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_SLOVENIA,"Slovenia",LOCALE_LANGUAGE_SL,LOCALE_REGION_SI,COUNTRY_GEO_NULL,TIME_ZONE_AMSTERDAM_BERLIN,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_SOUTH_AFRICA,"South Africa",LOCALE_LANGUAGE_EN,LOCALE_REGION_ZA,COUNTRY_GEO_NULL,TIME_ZONE_CAIRO,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_SPAIN,"Spain",LOCALE_LANGUAGE_ES,LOCALE_REGION_ES,COUNTRY_GEO_NULL,TIME_ZONE_AMSTERDAM_BERLIN,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_SRI_LANKA,"Sri Lanka",LOCALE_LANGUAGE_EN,LOCALE_REGION_LK,COUNTRY_GEO_NULL,TIME_ZONE_SRI_LANKA,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_SWEDEN,"Sweden",LOCALE_LANGUAGE_SV,LOCALE_REGION_SE,COUNTRY_GEO_NULL,TIME_ZONE_AMSTERDAM_BERLIN,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_SWITZERLAND,"Switzerland",LOCALE_LANGUAGE_DE,LOCALE_REGION_CH,COUNTRY_GEO_NULL,TIME_ZONE_AMSTERDAM_BERLIN,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_TAIWAN,"Taiwan",LOCALE_LANGUAGE_ZH,LOCALE_REGION_TW,COUNTRY_GEO_NULL,TIME_ZONE_TAIPEI,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_THAILAND,"Thailand",LOCALE_LANGUAGE_TH,LOCALE_REGION_TH,COUNTRY_GEO_NULL,TIME_ZONE_BANGKOK,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_TRINIDAD_TOBAGO,"Trinidad Tobago",LOCALE_LANGUAGE_EN,LOCALE_REGION_TT,COUNTRY_GEO_NULL,TIME_ZONE_MANAUS,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_TUNISIA,"Tunisia",LOCALE_LANGUAGE_AR,LOCALE_REGION_TN,COUNTRY_GEO_NULL,TIME_ZONE_WINDHOEK,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_TURKEY,"Turkey",LOCALE_LANGUAGE_TR,LOCALE_REGION_TR,COUNTRY_GEO_NULL,TIME_ZONE_JERUSALEM,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_TURKMENISTAN,"Turkmenistan",LOCALE_LANGUAGE_RU,LOCALE_REGION_TM,COUNTRY_GEO_NULL,TIME_ZONE_ISLAMABAD_KARACHI,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_UGANDA,"Uganda",LOCALE_LANGUAGE_EN,LOCALE_REGION_UG,COUNTRY_GEO_NULL,TIME_ZONE_TEHRAN,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_UKRAINE,"Ukraine",LOCALE_LANGUAGE_UK,LOCALE_REGION_UA,COUNTRY_GEO_NULL,TIME_ZONE_ATHENS_ISTANBUL,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_UNITED_KINGDOM,"United Kingdom",LOCALE_LANGUAGE_EN,LOCALE_REGION_GB,COUNTRY_GEO_NULL,TIME_ZONE_LONDON_DUBLIN,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_UNITED_STATES,"United States",LOCALE_LANGUAGE_EN,LOCALE_REGION_US,COUNTRY_GEO_NULL,TIME_ZONE_ARIZONA,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_URUGUAY,"Uruguay",LOCALE_LANGUAGE_ES,LOCALE_REGION_UY,COUNTRY_GEO_NULL,TIME_ZONE_MONTEVIDEO,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_UZBEKISTAN,"Uzbekistan",LOCALE_LANGUAGE_RU,LOCALE_REGION_UZ,COUNTRY_GEO_NULL,TIME_ZONE_YEKATERINBURG,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_VENEZUELA,"Venezuela",LOCALE_LANGUAGE_ES,LOCALE_REGION_VE,COUNTRY_GEO_NULL,TIME_ZONE_VENEZUELA,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_VIETNAM,"Vietnam",LOCALE_LANGUAGE_VI,LOCALE_REGION_VN,COUNTRY_GEO_NULL,TIME_ZONE_BANGKOK,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_NORDICS,"Nordics",LOCALE_LANGUAGE_EN,LOCALE_REGION_SE,COUNTRY_GEO_NULL,TIME_ZONE_AMSTERDAM_BERLIN,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_BALTIC,"Baltic",LOCALE_LANGUAGE_EN,LOCALE_REGION_LT,COUNTRY_GEO_NULL,TIME_ZONE_MINSK,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_CZECH_SLOVAKIA,"Czech-Slovakia",LOCALE_LANGUAGE_EN,LOCALE_REGION_CZ,COUNTRY_GEO_NULL,TIME_ZONE_BRUSSELS,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_CROATIA_SLOVENIA,"Croatia-Slovenia",LOCALE_LANGUAGE_EN,LOCALE_REGION_HR,COUNTRY_GEO_NULL,TIME_ZONE_BELGRADE,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_LA_GROUP,"LA Group",LOCALE_LANGUAGE_ES,LOCALE_REGION_BO,COUNTRY_GEO_NULL,TIME_ZONE_SANTIAGO,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_UNITED_ARAB_EMIRATES,"UAE ar",LOCALE_LANGUAGE_EN,LOCALE_REGION_BH,COUNTRY_GEO_NULL,TIME_ZONE_KUWAIT,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_EMAT_UK,"EMAT-UK",LOCALE_LANGUAGE_EN,LOCALE_REGION_KE,COUNTRY_GEO_NULL,TIME_ZONE_NAIROBI,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_EMAT_FR,"EMAT-FR",LOCALE_LANGUAGE_FR,LOCALE_REGION_CI,COUNTRY_GEO_NULL,TIME_ZONE_LONDON_DUBLIN,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_EMAT_PO,"EMAT-PO",LOCALE_LANGUAGE_PT,LOCALE_REGION_AO,COUNTRY_GEO_NULL,TIME_ZONE_WINDHOEK,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_INDIA_HI,"India hi",LOCALE_LANGUAGE_EN,LOCALE_REGION_IN,COUNTRY_GEO_NULL,TIME_ZONE_KOLKATA,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_UAE_EN,"UAE en",LOCALE_LANGUAGE_EN,LOCALE_REGION_BH,COUNTRY_GEO_NULL,TIME_ZONE_KUWAIT,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_ISRAEL_AR,"Israel ar",LOCALE_LANGUAGE_IW,LOCALE_REGION_IL,COUNTRY_GEO_NULL,TIME_ZONE_JERUSALEM,USER_DEFINE_NULL},\r
+       {DEVICE_TYPE_AREA,AREA_ID_NETHERLANDS_INC_BONAIRE_ENUS,"Netherlands(inc Bonn) en_US",LOCALE_LANGUAGE_NL,LOCALE_REGION_NL,COUNTRY_GEO_NULL,TIME_ZONE_AMSTERDAM_BERLIN,USER_DEFINE_NULL},\r
+};\r
+\r
+\r
+static int board_id_init_data(struct board_id_private_data *board_id)\r
+{\r
+       int result = 0;\r
+       \r
+       memcpy(board_id->area_area_id_name, area_area_id_name, sizeof(area_area_id_name));      \r
+       memcpy(board_id->area_operator_id_name, area_operator_id_name, sizeof(area_operator_id_name));\r
+       memcpy(board_id->area_reserve_id_name, area_reserve_id_name, sizeof(area_reserve_id_name));\r
+       memcpy(board_id->tp_id_name, tp_id_name, sizeof(tp_id_name));\r
+       memcpy(board_id->lcd_id_name, lcd_id_name, sizeof(lcd_id_name));\r
+       memcpy(board_id->key_id_name, key_id_name, sizeof(key_id_name));\r
+       memcpy(board_id->codec_id_name, codec_id_name, sizeof(codec_id_name));\r
+       memcpy(board_id->wifi_id_name, wifi_id_name, sizeof(wifi_id_name));\r
+       memcpy(board_id->bt_id_name, bt_id_name, sizeof(bt_id_name));   \r
+       memcpy(board_id->gps_id_name, gps_id_name, sizeof(gps_id_name));\r
+       memcpy(board_id->fm_id_name, fm_id_name, sizeof(fm_id_name));\r
+       memcpy(board_id->modem_id_name, modem_id_name, sizeof(modem_id_name));  \r
+       memcpy(board_id->ddr_id_name, ddr_id_name, sizeof(ddr_id_name));\r
+       memcpy(board_id->flash_id_name, flash_id_name, sizeof(flash_id_name));\r
+       memcpy(board_id->hdmi_id_name, hdmi_id_name, sizeof(hdmi_id_name));\r
+       memcpy(board_id->battery_id_name, battery_id_name, sizeof(battery_id_name));\r
+       memcpy(board_id->charge_id_name, charge_id_name, sizeof(charge_id_name));       \r
+       memcpy(board_id->backlight_id_name, backlight_id_name, sizeof(backlight_id_name));\r
+       memcpy(board_id->headset_id_name, headset_id_name, sizeof(headset_id_name));\r
+       memcpy(board_id->micphone_id_name, micphone_id_name, sizeof(micphone_id_name));\r
+       memcpy(board_id->speaker_id_name, speaker_id_name, sizeof(speaker_id_name));\r
+       memcpy(board_id->vibrator_id_name, vibrator_id_name, sizeof(vibrator_id_name));\r
+       memcpy(board_id->tv_id_name, tv_id_name, sizeof(tv_id_name));   \r
+       memcpy(board_id->echip_id_name, echip_id_name, sizeof(echip_id_name));  \r
+       memcpy(board_id->hub_id_name, hub_id_name, sizeof(hub_id_name));\r
+       memcpy(board_id->tpad_id_name, tpad_id_name, sizeof(tpad_id_name));\r
+       \r
+       memcpy(board_id->pmic_id_name, pmic_id_name, sizeof(pmic_id_name));\r
+       memcpy(board_id->regulator_id_name, regulator_id_name, sizeof(regulator_id_name));\r
+       memcpy(board_id->rtc_id_name, rtc_id_name, sizeof(rtc_id_name));\r
+       memcpy(board_id->camera_front_id_name, camera_front_id_name, sizeof(camera_front_id_name));\r
+       memcpy(board_id->camera_back_id_name, camera_back_id_name, sizeof(camera_back_id_name));        \r
+       memcpy(board_id->sensor_angle_id_name, sensor_angle_id_name, sizeof(sensor_angle_id_name));\r
+       memcpy(board_id->sensor_accel_id_name, sensor_accel_id_name, sizeof(sensor_accel_id_name));\r
+       memcpy(board_id->sensor_compass_id_name, sensor_compass_id_name, sizeof(sensor_compass_id_name));\r
+       memcpy(board_id->sensor_gyroscope_id_name, sensor_gyroscope_id_name, sizeof(sensor_gyroscope_id_name));\r
+       memcpy(board_id->sensor_light_id_name, sensor_light_id_name, sizeof(sensor_light_id_name));\r
+       memcpy(board_id->sensor_proximity_id_name, sensor_proximity_id_name, sizeof(sensor_proximity_id_name));\r
+       memcpy(board_id->sensor_temperature_id_name, sensor_temperature_id_name, sizeof(sensor_temperature_id_name));   \r
+       memcpy(board_id->sensor_pressure_id_name, sensor_pressure_id_name, sizeof(sensor_pressure_id_name));\r
+\r
+       board_id->device_start_addr[DEVICE_TYPE_TP] = board_id->tp_id_name;\r
+       board_id->device_start_addr[DEVICE_TYPE_LCD] = board_id->lcd_id_name;   \r
+       board_id->device_start_addr[DEVICE_TYPE_KEY] = board_id->key_id_name;   \r
+       board_id->device_start_addr[DEVICE_TYPE_CODEC] = board_id->codec_id_name;\r
+       board_id->device_start_addr[DEVICE_TYPE_WIFI] = board_id->wifi_id_name;\r
+       board_id->device_start_addr[DEVICE_TYPE_BT] = board_id->bt_id_name;     \r
+       board_id->device_start_addr[DEVICE_TYPE_GPS] = board_id->gps_id_name;   \r
+       board_id->device_start_addr[DEVICE_TYPE_FM] = board_id->fm_id_name;     \r
+       board_id->device_start_addr[DEVICE_TYPE_MODEM] = board_id->modem_id_name;       \r
+       board_id->device_start_addr[DEVICE_TYPE_DDR] = board_id->ddr_id_name;\r
+       board_id->device_start_addr[DEVICE_TYPE_FLASH] = board_id->flash_id_name;\r
+       board_id->device_start_addr[DEVICE_TYPE_HDMI] = board_id->hdmi_id_name;\r
+       board_id->device_start_addr[DEVICE_TYPE_BATTERY] = board_id->battery_id_name;\r
+       board_id->device_start_addr[DEVICE_TYPE_CHARGE] = board_id->charge_id_name;     \r
+       board_id->device_start_addr[DEVICE_TYPE_BACKLIGHT] = board_id->backlight_id_name;\r
+       board_id->device_start_addr[DEVICE_TYPE_HEADSET] = board_id->headset_id_name;\r
+       board_id->device_start_addr[DEVICE_TYPE_MICPHONE] = board_id->micphone_id_name;\r
+       board_id->device_start_addr[DEVICE_TYPE_SPEAKER] = board_id->speaker_id_name;\r
+       board_id->device_start_addr[DEVICE_TYPE_VIBRATOR] = board_id->vibrator_id_name;\r
+       board_id->device_start_addr[DEVICE_TYPE_TV] = board_id->tv_id_name;\r
+       board_id->device_start_addr[DEVICE_TYPE_ECHIP] = board_id->echip_id_name;\r
+       board_id->device_start_addr[DEVICE_TYPE_HUB] = board_id->hub_id_name;\r
+       board_id->device_start_addr[DEVICE_TYPE_TPAD] = board_id->tpad_id_name;\r
+       \r
+       board_id->device_start_addr[DEVICE_TYPE_PMIC] = board_id->pmic_id_name;\r
+       board_id->device_start_addr[DEVICE_TYPE_REGULATOR] = board_id->regulator_id_name;\r
+       board_id->device_start_addr[DEVICE_TYPE_RTC] = board_id->rtc_id_name;\r
+       board_id->device_start_addr[DEVICE_TYPE_CAMERA_FRONT] = board_id->camera_front_id_name;\r
+       board_id->device_start_addr[DEVICE_TYPE_CAMERA_BACK] = board_id->camera_back_id_name;   \r
+       board_id->device_start_addr[DEVICE_TYPE_ANGLE] = board_id->sensor_angle_id_name;\r
+       board_id->device_start_addr[DEVICE_TYPE_ACCEL] = board_id->sensor_accel_id_name;\r
+       board_id->device_start_addr[DEVICE_TYPE_COMPASS] = board_id->sensor_compass_id_name;\r
+       board_id->device_start_addr[DEVICE_TYPE_GYRO] = board_id->sensor_gyroscope_id_name;\r
+       board_id->device_start_addr[DEVICE_TYPE_LIGHT] = board_id->sensor_light_id_name;\r
+       board_id->device_start_addr[DEVICE_TYPE_PROXIMITY] = board_id->sensor_proximity_id_name;\r
+       board_id->device_start_addr[DEVICE_TYPE_TEMPERATURE] = board_id->sensor_temperature_id_name;    \r
+       board_id->device_start_addr[DEVICE_TYPE_PRESSURE] = board_id->sensor_pressure_id_name;\r
+\r
+\r
+       board_id->device_num_max[DEVICE_TYPE_TP] = TP_ID_NUMS;\r
+       board_id->device_num_max[DEVICE_TYPE_LCD] = LCD_ID_NUMS;        \r
+       board_id->device_num_max[DEVICE_TYPE_KEY] = KEY_ID_NUMS;        \r
+       board_id->device_num_max[DEVICE_TYPE_CODEC] = CODEC_ID_NUMS;\r
+       board_id->device_num_max[DEVICE_TYPE_WIFI] = WIFI_ID_NUMS;\r
+       board_id->device_num_max[DEVICE_TYPE_BT] = BT_ID_NUMS;  \r
+       board_id->device_num_max[DEVICE_TYPE_GPS] = GPS_ID_NUMS;        \r
+       board_id->device_num_max[DEVICE_TYPE_FM] = FM_ID_NUMS;  \r
+       board_id->device_num_max[DEVICE_TYPE_MODEM] = MODEM_ID_NUMS;    \r
+       board_id->device_num_max[DEVICE_TYPE_DDR] = DDR_ID_NUMS;\r
+       board_id->device_num_max[DEVICE_TYPE_FLASH] = FLASH_ID_NUMS;\r
+       board_id->device_num_max[DEVICE_TYPE_HDMI] = HDMI_ID_NUMS;\r
+       board_id->device_num_max[DEVICE_TYPE_BATTERY] = BATTERY_ID_NUMS;\r
+       board_id->device_num_max[DEVICE_TYPE_CHARGE] = CHARGE_ID_NUMS;  \r
+       board_id->device_num_max[DEVICE_TYPE_BACKLIGHT] = BACKLIGHT_ID_NUMS;\r
+       board_id->device_num_max[DEVICE_TYPE_HEADSET] = HEADSET_ID_NUMS;\r
+       board_id->device_num_max[DEVICE_TYPE_MICPHONE] = MICPHONE_ID_NUMS;\r
+       board_id->device_num_max[DEVICE_TYPE_SPEAKER] = SPEAKER_ID_NUMS;\r
+       board_id->device_num_max[DEVICE_TYPE_VIBRATOR] = VIBRATOR_ID_NUMS;\r
+       board_id->device_num_max[DEVICE_TYPE_TV] = TV_ID_NUMS;\r
+       board_id->device_num_max[DEVICE_TYPE_ECHIP] = ECHIP_ID_NUMS;\r
+       board_id->device_num_max[DEVICE_TYPE_HUB] = HUB_ID_NUMS;\r
+       board_id->device_num_max[DEVICE_TYPE_TPAD] = TPAD_ID_NUMS;\r
+       \r
+       board_id->device_num_max[DEVICE_TYPE_PMIC] = PMIC_ID_NUMS;\r
+       board_id->device_num_max[DEVICE_TYPE_REGULATOR] = REGULATOR_ID_NUMS;\r
+       board_id->device_num_max[DEVICE_TYPE_RTC] = RTC_ID_NUMS;\r
+       board_id->device_num_max[DEVICE_TYPE_CAMERA_FRONT] = CAMERA_FRONT_ID_NUMS;\r
+       board_id->device_num_max[DEVICE_TYPE_CAMERA_BACK] = CAMERA_BACK_ID_NUMS;        \r
+       board_id->device_num_max[DEVICE_TYPE_ANGLE] = ANGLE_ID_NUMS;\r
+       board_id->device_num_max[DEVICE_TYPE_ACCEL] = ACCEL_ID_NUMS;\r
+       board_id->device_num_max[DEVICE_TYPE_COMPASS] = COMPASS_ID_NUMS;\r
+       board_id->device_num_max[DEVICE_TYPE_GYRO] = GYRO_ID_NUMS;\r
+       board_id->device_num_max[DEVICE_TYPE_LIGHT] = LIGHT_ID_NUMS;\r
+       board_id->device_num_max[DEVICE_TYPE_PROXIMITY] = PROXIMITY_ID_NUMS;\r
+       board_id->device_num_max[DEVICE_TYPE_TEMPERATURE] = TEMPERATURE_ID_NUMS;        \r
+       board_id->device_num_max[DEVICE_TYPE_PRESSURE] = PRESSURE_ID_NUMS;\r
+       \r
+       \r
+       return result;\r
+\r
+}\r
+\r
+\r
+char board_id_get(enum type_devices type)\r
+{\r
+       return g_board_id->device_selected[type].id;\r
+}\r
+EXPORT_SYMBOL_GPL(board_id_get);\r
+\r
+\r
+#include <asm/pgtable.h>\r
+static __init void rk30_get_vender_sector(u8 *buf)\r
+{\r
+#define RK30_NANDC_BASE IOMEM(0xFEC00000)\r
+       u32 v, a;\r
+       u32 flag = PMD_TYPE_SECT | PMD_SECT_XN | PMD_SECT_AP_WRITE | PMD_SECT_AP_READ;\r
+\r
+       a = (u32)pgd_val(pgd_offset_k((u32)RK30_NANDC_BASE));\r
+       v = readl_relaxed(a);\r
+       writel_relaxed(flag | ((RK30_NANDC_PHYS >> 20) << 20), a);\r
+\r
+       memcpy(buf, RK30_NANDC_BASE + 0x1400 + 0x08, 0x200 - 0x08);\r
+\r
+       writel_relaxed(v, a);\r
+}\r
+\r
+\r
+static __init void rk30_get_idb_sector(u8 *buf)\r
+{\r
+#define RK30_NANDC_BASE IOMEM(0xFEC00000)\r
+       u32 v, a;\r
+       u32 flag = PMD_TYPE_SECT | PMD_SECT_XN | PMD_SECT_AP_WRITE | PMD_SECT_AP_READ;\r
+\r
+       a = (u32)pgd_val(pgd_offset_k((u32)RK30_NANDC_BASE));\r
+       v = readl_relaxed(a);\r
+       writel_relaxed(flag | ((RK30_NANDC_PHYS >> 20) << 20), a);\r
+\r
+       memcpy(buf, RK30_NANDC_BASE + 0x1600, 0x200);\r
+\r
+       writel_relaxed(v, a);\r
+}\r
+\r
+static int board_id_vendor_data_check(char *pbuf)\r
+{\r
+       int sum = 0;\r
+       int i = 0;\r
+       int temp = 0;\r
+\r
+       //for(i=DEVICE_TYPE_NULL; i<DEVICE_NUM_TYPES; i++)\r
+       //printk("buf[%d]=0x%x\n",i, pbuf[i]);\r
+\r
+       temp = ((int)(pbuf[DEVICE_TYPE_SUM] << 24) | ((int)(pbuf[DEVICE_TYPE_SUM+1] << 16)) | ((int)(pbuf[DEVICE_TYPE_SUM+2] << 8)) | (int)(pbuf[DEVICE_TYPE_SUM+3]));\r
+       \r
+       for(i=DEVICE_TYPE_AREA; i<DEVICE_NUM_TYPES; i++)\r
+       sum += pbuf[i];\r
+\r
+       if((temp != sum) || (temp == 0) || (sum == 0))\r
+       {\r
+               printk("%s:sum=0x%x, temp=0x%x\n", __func__, sum, temp);\r
+               return -1;\r
+       }\r
+\r
+       return 0;\r
+}\r
+\r
+int board_id_get_from_flash(char *pbuf, int type)\r
+{\r
+       char sn_buf[512];\r
+       char vendor_buf[504];   \r
+       static char vendor_buf_temp[504];\r
+       int i = 0;\r
+\r
+       printk("%s:\n",__func__);\r
+       memset(sn_buf,0,512);   \r
+       memset(vendor_buf,0,504);       \r
+       memset(vendor_buf_temp,0,504);\r
+       if(type == BID_MM_IOMEM)\r
+       {\r
+               rk30_get_idb_sector(sn_buf);\r
+               //print_hex_dump(KERN_INFO, "idb: ", DUMP_PREFIX_OFFSET, 16, 1, sn_buf, 0x200, true);\r
+               rk30_get_vender_sector(vendor_buf_temp);        \r
+               //print_hex_dump(KERN_INFO, "idb: ", DUMP_PREFIX_OFFSET, 16, 1, vendor_buf_temp, 504, true);\r
+       }\r
+       else\r
+       {\r
+               GetSNSectorInfoBeforeNandInit(sn_buf);\r
+               GetVendor0InfoBeforeNandInit(vendor_buf_temp);\r
+       }\r
+\r
+       printk("%s GUID:",__func__);\r
+       for(i=480; i<496; i++)\r
+       {\r
+               printk("%02x",sn_buf[i]);\r
+               if((i==483) || (i==485) || (i==487) || (i==489))\r
+               printk("-");\r
+       }\r
+       printk("\n");\r
+               \r
+       \r
+       memcpy(&vendor_buf[DEVICE_TYPE_SUM], vendor_buf_temp, 127-DEVICE_TYPE_AREA+1);\r
+       \r
+       if(!board_id_vendor_data_check(vendor_buf))\r
+       {\r
+               memcpy(pbuf, vendor_buf, DEVICE_NUM_TYPES);\r
+\r
+               printk("%s:vendor data is valid\n",__func__);\r
+       }\r
+       else if(!board_id_vendor_data_check(sn_buf))\r
+       {\r
+               memcpy(pbuf, sn_buf, DEVICE_NUM_TYPES); \r
+       \r
+               printk("%s:idblock data is valid\n",__func__);\r
+       }\r
+       else\r
+       {\r
+               pbuf[DEVICE_TYPE_AREA] = AREA_ID_UNITED_STATES; \r
+               pbuf[DEVICE_TYPE_OPERATOR] = (20000 >> 8);      \r
+               pbuf[DEVICE_TYPE_OPERATOR+1] = (20000 & 0xff);  //no\r
+               pbuf[DEVICE_TYPE_RESERVE] = 0;  \r
+               pbuf[DEVICE_TYPE_STATUS] = 0x01;\r
+               \r
+               pbuf[DEVICE_TYPE_TP] = TP_ID_EKTF2K;    \r
+               pbuf[DEVICE_TYPE_LCD] = LCD_ID_EDID_I2C;\r
+               pbuf[DEVICE_TYPE_KEY] = KEY_ID_ENGLISH_US; \r
+               pbuf[DEVICE_TYPE_CODEC] = CODEC_ID_RT5640;\r
+               pbuf[DEVICE_TYPE_WIFI] = WIFI_ID_BCM;\r
+               pbuf[DEVICE_TYPE_BT] = BT_ID_RFKILL;    \r
+               pbuf[DEVICE_TYPE_GPS] = GPS_ID_RK_HV5820;\r
+               pbuf[DEVICE_TYPE_FM] = FM_ID_NULL;\r
+               pbuf[DEVICE_TYPE_MODEM] = MODEM_ID_NULL;        \r
+               pbuf[DEVICE_TYPE_DDR] = DDR_ID_NULL;\r
+               pbuf[DEVICE_TYPE_FLASH] = DDR_ID_NULL;\r
+               pbuf[DEVICE_TYPE_HDMI] = HDMI_ID_CAT66121;\r
+               pbuf[DEVICE_TYPE_BATTERY] = BATTERY_ID_BLUEBERRY;\r
+               pbuf[DEVICE_TYPE_CHARGE] = CHARGE_ID_NULL;\r
+               pbuf[DEVICE_TYPE_BACKLIGHT] = BACKLIGHT_ID_RK29;\r
+               pbuf[DEVICE_TYPE_HEADSET] = HEADSET_ID_RK29;\r
+               pbuf[DEVICE_TYPE_MICPHONE] = MICPHONE_ID_NULL;\r
+               pbuf[DEVICE_TYPE_SPEAKER] = SPEAKER_ID_1W5;\r
+               pbuf[DEVICE_TYPE_VIBRATOR] = VIBRATOR_ID_RK29;\r
+               pbuf[DEVICE_TYPE_TV] = TV_ID_NULL;      \r
+               pbuf[DEVICE_TYPE_ECHIP] = ECHIP_ID_IT8561;      \r
+               pbuf[DEVICE_TYPE_HUB] = HUB_ID_USB4604;\r
+               pbuf[DEVICE_TYPE_TPAD] = TPAD_ID_ELAN;\r
+               \r
+               pbuf[DEVICE_TYPE_PMIC] = PMIC_ID_NULL;\r
+               pbuf[DEVICE_TYPE_REGULATOR] = REGULATOR_ID_NULL;\r
+               pbuf[DEVICE_TYPE_RTC] = RTC_ID_HYM8563;\r
+               pbuf[DEVICE_TYPE_CAMERA_FRONT] = CAMERA_FRONT_ID_NULL;\r
+               pbuf[DEVICE_TYPE_CAMERA_BACK] = CAMERA_BACK_ID_NULL;    \r
+               pbuf[DEVICE_TYPE_ANGLE] = ANGLE_ID_NULL;\r
+               pbuf[DEVICE_TYPE_ACCEL] = ACCEL_ID_NULL;\r
+               pbuf[DEVICE_TYPE_COMPASS] = COMPASS_ID_NULL;\r
+               pbuf[DEVICE_TYPE_GYRO] = GYRO_ID_NULL;\r
+               pbuf[DEVICE_TYPE_LIGHT] = LIGHT_ID_NULL;\r
+               pbuf[DEVICE_TYPE_PROXIMITY] = PROXIMITY_ID_NULL;\r
+               pbuf[DEVICE_TYPE_TEMPERATURE] = TEMPERATURE_ID_NULL;\r
+               pbuf[DEVICE_TYPE_PRESSURE] = PRESSURE_ID_NULL;\r
+       \r
+               printk("%s:vendor and idblock data is invalid,use default config\n",__func__);\r
+               \r
+       }\r
+\r
+       return 0;\r
+\r
+}\r
+EXPORT_SYMBOL_GPL(board_id_get_from_flash);\r
+\r
+\r
+\r
+int __init board_id_resolve(struct board_id_private_data *board_id)\r
+{\r
+       int result = 0;\r
+       int i = 0, j=0;\r
+       \r
+       board_id_get_from_flash(board_id->vendor_data, BID_MM_IOREMAP);\r
+       \r
+       board_id->area_select = board_id->area_area_id_name[(unsigned)board_id->vendor_data[DEVICE_TYPE_AREA]];\r
+\r
+       for(j=OPERATOR_ID_20000_NO_OPERATOR; j<OPERATOR_ID_NUMS; j++)\r
+       {\r
+               if(board_id->area_operator_id_name[j].id == ((int)(board_id->vendor_data[DEVICE_TYPE_OPERATOR] << 8) | (int)(board_id->vendor_data[DEVICE_TYPE_OPERATOR+1])))\r
+               {\r
+                       board_id->operator_select = board_id->area_operator_id_name[j];\r
+                       break;\r
+               }\r
+       }\r
+               \r
+       board_id->reserve_select = board_id->area_reserve_id_name[(unsigned)board_id->vendor_data[DEVICE_TYPE_RESERVE]];\r
+       \r
+       printk("%s:area type=%d,id=%d,country_area=%s,locale_region=%s,locale_language=%s\n",__func__,board_id->area_select.type,board_id->area_select.id,board_id->area_select.country_area,board_id->area_select.locale_region, board_id->area_select.locale_language);       \r
+       //printk("%s:operator type=%d,id=%d,locale_region=%s,operator_name=%s\n",__func__,board_id->operator_select.type,board_id->operator_select.id,board_id->operator_select.locale_region, board_id->operator_select.operator_name);\r
+       //printk("%s:reserve type=%d,id=%d,locale_region=%s,reserve_name=%s\n",__func__,board_id->reserve_select.type,board_id->reserve_select.id,board_id->reserve_select.locale_region,board_id->reserve_select.reserve_name);\r
+       \r
+       for(j=AREA_ID_NULL; j<AREA_ID_NUMS; j++)\r
+       {\r
+               if(board_id->area_area_id_name[j].id != j)\r
+               printk("%s:type=%d, country_area=%s, id=%d != j=%d\n",__func__,board_id->area_area_id_name[j].type, board_id->area_area_id_name[j].country_area, board_id->area_area_id_name[j].id, j);\r
+       }\r
+       \r
+       for(i=DEVICE_TYPE_TP; i<DEVICE_NUM_TYPES; i++)\r
+       {\r
+               board_id->device_selected[i] = board_id->device_start_addr[i][(unsigned)board_id->vendor_data[i]];\r
+               \r
+               if(board_id->device_selected[i].id != board_id->vendor_data[i])\r
+               printk("%s:id error! device_selected[%d].id = %d, vendor_data[%d] =%d\n",__func__, i, board_id->device_selected[i].id, i, board_id->vendor_data[i]);\r
+\r
+               for(j=0; j<board_id->device_num_max[i]; j++)\r
+               {\r
+                       if(board_id->device_start_addr[i][j].id != j)\r
+                       printk("%s:warning type=%d, name=%s,id=%d != j=%d\n",__func__, board_id->device_start_addr[i][j].type, board_id->device_start_addr[i][j].type_name, board_id->device_start_addr[i][j].id, j);\r
+               }\r
+               \r
+               //printk("buf[%d].id = %d,type=%s, dev=%s\n",i, board_id->device_selected[i].id, board_id->device_selected[i].type_name, board_id->device_selected[i].dev_name);\r
+       }\r
+       printk("\n");\r
+       \r
+       return result;\r
+}\r
+\r
+\r
+static int __init board_id_add_devices(struct board_id_private_data *board_id, struct board_device_table *device_table, int device_table_size)\r
+{      \r
+       int num = 0;\r
+       int i = 0, j=0, k=0;\r
+       struct i2c_board_info *i2c_info_temp = NULL;\r
+       struct spi_board_info *spi_info_temp = NULL;\r
+       struct platform_device **devices = NULL;\r
+       struct valid_invalid_name *valid_name = NULL;\r
+       char *buf = board_id->vendor_data;\r
+       struct device_id_name  *device_id_name_start = board_id->tp_id_name;\r
+\r
+       if(device_table[BOARD_DEVICE_TYPE_VALID].type == BOARD_DEVICE_TYPE_VALID)\r
+       valid_name = (struct valid_invalid_name*)device_table[BOARD_DEVICE_TYPE_VALID].addr;\r
+       \r
+       for(num=0; num<device_table_size; num++)\r
+       {\r
+               switch(device_table[num].type)\r
+               {\r
+                       case BOARD_DEVICE_TYPE_I2C:\r
+                               i2c_info_temp = (struct i2c_board_info *)device_table[num].addr;\r
+                               if(!i2c_info_temp)\r
+                               continue;\r
+\r
+                               \r
+                               for(i=0; i<device_table[num].size; i++)\r
+                               {       \r
+\r
+                                       \r
+                               #if 1\r
+                                       for(j=0; j<device_table[BOARD_DEVICE_TYPE_VALID].size; j++)\r
+                                       {\r
+                                               \r
+                                               if(!valid_name) break;\r
+\r
+                                               if(!strcmp(i2c_info_temp[i].type, valid_name[j].name))\r
+                                               {\r
+                                                       i2c_register_board_info(device_table[num].bus, &i2c_info_temp[i], 1);\r
+                                                       printk("%s:i2c%d_info[%d] name=%s valid always\n",__func__,device_table[num].bus, i, i2c_info_temp[i].type);\r
+                                                       continue;\r
+                                               }\r
+                                       }\r
+\r
+                               #endif\r
+                                       for(j=DEVICE_TYPE_TP; j<DEVICE_NUM_TYPES; j++)\r
+                                       {                       \r
+                                               device_id_name_start = board_id->device_start_addr[j];\r
+\r
+                                               for(k=0; k<board_id->device_num_max[j]; k++)\r
+                                               {\r
+                                                       if(!device_id_name_start)\r
+                                                       {\r
+                                                               printk("%s:address is null,type=%d,id=%d\n",__func__, j, k);\r
+                                                               break;\r
+                                                       }\r
+\r
+                                                       if((device_id_name_start->type == j) && (buf[j] == device_id_name_start->id) && (!strcmp(i2c_info_temp[i].type, device_id_name_start->driver_name)))\r
+                                                       {\r
+                                                               i2c_register_board_info(device_table[num].bus, &i2c_info_temp[i], 1);\r
+                                                               printk("%s:i2c%d_info[%d] name=%s,type=%d,id=%d\n",__func__, device_table[num].bus, i, i2c_info_temp[i].type, device_id_name_start->type, device_id_name_start->id);\r
+                                                       }\r
+\r
+                                                       device_id_name_start++;\r
+                                               }\r
+\r
+                                       }\r
+                               \r
+                                               \r
+                               }\r
+                               \r
+                               break;\r
+\r
+                       case BOARD_DEVICE_TYPE_SPI:\r
+                               spi_info_temp = (struct spi_board_info *)device_table[num].addr;\r
+                               if(!spi_info_temp)\r
+                               continue;\r
+\r
+                               \r
+                               for(i=0; i<device_table[num].size; i++)\r
+                               {       \r
+                               \r
+                                       for(j=0; j<device_table[BOARD_DEVICE_TYPE_VALID].size; j++)\r
+                                       {\r
+                                               \r
+                                               if(!valid_name) break;\r
+                                               \r
+                                               if(!strcmp(spi_info_temp[i].modalias, valid_name[j].name))\r
+                                               {\r
+                                                       spi_register_board_info(&spi_info_temp[i], 1);\r
+                                                       printk("%s:spi%d_info[%d] name=%s valid always\n",__func__, spi_info_temp[i].bus_num, i, spi_info_temp[i].modalias);\r
+                                                       continue;\r
+                                               }\r
+                                       }\r
+\r
+                               \r
+                                       for(j=DEVICE_TYPE_TP; j<DEVICE_NUM_TYPES; j++)\r
+                                       {                       \r
+                                               device_id_name_start = board_id->device_start_addr[j];\r
+\r
+                                               for(k=0; k<board_id->device_num_max[j]; k++)\r
+                                               {\r
+                                                       if(!device_id_name_start)\r
+                                                       {\r
+                                                               printk("%s:address is null,type=%d,id=%d\n",__func__, j, k);\r
+                                                               break;\r
+                                                       }\r
+\r
+                                                       if((device_id_name_start->type == j) && (buf[j] == device_id_name_start->id) && (!strcmp(spi_info_temp[i].modalias, device_id_name_start->driver_name)))\r
+                                                       {\r
+                                                               spi_register_board_info(&spi_info_temp[i], 1);\r
+                                                               printk("%s:spi%d_info[%d] name=%s,type=%d,id=%d\n",__func__, spi_info_temp[i].bus_num, i, spi_info_temp[i].modalias, device_id_name_start->type, device_id_name_start->id);\r
+                                                       }\r
+\r
+                                                       device_id_name_start++;\r
+                                               }\r
+\r
+                                       }\r
+                               \r
+                                               \r
+                               }\r
+                               \r
+                               break;\r
+\r
+                       case BOARD_DEVICE_TYPE_PLATFORM:                \r
+                               devices = (struct platform_device**)(device_table[num].addr);\r
+                               if(!devices)\r
+                               continue;\r
+               \r
+                               for(i=0; i<device_table[num].size; i++)\r
+                               {\r
+\r
+                                       for(j=0; j<device_table[BOARD_DEVICE_TYPE_VALID].size; j++)\r
+                                       {                       \r
+                                               if(!valid_name) break;\r
+                                               \r
+                                               if(!strcmp(devices[i]->name, valid_name[j].name))\r
+                                               {\r
+                                                       platform_add_devices(&devices[i], 1);\r
+                                                       printk("%s:devices[%d] name=%s valid always\n",__func__, i, devices[i]->name);\r
+                                                       continue;\r
+                                               }\r
+                                       }\r
+\r
+\r
+                                       for(j=DEVICE_TYPE_TP; j<DEVICE_NUM_TYPES; j++)\r
+                                       {                       \r
+                                               device_id_name_start = board_id->device_start_addr[j];\r
+                                               \r
+                                               for(k=0; k<board_id->device_num_max[j]; k++)\r
+                                               {\r
+                                                       if(!device_id_name_start)\r
+                                                       {\r
+                                                               printk("%s:address is null,type=%d,id=%d\n",__func__, j, k);\r
+                                                               break;\r
+                                                       }\r
+\r
+                                                       if((device_id_name_start->type == j) && (buf[j] == device_id_name_start->id) && (!strcmp(devices[i]->name, device_id_name_start->driver_name)))\r
+                                                       {\r
+                                                               platform_add_devices(&devices[i], 1);\r
+                                                               \r
+                                                               printk("%s:devices[%d] name=%s,type=%d, id=%d\n",__func__, i, devices[i]->name, device_id_name_start->type, device_id_name_start->id);\r
+                                                               \r
+                                                       }\r
+\r
+                                                       device_id_name_start++;\r
+                                               }\r
+\r
+                                       }\r
+                               }\r
+\r
+                               \r
+                               break;\r
+                               \r
+                       default:\r
+                               printk("%s:ignore type=%d\n",__func__, device_table[num].type);\r
+                               break;\r
+                               \r
+               }\r
+\r
+\r
+       }\r
+\r
+       return 0;\r
+\r
+}\r
+\r
+\r
+\r
+static int __init board_id_probe(struct platform_device *pdev)\r
+{\r
+       struct board_id_platform_data *pdata = pdev->dev.platform_data;\r
+       struct board_id_private_data *board_id = NULL;\r
+       int i = 0, result;      \r
+\r
+       if(!pdata)\r
+               return -1;\r
+               \r
+       if(pdata->init_platform_hw)\r
+               pdata->init_platform_hw();\r
+       \r
+       board_id = kzalloc(sizeof(struct board_id_private_data), GFP_KERNEL);\r
+       if(board_id == NULL)\r
+       {\r
+               printk("%s:fail malloc board_id data\n",__func__);\r
+               return -1;\r
+       }\r
+\r
+       result = board_id_init_data(board_id);\r
+       if (result < 0) {\r
+               printk("%s:copydata error\n",__func__);\r
+               return result;\r
+       }\r
+\r
+       result = board_id_resolve(board_id);\r
+       if (result < 0) {\r
+               printk("%s:resolve boardid error\n",__func__);\r
+               return result;\r
+       }\r
+\r
+       \r
+       if(pdata->device_table && pdata->device_table_size)\r
+       board_id_add_devices(board_id, pdata->device_table, pdata->device_table_size);\r
+       \r
+       board_id->pdata = pdata;\r
+       board_id->dev = &pdev->dev;\r
+       \r
+       \r
+       platform_set_drvdata(pdev, board_id);   \r
+       \r
+       mutex_init(&board_id->operation_mutex); \r
+       \r
+       g_board_id = board_id;\r
+       \r
+       printk("%s:init success\n",__func__);\r
+       return result;\r
+\r
+}\r
+\r
+int board_id_suspend(struct platform_device *pdev, pm_message_t state)\r
+{\r
+       struct board_id_private_data *board_id = platform_get_drvdata(pdev);\r
+       \r
+       \r
+       return 0;\r
+}\r
+\r
+int board_id_resume(struct platform_device *pdev)\r
+{\r
+       struct board_id_private_data *board_id = platform_get_drvdata(pdev);\r
+       \r
+\r
+       return 0;\r
+}\r
+\r
+void board_id_shutdown(struct platform_device *pdev)\r
+{\r
+       struct board_id_private_data *board_id = platform_get_drvdata(pdev);\r
+\r
+       \r
+}\r
+\r
+static struct platform_driver board_id_driver = {\r
+       //.shutdown     = board_id_shutdown,\r
+       .suspend        = board_id_suspend,\r
+       .resume         = board_id_resume,\r
+       .driver = {\r
+               .name   = "board_id",\r
+               .owner  = THIS_MODULE,\r
+       },\r
+};\r
+\r
+static int __init board_id_init(void)\r
+{\r
+       return platform_driver_probe(&board_id_driver, board_id_probe);\r
+}\r
+\r
+static void __exit board_id_exit(void)\r
+{\r
+       platform_driver_unregister(&board_id_driver);\r
+}\r
+\r
+//arch_initcall_sync(board_id_init);\r
+arch_initcall(board_id_init);\r
+module_exit(board_id_exit);\r
+\r
+MODULE_AUTHOR("ROCKCHIP Corporation:lw@rock-chips.com");\r
+MODULE_DESCRIPTION("rockchip board id driver");\r
+MODULE_LICENSE("GPL");\r
+\r
index ad7070ddd86b5a7c7b316cc551d13a8811183e0d..c71fa045535846b536896be5b53869342973914d 100755 (executable)
@@ -232,8 +232,11 @@ struct sensor_platform_data {
 struct board_id_platform_data {
        int gpio_pin[32];
        int num_gpio;
-       int (*init_platform_hw)(void);  
+       char *board_id_buf;
+       int (*init_platform_hw)(void);
        int (*exit_platform_hw)(void);
+       struct board_device_table *device_table;
+       int device_table_size;
        int (*init_parameter)(int id);  
 };
 
diff --git a/include/linux/board-id-hw.h b/include/linux/board-id-hw.h
new file mode 100755 (executable)
index 0000000..f890908
--- /dev/null
@@ -0,0 +1,18 @@
+\r
+enum board_id_hw{\r
+       BOARD_ID_INVALID = -1,\r
+               \r
+       BOARD_ID_DS763 = 0,\r
+       BOARD_ID_C8002,\r
+       BOARD_ID_C8003,\r
+       BOARD_ID_C1014,\r
+       BOARD_ID_C7018,\r
+       BOARD_ID_TA7CP01,\r
+       BOARD_ID_TA9CP01,\r
+       BOARD_ID_TA0CP01,\r
+\r
+       BOARD_ID_AIO_BAT,\r
+       BOARD_ID_AIO_NOBAT,\r
+       \r
+       BOARD_ID_NUM,\r
+};\r
diff --git a/include/linux/board-id-operator.h b/include/linux/board-id-operator.h
new file mode 100755 (executable)
index 0000000..e4d2f5e
--- /dev/null
@@ -0,0 +1,1018 @@
+#ifndef __BOARD_ID_OPERATOR_H
+#define __BOARD_ID_OPERATOR_H
+
+#define RESERVE_ID_NUMS 1
+
+enum id_operator{      
+       OPERATOR_ID_20000_NO_OPERATOR,
+       OPERATOR_ID_20201_COSMOTE_GR,
+       OPERATOR_ID_20205_VODAFONE_GR,
+       OPERATOR_ID_20210_TELESTET_GR,
+       OPERATOR_ID_20404_VODAFONE_NL_NL,
+       OPERATOR_ID_20408_KPN_NL,
+       OPERATOR_ID_20412_O2_NL_NL,
+       OPERATOR_ID_20416_BEN_NL,
+       OPERATOR_ID_20420_DUTCHTONE_NL,
+       OPERATOR_ID_20601_PROXIMUS_BE,
+       OPERATOR_ID_20610_MOBISTAR_BE,
+       OPERATOR_ID_20620_ORANGE_BE,
+       OPERATOR_ID_20801_ORANGE_FR,
+       OPERATOR_ID_20810_SFR_FR,
+       OPERATOR_ID_20820_BOUYGTEL_FR,
+       OPERATOR_ID_21303_MOBILAND_AD,
+       OPERATOR_ID_21401_VODAFONE_E_ES,
+       OPERATOR_ID_21402_MOVISTAR_ES,
+       OPERATOR_ID_21403_AMENA_ES,
+       OPERATOR_ID_21404_XFERA_ES,
+       OPERATOR_ID_21407_MOVISTAR_ES,
+       OPERATOR_ID_21601_PANNON_GSM_HU,
+       OPERATOR_ID_21630_WESTEL_HU,
+       OPERATOR_ID_21670_VODAFONE_HU,
+       OPERATOR_ID_21803_ERONET_BA,
+       OPERATOR_ID_21805_MOBILNA_SRPSKA_BA,
+       OPERATOR_ID_21890_GSM_BIH_BA,
+       OPERATOR_ID_21901_CRONET_HR,
+       OPERATOR_ID_21910_VIP_HR,
+       OPERATOR_ID_22001_MOBTEL_YU,
+       OPERATOR_ID_22002_PROMONTE_YU,
+       OPERATOR_ID_22003_TELEKOM_SRBIJA_YU,
+       OPERATOR_ID_22004_MONET_YU,
+       OPERATOR_ID_22201_TIM_IT,
+       OPERATOR_ID_22210_VODAFONE_IT_IT,
+       OPERATOR_ID_22288_WIND_IT,
+       OPERATOR_ID_22298_BLU_SPA_IT,
+       OPERATOR_ID_22601_CONNEX_RO,
+       OPERATOR_ID_22603_COSMOROM_RO,
+       OPERATOR_ID_22610_DIALOG_RO,
+       OPERATOR_ID_22801_SWISS_GSM_CH,
+       OPERATOR_ID_22802_SUNRISE_CH,
+       OPERATOR_ID_22803_ORANGE_CH,
+       OPERATOR_ID_23001_PAEGAS_CZ,
+       OPERATOR_ID_23002_EUROTEL_CZ,
+       OPERATOR_ID_23003_OSKAR_CZ,
+       OPERATOR_ID_23101_GLOBTEL_SK,
+       OPERATOR_ID_23102_EUROTEL_SK,
+       OPERATOR_ID_23201_A1_AT,
+       OPERATOR_ID_23203_T_MOBILE_AT,
+       OPERATOR_ID_23205_ONE_AT,
+       OPERATOR_ID_23207_TELE_RING_AT,
+       OPERATOR_ID_23410_O2_UK_GB,
+       OPERATOR_ID_23415_VODAFONE_GB,
+       OPERATOR_ID_23430_T_MOBILE_UK_GB,
+       OPERATOR_ID_23431_T_MOBILE_UK_GB,
+       OPERATOR_ID_23432_T_MOBILE_UK_GB,
+       OPERATOR_ID_23433_ORANGE_GB,
+       OPERATOR_ID_23450_JT_GSM_GB,
+       OPERATOR_ID_23455_GUERNSEY_TEL_GB,
+       OPERATOR_ID_23458_MANX_GB,
+       OPERATOR_ID_23801_TDK_MOBIL_DK,
+       OPERATOR_ID_23802_SONOFON_DK,
+       OPERATOR_ID_23820_TELIA_DK,
+       OPERATOR_ID_23830_ORANGE_DK,
+       OPERATOR_ID_24001_TELIA_S_SE,
+       OPERATOR_ID_24007_IQ_SE,
+       OPERATOR_ID_24008_VODAFONE_SE,
+       OPERATOR_ID_24201_TELENOR_NO,
+       OPERATOR_ID_24202_NETCOM_NO,
+       OPERATOR_ID_24403_TELIA_FI,
+       OPERATOR_ID_24405_RADIOLINJA_FI,
+       OPERATOR_ID_24409_FINNET_FI,
+       OPERATOR_ID_24412_2G_FI,
+       OPERATOR_ID_24414_AMT_FI,
+       OPERATOR_ID_24491_SONERA_FI,
+       OPERATOR_ID_24601_OMNITEL_LT,
+       OPERATOR_ID_24602_BITE_GSM_LT,
+       OPERATOR_ID_24603_TELE2_LT,
+       OPERATOR_ID_24701_LMT_GSM_LV,
+       OPERATOR_ID_24702_BALTCOM_LV,
+       OPERATOR_ID_24801_EMT_GSM_EE,
+       OPERATOR_ID_24802_RLE_EE,
+       OPERATOR_ID_24803_Q_GSM_EE,
+       OPERATOR_ID_25001_MTS_RU,
+       OPERATOR_ID_25002_NORTHWEST_GSM_RU,
+       OPERATOR_ID_25003_NCC_RU,
+       OPERATOR_ID_25005_SCS_RU,
+       OPERATOR_ID_25007_SMARTS_RU,
+       OPERATOR_ID_25010_DTC_RU,
+       OPERATOR_ID_25011_ORENSOT_RU,
+       OPERATOR_ID_25012_FAR_EAST_RU,
+       OPERATOR_ID_25013_KUBAN_GSM_RU,
+       OPERATOR_ID_25016_NTC_RU,
+       OPERATOR_ID_25017_ERMAK_RMS_RU,
+       OPERATOR_ID_25028_EXTEL_RU,
+       OPERATOR_ID_25039_URALTEL_RU,
+       OPERATOR_ID_25044_NC_GSM_RU,
+       OPERATOR_ID_25091_SONIC_DUO_RU,
+       OPERATOR_ID_25092_PRIMTEL_RU,
+       OPERATOR_ID_25093_JSC_TELECOM_XXI_RU,
+       OPERATOR_ID_25099_BEE_LINE_RU,
+       OPERATOR_ID_25501_UMC_UA,
+       OPERATOR_ID_25502_WELLCOM_UA,
+       OPERATOR_ID_25503_KYIVSTAR_UA,
+       OPERATOR_ID_25505_GOLDEN_TELECOM_UA,
+       OPERATOR_ID_25701_VELCOM_BY,
+       OPERATOR_ID_25901_VOXTEL_MD,
+       OPERATOR_ID_25902_MOLDCELL_MD,
+       OPERATOR_ID_26001_PLUS_GSM_PL,
+       OPERATOR_ID_26002_ERA_GSM_PL,
+       OPERATOR_ID_26003_IDEA_PL,
+       OPERATOR_ID_26201_T_MOBILE_DE,
+       OPERATOR_ID_26202_VODAFONE_D2_DE,
+       OPERATOR_ID_26203_E_PLUS_DE,
+       OPERATOR_ID_26207_O2_DE_DE,
+       OPERATOR_ID_26213_MOBILCOM_DE,
+       OPERATOR_ID_26601_GIBTEL_GI,
+       OPERATOR_ID_26801_VODAFONE_PT,
+       OPERATOR_ID_26803_OPTIMUS_PT,
+       OPERATOR_ID_26806_TMN_PT,
+       OPERATOR_ID_27001_LUXGSM_LU,
+       OPERATOR_ID_27077_TANGO_LU,
+       OPERATOR_ID_27201_VODAFONE_IRL_IE,
+       OPERATOR_ID_27202_O2_IRL_IE,
+       OPERATOR_ID_27203_METEOR_IE,
+       OPERATOR_ID_27401_SIMINN_IS,
+       OPERATOR_ID_27402_TAL_IS,
+       OPERATOR_ID_27404_VIKING_IS,
+       OPERATOR_ID_27601_AMC_AL,
+       OPERATOR_ID_27602_VODAFONE_AL,
+       OPERATOR_ID_27801_VODAFONE_MALTA_MT,
+       OPERATOR_ID_27821_GO_MOBILE_MT,
+       OPERATOR_ID_28001_CYTAGSM_CY,
+       OPERATOR_ID_28201_GEOCELL_GE,
+       OPERATOR_ID_28202_MAGTI_GSM_GE,
+       OPERATOR_ID_28203_GEO_03_GE,
+       OPERATOR_ID_28301_ARMGSM_AM,
+       OPERATOR_ID_28401_M_TEL_GSM_BG,
+       OPERATOR_ID_28601_TURKCELL_TR,
+       OPERATOR_ID_28602_TELSIM_TR,
+       OPERATOR_ID_28603_ARIA_TR,
+       OPERATOR_ID_28604_AYCELL_TR,
+       OPERATOR_ID_28801_FT_GSM_FO,
+       OPERATOR_ID_29001_TELE_GREENLAND_GR,
+       OPERATOR_ID_29340_SI_MOBIL_SI,
+       OPERATOR_ID_29341_MOBITEL_SI,
+       OPERATOR_ID_29401_MOBIMAK_MK,
+       OPERATOR_ID_29501_TELECOM_LI,
+       OPERATOR_ID_29502_MONTEL_LI,
+       OPERATOR_ID_29505_FL1_LI,
+       OPERATOR_ID_29577_LI_TANGO_LI,
+       OPERATOR_ID_30237_MICROCELL_CA,
+       OPERATOR_ID_30272_ROGERS_AT_T_CA,
+       OPERATOR_ID_31001_CELLNET_US,
+       OPERATOR_ID_31011_WIRELESS_2000_US,
+       OPERATOR_ID_31015_CINGULAR_US,
+       OPERATOR_ID_31016_T_MOBILE_US,
+       OPERATOR_ID_31017_CINGULAR_US,
+       OPERATOR_ID_31018_CINGULAR_US,
+       OPERATOR_ID_31020_T_MOBILE_US,
+       OPERATOR_ID_31021_T_MOBILE_US,
+       OPERATOR_ID_31022_T_MOBILE_US,
+       OPERATOR_ID_31023_T_MOBILE_US,
+       OPERATOR_ID_31024_T_MOBILE_US,
+       OPERATOR_ID_31025_T_MOBILE_US,
+       OPERATOR_ID_31026_T_MOBILE_US,
+       OPERATOR_ID_31027_T_MOBILE_US,
+       OPERATOR_ID_31031_T_MOBILE_US,
+       OPERATOR_ID_31034_WESTLINK_US,
+       OPERATOR_ID_31035_CAROLINA_US,
+       OPERATOR_ID_31038_AT_T_WIRELESS_US,
+       OPERATOR_ID_31041_CINGULAR_US,
+       OPERATOR_ID_31046_TMP_CORP_US,
+       OPERATOR_ID_31058_T_MOBILE_US,
+       OPERATOR_ID_31061_EPIC_TOUCH_US,
+       OPERATOR_ID_31063_AMERILINK_US,
+       OPERATOR_ID_31064_EINSTEIN_PCS_US,
+       OPERATOR_ID_31066_T_MOBILE_US,
+       OPERATOR_ID_31067_WIRELESS_2000_US,
+       OPERATOR_ID_31068_NPI_WIRELESS_US,
+       OPERATOR_ID_31069_CONESTOGA_US,
+       OPERATOR_ID_31074_TELEMETRIX_US,
+       OPERATOR_ID_31076_PTSI_US,
+       OPERATOR_ID_31077_IOWA_WIRELESS_US,
+       OPERATOR_ID_31078_AIRLINK_PCS_US,
+       OPERATOR_ID_31079_PINPOINT_US,
+       OPERATOR_ID_31080_T_MOBILE_US,
+       OPERATOR_ID_31098_AWS_US,
+       OPERATOR_ID_31114_SPROCKET_UNKNOW,
+       OPERATOR_ID_31601_NEXTEL_UNKNOW,
+       OPERATOR_ID_33805_DIGICEL_JM,
+       OPERATOR_ID_34001_ORANGE_FW,
+       OPERATOR_ID_34020_BOUYGUES_FW,
+       OPERATOR_ID_34430_APUA_PCS_AG,
+       OPERATOR_ID_35001_TELECOM_BM,
+       OPERATOR_ID_36251_TELCELL_GSM_AN,
+       OPERATOR_ID_36801_C_COM_CU,
+       OPERATOR_ID_37001_ORANGE_DO,
+       OPERATOR_ID_40001_AZERCELL_GSM_AZ,
+       OPERATOR_ID_40002_BAKCELL_GSM_2000_AZ,
+       OPERATOR_ID_40101_K_MOBILE_KZ,
+       OPERATOR_ID_40102_K_CELL_KZ,
+       OPERATOR_ID_40401_HUTCH_IN,
+       OPERATOR_ID_40402_AIRTEL_IN,
+       OPERATOR_ID_40403_AIRTEL_IN,
+       OPERATOR_ID_40404_IDEA_IN,
+       OPERATOR_ID_40405_HUTCH_IN,
+       OPERATOR_ID_40407_IDEA_IN,
+       OPERATOR_ID_40409_RELIANCE_IN,
+       OPERATOR_ID_40410_AIRTEL_IN,
+       OPERATOR_ID_40411_HUTCH_IN,
+       OPERATOR_ID_40412_IDEA_IN,
+       OPERATOR_ID_40413_HUTCH_IN,
+       OPERATOR_ID_40414_SPICE_IN,
+       OPERATOR_ID_40415_HUTCH_IN,
+       OPERATOR_ID_40416_AIRTEL_IN,
+       OPERATOR_ID_40418_RELIANCE_IN,
+       OPERATOR_ID_40419_IDEA_IN,
+       OPERATOR_ID_40420_HUTCH_IN,
+       OPERATOR_ID_40421_BPL_MOBILE_IN,
+       OPERATOR_ID_40422_IDEA_IN,
+       OPERATOR_ID_40424_IDEA_IN,
+       OPERATOR_ID_40427_HUTCH_IN,
+       OPERATOR_ID_40429_AIRCEL_IN,
+       OPERATOR_ID_40430_HUTCH_IN,
+       OPERATOR_ID_40431_AIRTEL_IN,
+       OPERATOR_ID_40434_CELLONE_IN,
+       OPERATOR_ID_40436_RELIANCE_IN,
+       OPERATOR_ID_40437_AIRCEL_IN,
+       OPERATOR_ID_40438_CELLONE_IN,
+       OPERATOR_ID_40440_AIRTEL_IN,
+       OPERATOR_ID_40441_RPG_IN,
+       OPERATOR_ID_40443_HUTCH_IN,
+       OPERATOR_ID_40444_SPICE_IN,
+       OPERATOR_ID_40445_AIRTEL_IN,
+       OPERATOR_ID_40446_HUTCH_IN,
+       OPERATOR_ID_40449_AIRTEL_IN,
+       OPERATOR_ID_40450_RELIANCE_IN,
+       OPERATOR_ID_40451_CELLONE_IN,
+       OPERATOR_ID_40452_RELIANCE_IN,
+       OPERATOR_ID_40453_CELLONE_IN,
+       OPERATOR_ID_40454_CELLONE_IN,
+       OPERATOR_ID_40455_CELLONE_IN,
+       OPERATOR_ID_40456_IDEA_IN,
+       OPERATOR_ID_40457_CELLONE_IN,
+       OPERATOR_ID_40458_CELLONE_IN,
+       OPERATOR_ID_40459_CELLONE_IN,
+       OPERATOR_ID_40460_HUTCH_IN,
+       OPERATOR_ID_40462_CELLONE_IN,
+       OPERATOR_ID_40464_CELLONE_IN,
+       OPERATOR_ID_40466_CELLONE_IN,
+       OPERATOR_ID_40467_RELIANCE_IN,
+       OPERATOR_ID_40468_DOLPHIN_IN,
+       OPERATOR_ID_40469_MTNL_IN,
+       OPERATOR_ID_40470_AIRTEL_IN,
+       OPERATOR_ID_40471_CELLONE_IN,
+       OPERATOR_ID_40472_CELLONE_IN,
+       OPERATOR_ID_40473_CELLONE_IN,
+       OPERATOR_ID_40474_CELLONE_IN,
+       OPERATOR_ID_40475_CELLONE_IN,
+       OPERATOR_ID_40476_CELLONE_IN,
+       OPERATOR_ID_40477_CELLONE_IN,
+       OPERATOR_ID_40478_IDEA_IN,
+       OPERATOR_ID_40479_CELLONE_IN,
+       OPERATOR_ID_40480_CELLONE_IN,
+       OPERATOR_ID_40481_CELLONE_IN,
+       OPERATOR_ID_40482_IDEA_IN,
+       OPERATOR_ID_40483_RELIANCE_IN,
+       OPERATOR_ID_40484_HUTCH_IN,
+       OPERATOR_ID_40485_RELIANCE_IN,
+       OPERATOR_ID_40486_HUTCH_IN,
+       OPERATOR_ID_40487_IDEA_IN,
+       OPERATOR_ID_40488_HUTCH_IN,
+       OPERATOR_ID_40489_IDEA_IN,
+       OPERATOR_ID_40490_AIRTEL_IN,
+       OPERATOR_ID_40492_AIRTEL_IN,
+       OPERATOR_ID_40493_AIRTEL_IN,
+       OPERATOR_ID_40494_AIRTEL_IN,
+       OPERATOR_ID_40495_AIRTEL_IN,
+       OPERATOR_ID_40496_AIRTEL_IN,
+       OPERATOR_ID_40497_AIRTEL_IN,
+       OPERATOR_ID_40498_AIRTEL_IN,
+       OPERATOR_ID_40551_AIRTEL_IN,
+       OPERATOR_ID_40552_AIRTEL_IN,
+       OPERATOR_ID_40553_AIRTEL_IN,
+       OPERATOR_ID_40554_AIRTEL_IN,
+       OPERATOR_ID_40555_AIRTEL_IN,
+       OPERATOR_ID_40556_AIRTEL_IN,
+       OPERATOR_ID_40566_HUTCH_IN,
+       OPERATOR_ID_40567_HUTCH_IN_,
+       OPERATOR_ID_41001_MOBILINK_PK,
+       OPERATOR_ID_41302_DIALOG_LK,
+       OPERATOR_ID_41303_CELLTEL_LK,
+       OPERATOR_ID_41401_MM_900_MM,
+       OPERATOR_ID_41501_CELLIS_LB,
+       OPERATOR_ID_41503_LIBANCELL_LB,
+       OPERATOR_ID_41601_FASTLINK_JO,
+       OPERATOR_ID_41677_MOBILECOM_JO,
+       OPERATOR_ID_41702_SPACETEL_SY,
+       OPERATOR_ID_41709_MOBILE_SYRIA_SY,
+       OPERATOR_ID_41902_MTCNET_KW,
+       OPERATOR_ID_41903_WATANIYA_KW,
+       OPERATOR_ID_42001_AL_JAWAL_SA,
+       OPERATOR_ID_42007_EAE_SA,
+       OPERATOR_ID_42102_SPACETEL_YE,
+       OPERATOR_ID_42202_OMAN_MOBILE_OM,
+       OPERATOR_ID_42402_ETISALAT_AE,
+       OPERATOR_ID_42501_ORANGE_IL,
+       OPERATOR_ID_42505_JAWWAL_IL,
+       OPERATOR_ID_42601_MOBILE_PLUS_BH,
+       OPERATOR_ID_42701_QATARNET_QA,
+       OPERATOR_ID_42899_MOBICOM_MN,
+       OPERATOR_ID_42901_NTC_NP,
+       OPERATOR_ID_43211_TCI_IR,
+       OPERATOR_ID_43214_KISH_IR,
+       OPERATOR_ID_43401_BUZTEL_UZ,
+       OPERATOR_ID_43402_UZMACOM_UZ,
+       OPERATOR_ID_43404_UZB_DAEWOO_GSM_UZ,
+       OPERATOR_ID_43405_COSCOM_UZ,
+       OPERATOR_ID_43701_BITEL_KG,
+       OPERATOR_ID_43801_BCTI_TM,
+       OPERATOR_ID_45201_MOBIFONE_VN,
+       OPERATOR_ID_45202_VINAFONE_VN,
+       OPERATOR_ID_45400_CSL_HK,
+       OPERATOR_ID_45401_NEW_WORLD_HK,
+       OPERATOR_ID_45402_CSL_HK,
+       OPERATOR_ID_45404_ORANGE_HK,
+       OPERATOR_ID_45406_SMC_HK,
+       OPERATOR_ID_45410_NEW_WORLD_HK,
+       OPERATOR_ID_45412_PEOPLES_HK,
+       OPERATOR_ID_45416_SUNDAY_HK,
+       OPERATOR_ID_45418_HK_TELECOM_HK,
+       OPERATOR_ID_45500_SMARTONE_UNKNOW,
+       OPERATOR_ID_45501_CTMGSM_UNKNOW,
+       OPERATOR_ID_45503_HT_MACAU_UNKNOW,
+       OPERATOR_ID_45601_MOBITEL_KH,
+       OPERATOR_ID_45602_SAMART_GSM_KH,
+       OPERATOR_ID_45701_LAO_GSM_LA,
+       OPERATOR_ID_46000_CHINA_MOBILE_CN,
+       OPERATOR_ID_46001_CHN_CUGSM_CN,
+       OPERATOR_ID_46002_CHINA_MOBILE_CN,
+       OPERATOR_ID_46601_FAR_EASTONE_TW,
+       OPERATOR_ID_46606_TUNTEX_TW,
+       OPERATOR_ID_46668_ACES_TW,
+       OPERATOR_ID_46688_KGT_TW,
+       OPERATOR_ID_46692_CHUNGHWA_TW,
+       OPERATOR_ID_46693_MOBITAI_TW,
+       OPERATOR_ID_46697_TWN_GSM_TW,
+       OPERATOR_ID_46699_TRANSASIA_TW,
+       OPERATOR_ID_47001_GRAMEEMPHONE_BD,
+       OPERATOR_ID_47002_AKTEL_BD,
+       OPERATOR_ID_47003_SHEBAWORLD_BD,
+       OPERATOR_ID_47019_MOBILE_2000_BD,
+       OPERATOR_ID_47201_DHIMOBILE_MV,
+       OPERATOR_ID_50212_MAXIS_MOBILE_MY,
+       OPERATOR_ID_50213_TM_TOUCH_MY,
+       OPERATOR_ID_50216_DIGI_MY,
+       OPERATOR_ID_50217_ADAM_MY,
+       OPERATOR_ID_50219_CELCOM_MY,
+       OPERATOR_ID_50501_MOBILENET_AU,
+       OPERATOR_ID_50502_OPTUS_AU,
+       OPERATOR_ID_50503_VODAFONE_AU,
+       OPERATOR_ID_50508_ONE_TEL_AU,
+       OPERATOR_ID_51000_ACES_ID,
+       OPERATOR_ID_51001_SATELINDOCEL_ID,
+       OPERATOR_ID_51008_LIPPO_TEL_ID,
+       OPERATOR_ID_51010_TELKOMSEL_ID,
+       OPERATOR_ID_51011_GSM_XL_ID,
+       OPERATOR_ID_51021_INDOSAT_ID,
+       OPERATOR_ID_51501_ISLACOM_PH,
+       OPERATOR_ID_51502_GLOBE_PH,
+       OPERATOR_ID_51503_SMART_PH,
+       OPERATOR_ID_51505_DIGITEL_PH,
+       OPERATOR_ID_51511_ACES_PH,
+       OPERATOR_ID_52001_AIS_GSM_TH,
+       OPERATOR_ID_52015_ACT_MOBILE_TH,
+       OPERATOR_ID_52018_WP_1800_TH,
+       OPERATOR_ID_52020_ACES_TH,
+       OPERATOR_ID_52023_HELLO_TH,
+       OPERATOR_ID_52099_ORANGE_TH,
+       OPERATOR_ID_52501_ST_GSM_SGP_SG,
+       OPERATOR_ID_52502_ST_GSM1800_SGP_SG,
+       OPERATOR_ID_52503_M1_GSM_SGP_SG,
+       OPERATOR_ID_52504_SGP_M1_3GSM_SG,
+       OPERATOR_ID_52505_STARHUB_SGP_SG,
+       OPERATOR_ID_52811_BRU_TSTCOM_BN,
+       OPERATOR_ID_53001_VODAFONE_NZ,
+       OPERATOR_ID_53901_TONGA_COMM_TO,
+       OPERATOR_ID_54100_ACES_VU,
+       OPERATOR_ID_54101_SMILE_VU,
+       OPERATOR_ID_54201_VODAFONE_FJ,
+       OPERATOR_ID_54411_BLUE_SKY_AS,
+       OPERATOR_ID_54601_MOBILIS_NC,
+       OPERATOR_ID_54720_VINI_PF,
+       OPERATOR_ID_55001_FSM_FM,
+       OPERATOR_ID_60201_MOBINIL_EG,
+       OPERATOR_ID_60202_CLICK_GSM_EG,
+       OPERATOR_ID_60301_AMN_DZ,
+       OPERATOR_ID_60400_MEDITEL_MA,
+       OPERATOR_ID_60401_IAM_MA,
+       OPERATOR_ID_60502_TUNICELL_TN,
+       OPERATOR_ID_60801_ALIZE_SN,
+       OPERATOR_ID_60802_SENTEL_SN,
+       OPERATOR_ID_61001_MALITEL_ML,
+       OPERATOR_ID_61101_MOBILIS_GN,
+       OPERATOR_ID_61102_LAGUI_GN,
+       OPERATOR_ID_61201_CORA_CI,
+       OPERATOR_ID_61203_IVOIRIS_CI,
+       OPERATOR_ID_61205_TELECEL_CI,
+       OPERATOR_ID_61302_CELTEL_BF,
+       OPERATOR_ID_61402_CELTEL_NE,
+       OPERATOR_ID_61501_TOGOCEL_TG,
+       OPERATOR_ID_61601_LIBERCOM_BJ,
+       OPERATOR_ID_61602_TELECEL_BENIN_BJ,
+       OPERATOR_ID_61603_BENINCELL_BJ,
+       OPERATOR_ID_61701_CELLPLUS_MU,
+       OPERATOR_ID_61710_EMTEL_MU,
+       OPERATOR_ID_61801_OMEGA_LR,
+       OPERATOR_ID_62001_SPACEFON_GH,
+       OPERATOR_ID_62002_ONETOUCH_GH,
+       OPERATOR_ID_62003_MOBITEL_GH,
+       OPERATOR_ID_62100_MTN_NG,
+       OPERATOR_ID_62120_ECONET_NG,
+       OPERATOR_ID_62130_MTN_NG,
+       OPERATOR_ID_62140_NITEL_GSM_NG,
+       OPERATOR_ID_62201_CELTEL_TD,
+       OPERATOR_ID_62202_LIBERTIS_TD,
+       OPERATOR_ID_62401_MTN_CAM_CM,
+       OPERATOR_ID_62402_MOBILIS_CM,
+       OPERATOR_ID_62501_CPV_MOVEL_CV,
+       OPERATOR_ID_62801_LIBERTIS_GA,
+       OPERATOR_ID_62802_GO_CELTEL_GA,
+       OPERATOR_ID_62803_CELTEL_GA,
+       OPERATOR_ID_62901_CELTEL_CG,
+       OPERATOR_ID_62910_LIBERTIS_CG,
+       OPERATOR_ID_63001_CELLNET_CD,
+       OPERATOR_ID_63002_CELTEL_CD,
+       OPERATOR_ID_63004_CELLCO_CD,
+       OPERATOR_ID_63089_OASIS_CD,
+       OPERATOR_ID_63301_SEYCEL_SC,
+       OPERATOR_ID_63310_AIRTEL_SC,
+       OPERATOR_ID_63401_MOBITEL_MZ,
+       OPERATOR_ID_63510_RWANDACELL_RW,
+       OPERATOR_ID_63601_ETMTN_ET,
+       OPERATOR_ID_63701_BARAKAAT_SO,
+       OPERATOR_ID_63902_SAFARICOM_KE,
+       OPERATOR_ID_63903_KENCELL_KE,
+       OPERATOR_ID_64001_TRITEL_TZ,
+       OPERATOR_ID_64002_MOBITEL_TZ,
+       OPERATOR_ID_64003_ZANTEL_TZ,
+       OPERATOR_ID_64004_VODACOM_TZ,
+       OPERATOR_ID_64005_CELTEL_TZ,
+       OPERATOR_ID_64101_CELTEL_UG,
+       OPERATOR_ID_64110_MTN_UGANDA_UG,
+       OPERATOR_ID_64111_UTL_TELECEL_UG,
+       OPERATOR_ID_64201_SPACETEL_BI,
+       OPERATOR_ID_64202_SAFARIS_BI,
+       OPERATOR_ID_64301_MCEL_UNKNOW,
+       OPERATOR_ID_64501_ZAMCELL_UNKNOW,
+       OPERATOR_ID_64502_TELECEL_UNKNOW,
+       OPERATOR_ID_64601_MADACOM_MG,
+       OPERATOR_ID_64602_ANTARIS_MG,
+       OPERATOR_ID_64700_ORANGE_REUNION_RE,
+       OPERATOR_ID_64710_SFR_REUNION_RE,
+       OPERATOR_ID_64801_NET_ONE_ZW,
+       OPERATOR_ID_64803_TELECEL_ZW,
+       OPERATOR_ID_64804_ECONET_ZW,
+       OPERATOR_ID_64901_MTC_NA,
+       OPERATOR_ID_65001_CALLPOINT_90_MW,
+       OPERATOR_ID_65010_CELTEL_MW,
+       OPERATOR_ID_65101_VODACOM_LS,
+       OPERATOR_ID_65201_MASCOM_BW,
+       OPERATOR_ID_65202_VISTA_BW,
+       OPERATOR_ID_65310_SWAZIMTN_SZ,
+       OPERATOR_ID_65501_VODACOM_ZA,
+       OPERATOR_ID_65507_CELL_C_PTY_LTD_ZA,
+       OPERATOR_ID_65510_MTN_ZA,
+       OPERATOR_ID_70601_PERSONAL_SV,
+       OPERATOR_ID_70602_DIGICEL_SV,
+       OPERATOR_ID_71610_TIM_PE,
+       OPERATOR_ID_72207_UNIFON_AR,
+       OPERATOR_ID_72234_TELECOM_PERSONAL_AR,
+       OPERATOR_ID_72235_PORT_HABLE_AR,
+       OPERATOR_ID_72402_TIM_BRASIL_BR,
+       OPERATOR_ID_72403_TIM_BRASIL_BR,
+       OPERATOR_ID_72404_TIM_BRASIL_BR,
+       OPERATOR_ID_72405_CLARO_BR,
+       OPERATOR_ID_72416_BRTCEL_BR,
+       OPERATOR_ID_73001_ENTEL_PCS_CL,
+       OPERATOR_ID_73010_ENTEL_PCS_CL,
+       OPERATOR_ID_73401_INFONET_VE,
+       OPERATOR_ID_73402_DIGITEL_VE,
+       OPERATOR_ID_73601_NUEVATEL_BO,
+       OPERATOR_ID_73602_ENTEL_BO,
+       OPERATOR_ID_74401_VOX_PY,
+       OPERATOR_ID_74402_PY_02_PY,
+       OPERATOR_ID_74601_ICMS_SR,      
+       OPERATOR_ID_74605_THURAYA_UNKNOW,
+       OPERATOR_ID_NUMS,
+       
+};
+
+
+static struct operator_id_name area_operator_id_name[OPERATOR_ID_NUMS] = {     
+       {DEVICE_TYPE_OPERATOR, 20000, "no", "no"},
+       {DEVICE_TYPE_OPERATOR, 20201, "Cosmote", "GR"},
+       {DEVICE_TYPE_OPERATOR, 20205, "Vodafone GR", "GR"},
+       {DEVICE_TYPE_OPERATOR, 20210, "TELESTET", "GR"},
+       {DEVICE_TYPE_OPERATOR, 20404, "Vodafone NL", "NL"},
+       {DEVICE_TYPE_OPERATOR, 20408, "KPN", "NL"},
+       {DEVICE_TYPE_OPERATOR, 20412, "O2 - NL", "NL"},
+       {DEVICE_TYPE_OPERATOR, 20416, "Ben", "NL"},
+       {DEVICE_TYPE_OPERATOR, 20420, "dutchtone", "NL"},
+       {DEVICE_TYPE_OPERATOR, 20601, "Proximus", "BE"},
+       {DEVICE_TYPE_OPERATOR, 20610, "Mobistar", "BE"},
+       {DEVICE_TYPE_OPERATOR, 20620, "Orange", "BE"},
+       {DEVICE_TYPE_OPERATOR, 20801, "Orange", "FR"},
+       {DEVICE_TYPE_OPERATOR, 20810, "SFR", "FR"},
+       {DEVICE_TYPE_OPERATOR, 20820, "BOUYGTEL", "FR"},
+       {DEVICE_TYPE_OPERATOR, 21303, "Mobiland", "AD"},
+       {DEVICE_TYPE_OPERATOR, 21401, "Vodafone E", "ES"},
+       {DEVICE_TYPE_OPERATOR, 21402, "MoviStar", "ES"},
+       {DEVICE_TYPE_OPERATOR, 21403, "AMENA", "ES"},
+       {DEVICE_TYPE_OPERATOR, 21404, "Xfera", "ES"},
+       {DEVICE_TYPE_OPERATOR, 21407, "MoviStar", "ES"},
+       {DEVICE_TYPE_OPERATOR, 21601, "Pannon GSM", "HU"},
+       {DEVICE_TYPE_OPERATOR, 21630, "Westel", "HU"},
+       {DEVICE_TYPE_OPERATOR, 21670, "Vodafone", "HU"},
+       {DEVICE_TYPE_OPERATOR, 21803, "ERONET", "BA"},
+       {DEVICE_TYPE_OPERATOR, 21805, "Mobilna Srpska", "BA"},
+       {DEVICE_TYPE_OPERATOR, 21890, "GSM BiH", "BA"},
+       {DEVICE_TYPE_OPERATOR, 21901, "CRONET", "HR"},
+       {DEVICE_TYPE_OPERATOR, 21910, "VIP", "HR"},
+       {DEVICE_TYPE_OPERATOR, 22001, "MOBTEL", "YU"},
+       {DEVICE_TYPE_OPERATOR, 22002, "ProMonte", "YU"},
+       {DEVICE_TYPE_OPERATOR, 22003, "Telekom Srbija", "YU"},
+       {DEVICE_TYPE_OPERATOR, 22004, "MONET", "YU"},
+       {DEVICE_TYPE_OPERATOR, 22201, "TIM", "IT"},
+       {DEVICE_TYPE_OPERATOR, 22210, "Vodafone IT", "IT"},
+       {DEVICE_TYPE_OPERATOR, 22288, "WIND", "IT"},
+       {DEVICE_TYPE_OPERATOR, 22298, "Blu SpA", "IT"},
+       {DEVICE_TYPE_OPERATOR, 22601, "CONNEX", "RO"},
+       {DEVICE_TYPE_OPERATOR, 22603, "Cosmorom", "RO"},
+       {DEVICE_TYPE_OPERATOR, 22610, "dialog", "RO"},
+       {DEVICE_TYPE_OPERATOR, 22801, "Swiss GSM", "CH"},
+       {DEVICE_TYPE_OPERATOR, 22802, "sunrise", "CH"},
+       {DEVICE_TYPE_OPERATOR, 22803, "Orange", "CH"},
+       {DEVICE_TYPE_OPERATOR, 23001, "PAEGAS", "CZ"},
+       {DEVICE_TYPE_OPERATOR, 23002, "EUROTEL", "CZ"},
+       {DEVICE_TYPE_OPERATOR, 23003, "OSKAR", "CZ"},
+       {DEVICE_TYPE_OPERATOR, 23101, "GLOBTEL", "SK"},
+       {DEVICE_TYPE_OPERATOR, 23102, "EUROTEL", "SK"},
+       {DEVICE_TYPE_OPERATOR, 23201, "A1", "AT"},
+       {DEVICE_TYPE_OPERATOR, 23203, "T-Mobile", "AT"},
+       {DEVICE_TYPE_OPERATOR, 23205, "ONE", "AT"},
+       {DEVICE_TYPE_OPERATOR, 23207, "tele.ring", "AT"},
+       {DEVICE_TYPE_OPERATOR, 23410, "O2 - UK", "GB"},
+       {DEVICE_TYPE_OPERATOR, 23415, "Vodafone", "GB"},
+       {DEVICE_TYPE_OPERATOR, 23430, "T-Mobile UK", "GB"},
+       {DEVICE_TYPE_OPERATOR, 23431, "T-Mobile UK", "GB"},
+       {DEVICE_TYPE_OPERATOR, 23432, "T-Mobile UK", "GB"},
+       {DEVICE_TYPE_OPERATOR, 23433, "Orange", "GB"},
+       {DEVICE_TYPE_OPERATOR, 23450, "JT GSM", "GB"},
+       {DEVICE_TYPE_OPERATOR, 23455, "GUERNSEY TEL", "GB"},
+       {DEVICE_TYPE_OPERATOR, 23458, "MANX", "GB"},
+       {DEVICE_TYPE_OPERATOR, 23801, "TDK-MOBIL", "DK"},
+       {DEVICE_TYPE_OPERATOR, 23802, "SONOFON", "DK"},
+       {DEVICE_TYPE_OPERATOR, 23820, "Telia", "DK"},
+       {DEVICE_TYPE_OPERATOR, 23830, "Orange", "DK"},
+       {DEVICE_TYPE_OPERATOR, 24001, "Telia S", "SE"},
+       {DEVICE_TYPE_OPERATOR, 24007, "IQ", "SE"},
+       {DEVICE_TYPE_OPERATOR, 24008, "Vodafone", "SE"},
+       {DEVICE_TYPE_OPERATOR, 24201, "TELENOR", "NO"},
+       {DEVICE_TYPE_OPERATOR, 24202, "NetCom", "NO"},
+       {DEVICE_TYPE_OPERATOR, 24403, "Telia", "FI"},
+       {DEVICE_TYPE_OPERATOR, 24405, "RADIOLINJA", "FI"},
+       {DEVICE_TYPE_OPERATOR, 24409, "FINNET", "FI"},
+       {DEVICE_TYPE_OPERATOR, 24412, "2G", "FI"},
+       {DEVICE_TYPE_OPERATOR, 24414, "AMT", "FI"},
+       {DEVICE_TYPE_OPERATOR, 24491, "SONERA", "FI"},
+       {DEVICE_TYPE_OPERATOR, 24601, "OMNITEL", "LT"},
+       {DEVICE_TYPE_OPERATOR, 24602, "Bite GSM", "LT"},
+       {DEVICE_TYPE_OPERATOR, 24603, "TELE2", "LT"},
+       {DEVICE_TYPE_OPERATOR, 24701, "LMT GSM", "LV"},
+       {DEVICE_TYPE_OPERATOR, 24702, "BALTCOM", "LV"},
+       {DEVICE_TYPE_OPERATOR, 24801, "EMT GSM", "EE"},
+       {DEVICE_TYPE_OPERATOR, 24802, "RLE", "EE"},
+       {DEVICE_TYPE_OPERATOR, 24803, "Q GSM", "EE"},
+       {DEVICE_TYPE_OPERATOR, 25001, "MTS", "RU"},
+       {DEVICE_TYPE_OPERATOR, 25002, "NorthWest GSM", "RU"},
+       {DEVICE_TYPE_OPERATOR, 25003, "NCC", "RU"},
+       {DEVICE_TYPE_OPERATOR, 25005, "SCS", "RU"},
+       {DEVICE_TYPE_OPERATOR, 25007, "SMARTS", "RU"},
+       {DEVICE_TYPE_OPERATOR, 25010, "DTC", "RU"},
+       {DEVICE_TYPE_OPERATOR, 25011, "Orensot", "RU"},
+       {DEVICE_TYPE_OPERATOR, 25012, "Far East", "RU"},
+       {DEVICE_TYPE_OPERATOR, 25013, "Kuban GSM", "RU"},
+       {DEVICE_TYPE_OPERATOR, 25016, "NTC", "RU"},
+       {DEVICE_TYPE_OPERATOR, 25017, "Ermak RMS", "RU"},
+       {DEVICE_TYPE_OPERATOR, 25028, "EXTEL", "RU"},
+       {DEVICE_TYPE_OPERATOR, 25039, "Uraltel", "RU"},
+       {DEVICE_TYPE_OPERATOR, 25044, "NC-GSM", "RU"},
+       {DEVICE_TYPE_OPERATOR, 25091, "Sonic Duo", "RU"},
+       {DEVICE_TYPE_OPERATOR, 25092, "Primtel", "RU"},
+       {DEVICE_TYPE_OPERATOR, 25093, "JSC Telecom XXI", "RU"},
+       {DEVICE_TYPE_OPERATOR, 25099, "Bee Line", "RU"},
+       {DEVICE_TYPE_OPERATOR, 25501, "UMC", "UA"},
+       {DEVICE_TYPE_OPERATOR, 25502, "WellCOM", "UA"},
+       {DEVICE_TYPE_OPERATOR, 25503, "Kyivstar", "UA"},
+       {DEVICE_TYPE_OPERATOR, 25505, "Golden Telecom", "UA"},
+       {DEVICE_TYPE_OPERATOR, 25701, "VELCOM", "BY"},
+       {DEVICE_TYPE_OPERATOR, 25901, "VOXTEL", "MD"},
+       {DEVICE_TYPE_OPERATOR, 25902, "MOLDCELL", "MD"},
+       {DEVICE_TYPE_OPERATOR, 26001, "Plus GSM", "PL"},
+       {DEVICE_TYPE_OPERATOR, 26002, "Era GSM", "PL"},
+       {DEVICE_TYPE_OPERATOR, 26003, "IDEA", "PL"},
+       {DEVICE_TYPE_OPERATOR, 26201, "T-Mobile", "DE"},
+       {DEVICE_TYPE_OPERATOR, 26202, "Vodafone D2", "DE"},
+       {DEVICE_TYPE_OPERATOR, 26203, "E-Plus", "DE"},
+       {DEVICE_TYPE_OPERATOR, 26207, "O2 - DE", "DE"},
+       {DEVICE_TYPE_OPERATOR, 26213, "Mobilcom", "DE"},
+       {DEVICE_TYPE_OPERATOR, 26601, "GIBTEL", "GI"},
+       {DEVICE_TYPE_OPERATOR, 26801, "Vodafone", "PT"},
+       {DEVICE_TYPE_OPERATOR, 26803, "OPTIMUS", "PT"},
+       {DEVICE_TYPE_OPERATOR, 26806, "TMN", "PT"},
+       {DEVICE_TYPE_OPERATOR, 27001, "LUXGSM", "LU"},
+       {DEVICE_TYPE_OPERATOR, 27077, "TANGO", "LU"},
+       {DEVICE_TYPE_OPERATOR, 27201, "Vodafone IRL", "IE"},
+       {DEVICE_TYPE_OPERATOR, 27202, "O2 - IRL", "IE"},
+       {DEVICE_TYPE_OPERATOR, 27203, "METEOR", "IE"},
+       {DEVICE_TYPE_OPERATOR, 27401, "SIMINN", "IS"},
+       {DEVICE_TYPE_OPERATOR, 27402, "TAL", "IS"},
+       {DEVICE_TYPE_OPERATOR, 27404, "Viking", "IS"},
+       {DEVICE_TYPE_OPERATOR, 27601, "AMC", "AL"},
+       {DEVICE_TYPE_OPERATOR, 27602, "Vodafone", "AL"},
+       {DEVICE_TYPE_OPERATOR, 27801, "Vodafone Malta", "MT"},
+       {DEVICE_TYPE_OPERATOR, 27821, "go mobile", "MT"},
+       {DEVICE_TYPE_OPERATOR, 28001, "CYTAGSM", "CY"},
+       {DEVICE_TYPE_OPERATOR, 28201, "GEOCELL", "GE"},
+       {DEVICE_TYPE_OPERATOR, 28202, "Magti GSM", "GE"},
+       {DEVICE_TYPE_OPERATOR, 28203, "GEO 03", "GE"},
+       {DEVICE_TYPE_OPERATOR, 28301, "ARMGSM", "AM"},
+       {DEVICE_TYPE_OPERATOR, 28401, "M-TEL GSM", "BG"},
+       {DEVICE_TYPE_OPERATOR, 28601, "TURKCELL", "TR"},
+       {DEVICE_TYPE_OPERATOR, 28602, "TELSIM", "TR"},
+       {DEVICE_TYPE_OPERATOR, 28603, "ARIA", "TR"},
+       {DEVICE_TYPE_OPERATOR, 28604, "AYCELL", "TR"},
+       {DEVICE_TYPE_OPERATOR, 28801, "FT GSM", "FO"},
+       {DEVICE_TYPE_OPERATOR, 29001, "TELE Greenland", "GR"},
+       {DEVICE_TYPE_OPERATOR, 29340, "SI.MOBIL", "SI"},
+       {DEVICE_TYPE_OPERATOR, 29341, "MOBITEL", "SI"},
+       {DEVICE_TYPE_OPERATOR, 29401, "MOBIMAK", "MK"},
+       {DEVICE_TYPE_OPERATOR, 29501, "TELECOM", "LI"},
+       {DEVICE_TYPE_OPERATOR, 29502, "MONTEL", "LI"},
+       {DEVICE_TYPE_OPERATOR, 29505, "FL1", "LI"},
+       {DEVICE_TYPE_OPERATOR, 29577, "LI TANGO", "LI"},
+       {DEVICE_TYPE_OPERATOR, 30237, "Microcell", "CA"},
+       {DEVICE_TYPE_OPERATOR, 30272, "Rogers AT&T", "CA"},
+       {DEVICE_TYPE_OPERATOR, 31001, "Cellnet", "US"},
+       {DEVICE_TYPE_OPERATOR, 31011, "Wireless 2000", "US"},
+       {DEVICE_TYPE_OPERATOR, 31015, "Cingular", "US"},
+       {DEVICE_TYPE_OPERATOR, 31016, "T-Mobile", "US"},
+       {DEVICE_TYPE_OPERATOR, 31017, "Cingular", "US"},
+       {DEVICE_TYPE_OPERATOR, 31018, "Cingular", "US"},
+       {DEVICE_TYPE_OPERATOR, 31020, "T-Mobile", "US"},
+       {DEVICE_TYPE_OPERATOR, 31021, "T-Mobile", "US"},
+       {DEVICE_TYPE_OPERATOR, 31022, "T-Mobile", "US"},
+       {DEVICE_TYPE_OPERATOR, 31023, "T-Mobile", "US"},
+       {DEVICE_TYPE_OPERATOR, 31024, "T-Mobile", "US"},
+       {DEVICE_TYPE_OPERATOR, 31025, "T-Mobile", "US"},
+       {DEVICE_TYPE_OPERATOR, 31026, "T-Mobile", "US"},
+       {DEVICE_TYPE_OPERATOR, 31027, "T-Mobile", "US"},
+       {DEVICE_TYPE_OPERATOR, 31031, "T-Mobile", "US"},
+       {DEVICE_TYPE_OPERATOR, 31034, "WestLink", "US"},
+       {DEVICE_TYPE_OPERATOR, 31035, "Carolina", "US"},
+       {DEVICE_TYPE_OPERATOR, 31038, "AT&T Wireless", "US"},
+       {DEVICE_TYPE_OPERATOR, 31041, "Cingular", "US"},
+       {DEVICE_TYPE_OPERATOR, 31046, "TMP Corp", "US"},
+       {DEVICE_TYPE_OPERATOR, 31058, "T-Mobile", "US"},
+       {DEVICE_TYPE_OPERATOR, 31061, "Epic Touch", "US"},
+       {DEVICE_TYPE_OPERATOR, 31063, "AmeriLink", "US"},
+       {DEVICE_TYPE_OPERATOR, 31064, "Einstein PCS", "US"},
+       {DEVICE_TYPE_OPERATOR, 31066, "T-Mobile", "US"},
+       {DEVICE_TYPE_OPERATOR, 31067, "Wireless 2000", "US"},
+       {DEVICE_TYPE_OPERATOR, 31068, "NPI Wireless", "US"},
+       {DEVICE_TYPE_OPERATOR, 31069, "Conestoga", "US"},
+       {DEVICE_TYPE_OPERATOR, 31074, "Telemetrix", "US"},
+       {DEVICE_TYPE_OPERATOR, 31076, "PTSI", "US"},
+       {DEVICE_TYPE_OPERATOR, 31077, "Iowa Wireless", "US"},
+       {DEVICE_TYPE_OPERATOR, 31078, "Airlink PCS", "US"},
+       {DEVICE_TYPE_OPERATOR, 31079, "PinPoint", "US"},
+       {DEVICE_TYPE_OPERATOR, 31080, "T-Mobile", "US"},
+       {DEVICE_TYPE_OPERATOR, 31098, "AWS", "US"},
+       {DEVICE_TYPE_OPERATOR, 31114, "Sprocket", "UNKNOW"},
+       {DEVICE_TYPE_OPERATOR, 31601, "Nextel", "UNKNOW"},
+       {DEVICE_TYPE_OPERATOR, 33805, "Digicel", "JM"},
+       {DEVICE_TYPE_OPERATOR, 34001, "Orange ", "FW"},
+       {DEVICE_TYPE_OPERATOR, 34020, "Bouygues", "FW"},
+       {DEVICE_TYPE_OPERATOR, 34430, "APUA PCS", "AG"},
+       {DEVICE_TYPE_OPERATOR, 35001, "Telecom", "BM"},
+       {DEVICE_TYPE_OPERATOR, 36251, "Telcell GSM", "AN"},
+       {DEVICE_TYPE_OPERATOR, 36801, "C_Com", "CU"},
+       {DEVICE_TYPE_OPERATOR, 37001, "Orange", "DO"},
+       {DEVICE_TYPE_OPERATOR, 40001, "AZERCELL GSM", "AZ"},
+       {DEVICE_TYPE_OPERATOR, 40002, "BAKCELL GSM 2000", "AZ"},
+       {DEVICE_TYPE_OPERATOR, 40101, "K-MOBILE", "KZ"},
+       {DEVICE_TYPE_OPERATOR, 40102, "K'CELL", "KZ"},
+       {DEVICE_TYPE_OPERATOR, 40401, "Hutch", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40402, "Airtel", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40403, "Airtel", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40404, "IDEA", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40405, "Hutch", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40407, "IDEA", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40409, "Reliance", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40410, "Airtel", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40411, "Hutch", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40412, "IDEA", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40413, "Hutch", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40414, "Spice", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40415, "Hutch", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40416, "Airtel", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40418, "Reliance", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40419, "IDEA", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40420, "Hutch", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40421, "BPL Mobile", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40422, "IDEA", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40424, "IDEA", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40427, "Hutch", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40429, "Aircel", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40430, "Hutch", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40431, "Airtel", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40434, "Cellone", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40436, "Reliance", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40437, "Aircel", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40438, "Cellone", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40440, "Airtel", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40441, "RPG", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40443, "Hutch", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40444, "Spice", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40445, "Airtel", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40446, "Hutch", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40449, "Airtel", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40450, "Reliance", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40451, "Cellone", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40452, "Reliance", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40453, "Cellone", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40454, "Cellone", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40455, "Cellone", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40456, "IDEA", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40457, "Cellone", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40458, "Cellone", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40459, "Cellone", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40460, "Hutch", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40462, "Cellone", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40464, "Cellone", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40466, "Cellone", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40467, "Reliance", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40468, "DOLPHIN", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40469, "MTNL", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40470, "Airtel", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40471, "Cellone", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40472, "Cellone", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40473, "Cellone", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40474, "Cellone", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40475, "Cellone", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40476, "Cellone", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40477, "Cellone", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40478, "IDEA", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40479, "Cellone", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40480, "Cellone", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40481, "Cellone", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40482, "IDEA", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40483, "Reliance", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40484, "Hutch", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40485, "Reliance", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40486, "Hutch", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40487, "IDEA", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40488, "Hutch", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40489, "IDEA", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40490, "Airtel", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40492, "Airtel", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40493, "Airtel", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40494, "Airtel", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40495, "Airtel", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40496, "Airtel", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40497, "Airtel", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40498, "Airtel", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40551, "Airtel", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40552, "Airtel", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40553, "Airtel", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40554, "Airtel", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40555, "Airtel", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40556, "Airtel", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40566, "Hutch", "IN"},
+       {DEVICE_TYPE_OPERATOR, 40567, "Hutch", "IN" },
+       {DEVICE_TYPE_OPERATOR, 41001, "Mobilink", "PK"},
+       {DEVICE_TYPE_OPERATOR, 41302, "DIALOG", "LK"},
+       {DEVICE_TYPE_OPERATOR, 41303, "CELLTEL", "LK"},
+       {DEVICE_TYPE_OPERATOR, 41401, "MM 900", "MM"},
+       {DEVICE_TYPE_OPERATOR, 41501, "Cellis", "LB"},
+       {DEVICE_TYPE_OPERATOR, 41503, "LibanCell", "LB"},
+       {DEVICE_TYPE_OPERATOR, 41601, "Fastlink", "JO"},
+       {DEVICE_TYPE_OPERATOR, 41677, "MobileCom", "JO"},
+       {DEVICE_TYPE_OPERATOR, 41702, "Spacetel", "SY"},
+       {DEVICE_TYPE_OPERATOR, 41709, "MOBILE SYRIA", "SY"},
+       {DEVICE_TYPE_OPERATOR, 41902, "MTCNet", "KW"},
+       {DEVICE_TYPE_OPERATOR, 41903, "WATANIYA", "KW"},
+       {DEVICE_TYPE_OPERATOR, 42001, "Al-Jawal", "SA"},
+       {DEVICE_TYPE_OPERATOR, 42007, "EAE", "SA"},
+       {DEVICE_TYPE_OPERATOR, 42102, "Spacetel", "YE"},
+       {DEVICE_TYPE_OPERATOR, 42202, "OMAN MOBILE", "OM"},
+       {DEVICE_TYPE_OPERATOR, 42402, "ETISALAT", "AE"},
+       {DEVICE_TYPE_OPERATOR, 42501, "Orange", "IL"},
+       {DEVICE_TYPE_OPERATOR, 42505, "JAWWAL", "IL"},
+       {DEVICE_TYPE_OPERATOR, 42601, "MOBILE PLUS", "BH"},
+       {DEVICE_TYPE_OPERATOR, 42701, "QATARNET", "QA"},
+       {DEVICE_TYPE_OPERATOR, 42899, "MobiCom", "MN"},
+       {DEVICE_TYPE_OPERATOR, 42901, "NTC", "NP"},
+       {DEVICE_TYPE_OPERATOR, 43211, "TCI", "IR"},
+       {DEVICE_TYPE_OPERATOR, 43214, "KISH", "IR"},
+       {DEVICE_TYPE_OPERATOR, 43401, "Buztel", "UZ"},
+       {DEVICE_TYPE_OPERATOR, 43402, "Uzmacom", "UZ"},
+       {DEVICE_TYPE_OPERATOR, 43404, "UZB DAEWOO-GSM", "UZ"},
+       {DEVICE_TYPE_OPERATOR, 43405, "Coscom", "UZ"},
+       {DEVICE_TYPE_OPERATOR, 43701, "BITEL", "KG"},
+       {DEVICE_TYPE_OPERATOR, 43801, "BCTI", "TM"},
+       {DEVICE_TYPE_OPERATOR, 45201, "MOBIFONE", "VN"},
+       {DEVICE_TYPE_OPERATOR, 45202, "VINAFONE", "VN"},
+       {DEVICE_TYPE_OPERATOR, 45400, "CSL", "HK"},
+       {DEVICE_TYPE_OPERATOR, 45401, "NEW WORLD", "HK"},
+       {DEVICE_TYPE_OPERATOR, 45402, "CSL", "HK"},
+       {DEVICE_TYPE_OPERATOR, 45404, "Orange", "HK"},
+       {DEVICE_TYPE_OPERATOR, 45406, "SMC", "HK"},
+       {DEVICE_TYPE_OPERATOR, 45410, "NEW WORLD", "HK"},
+       {DEVICE_TYPE_OPERATOR, 45412, "PEOPLES", "HK"},
+       {DEVICE_TYPE_OPERATOR, 45416, "SUNDAY", "HK"},
+       {DEVICE_TYPE_OPERATOR, 45418, "HK TELECOM", "HK"},
+       {DEVICE_TYPE_OPERATOR, 45500, "SmarTone", "UNKNOW"},
+       {DEVICE_TYPE_OPERATOR, 45501, "CTMGSM", "UNKNOW"},
+       {DEVICE_TYPE_OPERATOR, 45503, "HT Macau", "UNKNOW"},
+       {DEVICE_TYPE_OPERATOR, 45601, "MobiTel", "KH"},
+       {DEVICE_TYPE_OPERATOR, 45602, "SAMART-GSM", "KH"},
+       {DEVICE_TYPE_OPERATOR, 45701, "LAO GSM", "LA"},
+       {DEVICE_TYPE_OPERATOR, 46000, "CHINA MOBILE", "CN"},
+       {DEVICE_TYPE_OPERATOR, 46001, "CHN-CUGSM", "CN"},
+       {DEVICE_TYPE_OPERATOR, 46002, "CHINA MOBILE", "CN"},
+       {DEVICE_TYPE_OPERATOR, 46601, "Far EasTone", "TW"},
+       {DEVICE_TYPE_OPERATOR, 46606, "TUNTEX", "TW"},
+       {DEVICE_TYPE_OPERATOR, 46668, "ACeS", "TW"},
+       {DEVICE_TYPE_OPERATOR, 46688, "KGT", "TW"},
+       {DEVICE_TYPE_OPERATOR, 46692, "Chunghwa", "TW"},
+       {DEVICE_TYPE_OPERATOR, 46693, "MobiTai", "TW"},
+       {DEVICE_TYPE_OPERATOR, 46697, "TWN GSM", "TW"},
+       {DEVICE_TYPE_OPERATOR, 46699, "TransAsia", "TW"},
+       {DEVICE_TYPE_OPERATOR, 47001, "GrameemPhone", "BD"},
+       {DEVICE_TYPE_OPERATOR, 47002, "AKTEL", "BD"},
+       {DEVICE_TYPE_OPERATOR, 47003, "ShebaWorld", "BD"},
+       {DEVICE_TYPE_OPERATOR, 47019, "Mobile 2000", "BD"},
+       {DEVICE_TYPE_OPERATOR, 47201, "DHIMOBILE", "MV"},
+       {DEVICE_TYPE_OPERATOR, 50212, "Maxis Mobile", "MY"},
+       {DEVICE_TYPE_OPERATOR, 50213, "TM Touch", "MY"},
+       {DEVICE_TYPE_OPERATOR, 50216, "DiGi", "MY"},
+       {DEVICE_TYPE_OPERATOR, 50217, "ADAM", "MY"},
+       {DEVICE_TYPE_OPERATOR, 50219, "CELCOM", "MY"},
+       {DEVICE_TYPE_OPERATOR, 50501, "MobileNet", "AU"},
+       {DEVICE_TYPE_OPERATOR, 50502, "OPTUS", "AU"},
+       {DEVICE_TYPE_OPERATOR, 50503, "Vodafone", "AU"},
+       {DEVICE_TYPE_OPERATOR, 50508, "One.Tel", "AU"},
+       {DEVICE_TYPE_OPERATOR, 51000, "ACeS", "ID"},
+       {DEVICE_TYPE_OPERATOR, 51001, "SATELINDOCEL", "ID"},
+       {DEVICE_TYPE_OPERATOR, 51008, "LIPPO TEL", "ID"},
+       {DEVICE_TYPE_OPERATOR, 51010, "TELKOMSEL", "ID"},
+       {DEVICE_TYPE_OPERATOR, 51011, "GSM-XL", "ID"},
+       {DEVICE_TYPE_OPERATOR, 51021, "INDOSAT", "ID"},
+       {DEVICE_TYPE_OPERATOR, 51501, "ISLACOM", "PH"},
+       {DEVICE_TYPE_OPERATOR, 51502, "Globe", "PH"},
+       {DEVICE_TYPE_OPERATOR, 51503, "SMART", "PH"},
+       {DEVICE_TYPE_OPERATOR, 51505, "Digitel", "PH"},
+       {DEVICE_TYPE_OPERATOR, 51511, "ACeS", "PH"},
+       {DEVICE_TYPE_OPERATOR, 52001, "AIS GSM", "TH"},
+       {DEVICE_TYPE_OPERATOR, 52015, "ACT Mobile", "TH"},
+       {DEVICE_TYPE_OPERATOR, 52018, "WP-1800", "TH"},
+       {DEVICE_TYPE_OPERATOR, 52020, "ACeS", "TH"},
+       {DEVICE_TYPE_OPERATOR, 52023, "HELLO", "TH"},
+       {DEVICE_TYPE_OPERATOR, 52099, "Orange", "TH"},
+       {DEVICE_TYPE_OPERATOR, 52501, "ST-GSM-SGP", "SG"},
+       {DEVICE_TYPE_OPERATOR, 52502, "ST-GSM1800-SGP", "SG"},
+       {DEVICE_TYPE_OPERATOR, 52503, "M1-GSM-SGP", "SG"},
+       {DEVICE_TYPE_OPERATOR, 52504, "SGP-M1-3GSM", "SG"},
+       {DEVICE_TYPE_OPERATOR, 52505, "STARHUB-SGP", "SG"},
+       {DEVICE_TYPE_OPERATOR, 52811, "BRU TSTCom", "BN"},
+       {DEVICE_TYPE_OPERATOR, 53001, "Vodafone", "NZ"},
+       {DEVICE_TYPE_OPERATOR, 53901, "Tonga Comm.", "TO"},
+       {DEVICE_TYPE_OPERATOR, 54100, "ACeS", "VU"},
+       {DEVICE_TYPE_OPERATOR, 54101, "SMILE", "VU"},
+       {DEVICE_TYPE_OPERATOR, 54201, "Vodafone", "FJ"},
+       {DEVICE_TYPE_OPERATOR, 54411, "Blue Sky", "AS"},
+       {DEVICE_TYPE_OPERATOR, 54601, "MOBILIS", "NC"},
+       {DEVICE_TYPE_OPERATOR, 54720, "VINI", "PF"},
+       {DEVICE_TYPE_OPERATOR, 55001, "FSM", "FM"},
+       {DEVICE_TYPE_OPERATOR, 60201, "MobiNiL", "EG"},
+       {DEVICE_TYPE_OPERATOR, 60202, "CLICK GSM", "EG"},
+       {DEVICE_TYPE_OPERATOR, 60301, "AMN", "DZ"},
+       {DEVICE_TYPE_OPERATOR, 60400, "Meditel", "MA"},
+       {DEVICE_TYPE_OPERATOR, 60401, "IAM", "MA"},
+       {DEVICE_TYPE_OPERATOR, 60502, "TUNICELL", "TN"},
+       {DEVICE_TYPE_OPERATOR, 60801, "ALIZE", "SN"},
+       {DEVICE_TYPE_OPERATOR, 60802, "SENTEL", "SN"},
+       {DEVICE_TYPE_OPERATOR, 61001, "MALITEL", "ML"},
+       {DEVICE_TYPE_OPERATOR, 61101, "MOBILIS", "GN"},
+       {DEVICE_TYPE_OPERATOR, 61102, "LAGUI", "GN"},
+       {DEVICE_TYPE_OPERATOR, 61201, "CORA", "CI"},
+       {DEVICE_TYPE_OPERATOR, 61203, "Ivoiris", "CI"},
+       {DEVICE_TYPE_OPERATOR, 61205, "TELECEL", "CI"},
+       {DEVICE_TYPE_OPERATOR, 61302, "CELTEL", "BF"},
+       {DEVICE_TYPE_OPERATOR, 61402, "CELTEL", "NE"},
+       {DEVICE_TYPE_OPERATOR, 61501, "TOGOCEL", "TG"},
+       {DEVICE_TYPE_OPERATOR, 61601, "LIBERCOM", "BJ"},
+       {DEVICE_TYPE_OPERATOR, 61602, "Telecel Benin", "BJ"},
+       {DEVICE_TYPE_OPERATOR, 61603, "BENINCELL", "BJ"},
+       {DEVICE_TYPE_OPERATOR, 61701, "CELLPLUS", "MU"},
+       {DEVICE_TYPE_OPERATOR, 61710, "EMTEL", "MU"},
+       {DEVICE_TYPE_OPERATOR, 61801, "Omega", "LR"},
+       {DEVICE_TYPE_OPERATOR, 62001, "SPACEFON", "GH"},
+       {DEVICE_TYPE_OPERATOR, 62002, "ONEtouch", "GH"},
+       {DEVICE_TYPE_OPERATOR, 62003, "MOBITEL", "GH"},
+       {DEVICE_TYPE_OPERATOR, 62100, "MTN", "NG"},
+       {DEVICE_TYPE_OPERATOR, 62120, "ECONET", "NG"},
+       {DEVICE_TYPE_OPERATOR, 62130, "MTN", "NG"},
+       {DEVICE_TYPE_OPERATOR, 62140, "NITEL GSM", "NG"},
+       {DEVICE_TYPE_OPERATOR, 62201, "CELTEL", "TD"},
+       {DEVICE_TYPE_OPERATOR, 62202, "LIBERTIS", "TD"},
+       {DEVICE_TYPE_OPERATOR, 62401, "MTN-CAM", "CM"},
+       {DEVICE_TYPE_OPERATOR, 62402, "MOBILIS", "CM"},
+       {DEVICE_TYPE_OPERATOR, 62501, "CPV MOVEL", "CV"},
+       {DEVICE_TYPE_OPERATOR, 62801, "LIBERTIS", "GA"},
+       {DEVICE_TYPE_OPERATOR, 62802, "GO Celtel", "GA"},
+       {DEVICE_TYPE_OPERATOR, 62803, "CELTEL", "GA"},
+       {DEVICE_TYPE_OPERATOR, 62901, "CELTEL", "CG"},
+       {DEVICE_TYPE_OPERATOR, 62910, "LIBERTIS", "CG"},
+       {DEVICE_TYPE_OPERATOR, 63001, "CELLNET", "CD"},
+       {DEVICE_TYPE_OPERATOR, 63002, "CELTEL", "CD"},
+       {DEVICE_TYPE_OPERATOR, 63004, "CELLCO", "CD"},
+       {DEVICE_TYPE_OPERATOR, 63089, "OASIS", "CD"},
+       {DEVICE_TYPE_OPERATOR, 63301, "SEYCEL", "SC"},
+       {DEVICE_TYPE_OPERATOR, 63310, "AIRTEL", "SC"},
+       {DEVICE_TYPE_OPERATOR, 63401, "MobiTel", "MZ"},
+       {DEVICE_TYPE_OPERATOR, 63510, "Rwandacell", "RW"},
+       {DEVICE_TYPE_OPERATOR, 63601, "ETMTN", "ET"},
+       {DEVICE_TYPE_OPERATOR, 63701, "BARAKAAT", "SO"},
+       {DEVICE_TYPE_OPERATOR, 63902, "Safaricom", "KE"},
+       {DEVICE_TYPE_OPERATOR, 63903, "KENCELL", "KE"},
+       {DEVICE_TYPE_OPERATOR, 64001, "TRITEL", "TZ"},
+       {DEVICE_TYPE_OPERATOR, 64002, "MobiTel", "TZ"},
+       {DEVICE_TYPE_OPERATOR, 64003, "ZANTEL", "TZ"},
+       {DEVICE_TYPE_OPERATOR, 64004, "Vodacom", "TZ"},
+       {DEVICE_TYPE_OPERATOR, 64005, "CELTEL", "TZ"},
+       {DEVICE_TYPE_OPERATOR, 64101, "CelTel", "UG"},
+       {DEVICE_TYPE_OPERATOR, 64110, "MTN-UGANDA", "UG"},
+       {DEVICE_TYPE_OPERATOR, 64111, "UTL TELECEL", "UG"},
+       {DEVICE_TYPE_OPERATOR, 64201, "Spacetel", "BI"},
+       {DEVICE_TYPE_OPERATOR, 64202, "SAFARIS", "BI"},
+       {DEVICE_TYPE_OPERATOR, 64301, "mCel", "UNKNOW"},
+       {DEVICE_TYPE_OPERATOR, 64501, "ZAMCELL", "UNKNOW"},
+       {DEVICE_TYPE_OPERATOR, 64502, "TELECEL", "UNKNOW"},
+       {DEVICE_TYPE_OPERATOR, 64601, "Madacom", "MG"},
+       {DEVICE_TYPE_OPERATOR, 64602, "ANTARIS", "MG"},
+       {DEVICE_TYPE_OPERATOR, 64700, "Orange Reunion", "RE"},
+       {DEVICE_TYPE_OPERATOR, 64710, "SFR Reunion", "RE"},
+       {DEVICE_TYPE_OPERATOR, 64801, "NET*ONE", "ZW"},
+       {DEVICE_TYPE_OPERATOR, 64803, "TELECEL", "ZW"},
+       {DEVICE_TYPE_OPERATOR, 64804, "ECONET", "ZW"},
+       {DEVICE_TYPE_OPERATOR, 64901, "MTC", "NA"},
+       {DEVICE_TYPE_OPERATOR, 65001, "CALLPOINT 90", "MW"},
+       {DEVICE_TYPE_OPERATOR, 65010, "CelTel", "MW"},
+       {DEVICE_TYPE_OPERATOR, 65101, "Vodacom", "LS"},
+       {DEVICE_TYPE_OPERATOR, 65201, "MASCOM", "BW"},
+       {DEVICE_TYPE_OPERATOR, 65202, "VISTA", "BW"},
+       {DEVICE_TYPE_OPERATOR, 65310, "SwaziMTN", "SZ"},
+       {DEVICE_TYPE_OPERATOR, 65501, "Vodacom", "ZA"},
+       {DEVICE_TYPE_OPERATOR, 65507, "Cell C (Pty) Ltd", "ZA"},
+       {DEVICE_TYPE_OPERATOR, 65510, "MTN", "ZA"},
+       {DEVICE_TYPE_OPERATOR, 70601, "PERSONAL", "SV"},
+       {DEVICE_TYPE_OPERATOR, 70602, "DIGICEL", "SV"},
+       {DEVICE_TYPE_OPERATOR, 71610, "TIM", "PE"},
+       {DEVICE_TYPE_OPERATOR, 72207, "UNIFON", "AR"},
+       {DEVICE_TYPE_OPERATOR, 72234, "Telecom Personal", "AR"},
+       {DEVICE_TYPE_OPERATOR, 72235, "PORT-HABLE", "AR"},
+       {DEVICE_TYPE_OPERATOR, 72402, "TIM BRASIL", "BR"},
+       {DEVICE_TYPE_OPERATOR, 72403, "TIM BRASIL", "BR"},
+       {DEVICE_TYPE_OPERATOR, 72404, "TIM BRASIL", "BR"},
+       {DEVICE_TYPE_OPERATOR, 72405, "Claro", "BR"},
+       {DEVICE_TYPE_OPERATOR, 72416, "BrTCel", "BR"},
+       {DEVICE_TYPE_OPERATOR, 73001, "ENTEL PCS", "CL"},
+       {DEVICE_TYPE_OPERATOR, 73010, "ENTEL PCS", "CL"},
+       {DEVICE_TYPE_OPERATOR, 73401, "INFONET", "VE"},
+       {DEVICE_TYPE_OPERATOR, 73402, "DIGITEL", "VE"},
+       {DEVICE_TYPE_OPERATOR, 73601, "NUEVATEL", "BO"},
+       {DEVICE_TYPE_OPERATOR, 73602, "ENTEL", "BO"},
+       {DEVICE_TYPE_OPERATOR, 74401, "VOX", "PY"},
+       {DEVICE_TYPE_OPERATOR, 74402, "PY 02", "PY"},
+       {DEVICE_TYPE_OPERATOR, 74601, "ICMS", "SR"},    
+       {DEVICE_TYPE_OPERATOR, 74605, "Thuraya", "UNKNOW"}      //90105
+};
+
+static struct reserve_id_name area_reserve_id_name[RESERVE_ID_NUMS] = {
+       {DEVICE_TYPE_RESERVE, 0, "no", "CN"},
+};
+
+
+#endif
diff --git a/include/linux/board-id.h b/include/linux/board-id.h
new file mode 100755 (executable)
index 0000000..b121a10
--- /dev/null
@@ -0,0 +1,1435 @@
+#ifndef __BOARD_ID_H\r
+#define __BOARD_ID_H\r
+#include <linux/miscdevice.h>\r
+#include <linux/board-id-hw.h>\r
+\r
+enum type_devices{\r
+       DEVICE_TYPE_NULL = 0x0, \r
+\r
+       DEVICE_TYPE_SUM = 0x20, \r
+       DEVICE_TYPE_AREA = 0x24,        //\r
+       DEVICE_TYPE_OPERATOR = 0x25,    \r
+       DEVICE_TYPE_OPERATOR2 = 0x26,\r
+       DEVICE_TYPE_RESERVE = 0x27,     \r
+       DEVICE_TYPE_STATUS = 0x28,\r
+\r
+       DEVICE_TYPE_TP = 0x29,          //one byte size\r
+       DEVICE_TYPE_LCD,        \r
+       DEVICE_TYPE_KEY,        \r
+       DEVICE_TYPE_CODEC,\r
+       DEVICE_TYPE_WIFI,\r
+       DEVICE_TYPE_BT, \r
+       DEVICE_TYPE_GPS,        \r
+       DEVICE_TYPE_FM, \r
+       DEVICE_TYPE_MODEM,      \r
+       DEVICE_TYPE_DDR,\r
+       DEVICE_TYPE_FLASH,\r
+       DEVICE_TYPE_HDMI,\r
+       DEVICE_TYPE_BATTERY,\r
+       DEVICE_TYPE_CHARGE,     \r
+       DEVICE_TYPE_BACKLIGHT,\r
+       DEVICE_TYPE_HEADSET,\r
+       DEVICE_TYPE_MICPHONE,\r
+       DEVICE_TYPE_SPEAKER,\r
+       DEVICE_TYPE_VIBRATOR,\r
+       DEVICE_TYPE_TV, \r
+       DEVICE_TYPE_ECHIP,      //30\r
+       DEVICE_TYPE_HUB,\r
+       DEVICE_TYPE_TPAD,\r
+       \r
+       DEVICE_TYPE_PMIC,\r
+       DEVICE_TYPE_REGULATOR,\r
+       DEVICE_TYPE_RTC,\r
+       DEVICE_TYPE_CAMERA_FRONT,\r
+       DEVICE_TYPE_CAMERA_BACK,        //35\r
+       DEVICE_TYPE_ANGLE,\r
+       DEVICE_TYPE_ACCEL,\r
+       DEVICE_TYPE_COMPASS,\r
+       DEVICE_TYPE_GYRO,\r
+       DEVICE_TYPE_LIGHT,\r
+       DEVICE_TYPE_PROXIMITY,\r
+       DEVICE_TYPE_TEMPERATURE,        \r
+       DEVICE_TYPE_PRESSURE,\r
+       \r
+       DEVICE_NUM_TYPES,\r
+};\r
+\r
+\r
+#if 0\r
+enum id_language{\r
+       LANGUAGE_ID_NULL = 0,\r
+       LANGUAGE_ID_EN,// Ó¢ÎÄ \r
+       LANGUAGE_ID_EN_US,// Ó¢ÎÄ (ÃÀ¹ú) \r
+       LANGUAGE_ID_AR,// °¢À­²®ÎÄ \r
+       LANGUAGE_ID_AR_AE,// °¢À­²®ÎÄ (°¢À­²®ÁªºÏÇõ³¤¹ú) \r
+       LANGUAGE_ID_AR_BH,// °¢À­²®ÎÄ (°ÍÁÖ) \r
+       LANGUAGE_ID_AR_DZ,// °¢À­²®ÎÄ (°¢¶û¼°ÀûÑÇ) \r
+       LANGUAGE_ID_AR_EG,// °¢À­²®ÎÄ (°£¼°) \r
+       LANGUAGE_ID_AR_IQ,// °¢À­²®ÎÄ (ÒÁÀ­¿Ë) \r
+       LANGUAGE_ID_AR_JO,// °¢À­²®ÎÄ (Ô¼µ©) \r
+       LANGUAGE_ID_AR_KW,// °¢À­²®ÎÄ (¿ÆÍþÌØ) \r
+       LANGUAGE_ID_AR_LB,// °¢À­²®ÎÄ (Àè°ÍÄÛ) \r
+       LANGUAGE_ID_AR_LY,// °¢À­²®ÎÄ (Àû±ÈÑÇ) \r
+       LANGUAGE_ID_AR_MA,// °¢À­²®ÎÄ (ĦÂå¸ç) \r
+       LANGUAGE_ID_AR_OM,// °¢À­²®ÎÄ (°¢Âü) \r
+       LANGUAGE_ID_AR_QA,// °¢À­²®ÎÄ (¿¨Ëþ¶û) \r
+       LANGUAGE_ID_AR_SA,// °¢À­²®ÎÄ (ɳÌØ°¢À­²®) \r
+       LANGUAGE_ID_AR_SD,// °¢À­²®ÎÄ (ËÕµ¤) \r
+       LANGUAGE_ID_AR_SY,// °¢À­²®ÎÄ (ÐðÀûÑÇ) \r
+       LANGUAGE_ID_AR_TN,// °¢À­²®ÎÄ (Í»Äá˹) \r
+       LANGUAGE_ID_AR_YE,// °¢À­²®ÎÄ (Ò²ÃÅ) \r
+       LANGUAGE_ID_BE,// °×¶íÂÞ˹ÎÄ \r
+       LANGUAGE_ID_BE_BY,// °×¶íÂÞ˹ÎÄ (°×¶íÂÞ˹) \r
+       LANGUAGE_ID_BG,// ±£¼ÓÀûÑÇÎÄ \r
+       LANGUAGE_ID_BG_BG,// ±£¼ÓÀûÑÇÎÄ (±£¼ÓÀûÑÇ) \r
+       LANGUAGE_ID_CA,// ¼ÓÌ©ÂÞÄáÑÇÎÄ \r
+       LANGUAGE_ID_CA_ES,// ¼ÓÌ©ÂÞÄáÑÇÎÄ (Î÷°àÑÀ) \r
+       LANGUAGE_ID_CA_ES_EURO,// ¼ÓÌ©ÂÞÄáÑÇÎÄ (Î÷°àÑÀ,EURO) \r
+       LANGUAGE_ID_CS,// ½Ý¿ËÎÄ \r
+       LANGUAGE_ID_CS_CZ,// ½Ý¿ËÎÄ (½Ý¿Ë¹²ºÍ¹ú) \r
+       LANGUAGE_ID_DA,// µ¤ÂóÎÄ \r
+       LANGUAGE_ID_DA_DK,// µ¤ÂóÎÄ (µ¤Âó) \r
+       LANGUAGE_ID_DE,// µÂÎÄ \r
+       LANGUAGE_ID_DE_AT,// µÂÎÄ (°ÂµØÀû) \r
+       LANGUAGE_ID_DE_AT_EURO,// µÂÎÄ (°ÂµØÀû,EURO) \r
+       LANGUAGE_ID_DE_CH,// µÂÎÄ (ÈðÊ¿) \r
+       LANGUAGE_ID_DE_DE,// µÂÎÄ (µÂ¹ú) \r
+       LANGUAGE_ID_DE_DE_EURO,// µÂÎÄ (µÂ¹ú,EURO) \r
+       LANGUAGE_ID_DE_LU,// µÂÎÄ (¬ɭ±¤) \r
+       LANGUAGE_ID_DE_LU_EURO,// µÂÎÄ (¬ɭ±¤,EURO) \r
+       LANGUAGE_ID_EL,// Ï£À°ÎÄ \r
+       LANGUAGE_ID_EL_GR,// Ï£À°ÎÄ (Ï£À°) \r
+       LANGUAGE_ID_EN_AU,// Ó¢ÎÄ (°Ä´óÀûÑÇ) \r
+       LANGUAGE_ID_EN_CA,// Ó¢ÎÄ (¼ÓÄôó) \r
+       LANGUAGE_ID_EN_GB,// Ó¢ÎÄ (Ó¢¹ú) \r
+       LANGUAGE_ID_EN_IE,// Ó¢ÎÄ (°®¶ûÀ¼) \r
+       LANGUAGE_ID_EN_IE_EURO,// Ó¢ÎÄ (°®¶ûÀ¼,EURO) \r
+       LANGUAGE_ID_EN_NZ,// Ó¢ÎÄ (ÐÂÎ÷À¼) \r
+       LANGUAGE_ID_EN_ZA,// Ó¢ÎÄ (ÄÏ·Ç) \r
+       LANGUAGE_ID_ES,// Î÷°àÑÀÎÄ \r
+       LANGUAGE_ID_ES_BO,// Î÷°àÑÀÎÄ (²£ÀûάÑÇ) \r
+       LANGUAGE_ID_ES_AR,// Î÷°àÑÀÎÄ (°¢¸ùÍ¢) \r
+       LANGUAGE_ID_ES_CL,// Î÷°àÑÀÎÄ (ÖÇÀû) \r
+       LANGUAGE_ID_ES_CO,// Î÷°àÑÀÎÄ (¸çÂ×±ÈÑÇ) \r
+       LANGUAGE_ID_ES_CR,// Î÷°àÑÀÎÄ (¸ç˹´ïÀè¼Ó) \r
+       LANGUAGE_ID_ES_DO,// Î÷°àÑÀÎÄ (¶àÃ×Äá¼Ó¹²ºÍ¹ú) \r
+       LANGUAGE_ID_ES_EC,// Î÷°àÑÀÎÄ (¶ò¹Ï¶à¶û) \r
+       LANGUAGE_ID_ES_ES,// Î÷°àÑÀÎÄ (Î÷°àÑÀ) \r
+       LANGUAGE_ID_ES_ES_EURO,// Î÷°àÑÀÎÄ (Î÷°àÑÀ,EURO) \r
+       LANGUAGE_ID_ES_GT,// Î÷°àÑÀÎÄ (ΣµØÂíÀ­) \r
+       LANGUAGE_ID_ES_HN,// Î÷°àÑÀÎÄ (ºé¶¼À­Ë¹) \r
+       LANGUAGE_ID_ES_MX,// Î÷°àÑÀÎÄ (Ä«Î÷¸ç) \r
+       LANGUAGE_ID_ES_NI,// Î÷°àÑÀÎÄ (Äá¼ÓÀ­¹Ï) \r
+       LANGUAGE_ID_ET,// °®É³ÄáÑÇÎÄ \r
+       LANGUAGE_ID_ES_PA,// Î÷°àÑÀÎÄ (°ÍÄÃÂí) \r
+       LANGUAGE_ID_ES_PE,// Î÷°àÑÀÎÄ (Ãس) \r
+       LANGUAGE_ID_ES_PR,// Î÷°àÑÀÎÄ (²¨¶àÀè¸ç) \r
+       LANGUAGE_ID_ES_PY,// Î÷°àÑÀÎÄ (°ÍÀ­¹ç) \r
+       LANGUAGE_ID_ES_SV,// Î÷°àÑÀÎÄ (Èø¶ûÍ߶à) \r
+       LANGUAGE_ID_ES_UY,// Î÷°àÑÀÎÄ (ÎÚÀ­¹ç) \r
+       LANGUAGE_ID_ES_VE,// Î÷°àÑÀÎÄ (ίÄÚÈðÀ­) \r
+       LANGUAGE_ID_ET_EE,// °®É³ÄáÑÇÎÄ (°®É³ÄáÑÇ) \r
+       LANGUAGE_ID_FI,// ·ÒÀ¼ÎÄ \r
+       LANGUAGE_ID_FI_FI,// ·ÒÀ¼ÎÄ (·ÒÀ¼) \r
+       LANGUAGE_ID_FI_FI_EURO,// ·ÒÀ¼ÎÄ (·ÒÀ¼,EURO) \r
+       LANGUAGE_ID_FR,// ·¨ÎÄ \r
+       LANGUAGE_ID_FR_BE,// ·¨ÎÄ (±ÈÀûʱ) \r
+       LANGUAGE_ID_FR_BE_EURO,// ·¨ÎÄ (±ÈÀûʱ,EURO) \r
+       LANGUAGE_ID_FR_CA,// ·¨ÎÄ (¼ÓÄôó) \r
+       LANGUAGE_ID_FR_CH,// ·¨ÎÄ (ÈðÊ¿) \r
+       LANGUAGE_ID_FR_FR,// ·¨ÎÄ (·¨¹ú) \r
+       LANGUAGE_ID_FR_FR_EURO,// ·¨ÎÄ (·¨¹ú,EURO) \r
+       LANGUAGE_ID_FR_LU,// ·¨ÎÄ (¬ɭ±¤) \r
+       LANGUAGE_ID_FR_LU_EURO,// ·¨ÎÄ (¬ɭ±¤,EURO) \r
+       LANGUAGE_ID_HR,// ¿ËÂÞµØÑÇÎÄ \r
+       LANGUAGE_ID_HR_HR,// ¿ËÂÞµØÑÇÎÄ (¿ËÂÞµØÑÇ) \r
+       LANGUAGE_ID_HU,// ÐÙÑÀÀûÎÄ \r
+       LANGUAGE_ID_HU_HU,// ÐÙÑÀÀûÎÄ (ÐÙÑÀÀû) \r
+       LANGUAGE_ID_IS,// ±ùµºÎÄ \r
+       LANGUAGE_ID_IS_IS,// ±ùµºÎÄ (±ùµº) \r
+       LANGUAGE_ID_IT,// Òâ´óÀûÎÄ \r
+       LANGUAGE_ID_IT_CH,// Òâ´óÀûÎÄ (ÈðÊ¿) \r
+       LANGUAGE_ID_IT_IT,// Òâ´óÀûÎÄ (Òâ´óÀû) \r
+       LANGUAGE_ID_IT_IT_EURO,// Òâ´óÀûÎÄ (Òâ´óÀû,EURO) \r
+       LANGUAGE_ID_IW,// Ï£²®À´ÎÄ \r
+       LANGUAGE_ID_IW_IL,// Ï£²®À´ÎÄ (ÒÔÉ«ÁÐ) \r
+       LANGUAGE_ID_JA,// ÈÕÎÄ \r
+       LANGUAGE_ID_JA_JP,// ÈÕÎÄ (ÈÕ±¾) \r
+       LANGUAGE_ID_KO,// ³¯ÏÊÎÄ \r
+       LANGUAGE_ID_KO_KR,// ³¯ÏÊÎÄ (Äϳ¯ÏÊ) \r
+       LANGUAGE_ID_LT,// Á¢ÌÕÍðÎÄ \r
+       LANGUAGE_ID_LT_LT,// Á¢ÌÕÍðÎÄ (Á¢ÌÕÍð) \r
+       LANGUAGE_ID_LV,// À­ÍÐάÑÇÎÄ(ÁÐÍÐ) \r
+       LANGUAGE_ID_LV_LV,// À­ÍÐάÑÇÎÄ(ÁÐÍÐ) (À­ÍÑάÑÇ) \r
+       LANGUAGE_ID_MK,// ÂíÆä¶ÙÎÄ \r
+       LANGUAGE_ID_MK_MK,// ÂíÆä¶ÙÎÄ (ÂíÆä¶ÙÍõ¹ú) \r
+       LANGUAGE_ID_NL,// ºÉÀ¼ÎÄ \r
+       LANGUAGE_ID_NL_BE,// ºÉÀ¼ÎÄ (±ÈÀûʱ) \r
+       LANGUAGE_ID_NL_BE_EURO,// ºÉÀ¼ÎÄ (±ÈÀûʱ,EURO) \r
+       LANGUAGE_ID_NL_NL,// ºÉÀ¼ÎÄ (ºÉÀ¼) \r
+       LANGUAGE_ID_NL_NL_EURO,// ºÉÀ¼ÎÄ (ºÉÀ¼,EURO) \r
+       LANGUAGE_ID_NO,// Å²ÍþÎÄ \r
+       LANGUAGE_ID_NO_NO,// Å²ÍþÎÄ (ŲÍþ) \r
+       LANGUAGE_ID_NO_NO_NY,// Å²ÍþÎÄ (ŲÍþ,NYNORSK) \r
+       LANGUAGE_ID_PL,// ²¨À¼ÎÄ \r
+       LANGUAGE_ID_PL_PL,// ²¨À¼ÎÄ (²¨À¼) \r
+       LANGUAGE_ID_PT,// ÆÏÌÑÑÀÎÄ \r
+       LANGUAGE_ID_PT_BR,// ÆÏÌÑÑÀÎÄ (°ÍÎ÷) \r
+       LANGUAGE_ID_PT_PT,// ÆÏÌÑÑÀÎÄ (ÆÏÌÑÑÀ) \r
+       LANGUAGE_ID_PT_PT_EURO,// ÆÏÌÑÑÀÎÄ (ÆÏÌÑÑÀ,EURO) \r
+       LANGUAGE_ID_RO,// ÂÞÂíÄáÑÇÎÄ \r
+       LANGUAGE_ID_RO_RO,// ÂÞÂíÄáÑÇÎÄ (ÂÞÂíÄáÑÇ) \r
+       LANGUAGE_ID_RU,// ¶íÎÄ \r
+       LANGUAGE_ID_RU_RU,// ¶íÎÄ (¶íÂÞ˹) \r
+       LANGUAGE_ID_SH,// Èû²¨Äá˹-¿ËÂÞµØÑÇÎÄ \r
+       LANGUAGE_ID_SH_YU,// Èû²¨Äá˹-¿ËÂÞµØÑÇÎÄ (ÄÏ˹À­·ò) \r
+       LANGUAGE_ID_SK,// Ë¹Âå·¥¿ËÎÄ \r
+       LANGUAGE_ID_SK_SK,// Ë¹Âå·¥¿ËÎÄ (˹Âå·¥¿Ë) \r
+       LANGUAGE_ID_SL,// Ë¹ÂåÎÄÄáÑÇÎÄ \r
+       LANGUAGE_ID_SL_SI,// Ë¹ÂåÎÄÄáÑÇÎÄ (˹ÂåÎÄÄáÑÇ) \r
+       LANGUAGE_ID_SQ,// °¢¶û°ÍÄáÑÇÎÄ \r
+       LANGUAGE_ID_SQ_AL,// °¢¶û°ÍÄáÑÇÎÄ (°¢¶û°ÍÄáÑÇ) \r
+       LANGUAGE_ID_SR,// Èû¶ûάÑÇÎÄ \r
+       LANGUAGE_ID_SR_YU,// Èû¶ûάÑÇÎÄ (ÄÏ˹À­·ò) \r
+       LANGUAGE_ID_SV,// ÈðµäÎÄ \r
+       LANGUAGE_ID_SV_SE,// ÈðµäÎÄ (Èðµä) \r
+       LANGUAGE_ID_TH,// Ì©ÎÄ \r
+       LANGUAGE_ID_TH_TH,// Ì©ÎÄ (Ì©¹ú) \r
+       LANGUAGE_ID_TR,// ÍÁ¶úÆäÎÄ \r
+       LANGUAGE_ID_TR_TR,// ÍÁ¶úÆäÎÄ (ÍÁ¶úÆä) \r
+       LANGUAGE_ID_UK,// ÎÚ¿ËÀ¼ÎÄ \r
+       LANGUAGE_ID_UK_UA,// ÎÚ¿ËÀ¼ÎÄ (ÎÚ¿ËÀ¼) \r
+       LANGUAGE_ID_ZH,// ÖÐÎÄ \r
+       LANGUAGE_ID_ZH_CN,// ÖÐÎÄ (Öйú) \r
+       LANGUAGE_ID_ZH_HK,// ÖÐÎÄ (Ïã¸Û) \r
+       LANGUAGE_ID_ZH_TW,// ÖÐÎÄ (̨Íå) ¡¡¡¡ \r
+       AREA_ID_NUMS,\r
+};\r
+#endif\r
+\r
+\r
+\r
+enum area_id{\r
+       AREA_ID_NULL,\r
+       AREA_ID_ALBANIA,\r
+       AREA_ID_ALGERIA,\r
+       AREA_ID_ANGOLA,\r
+       AREA_ID_ARGENTINA,\r
+       AREA_ID_AUSTRALIA,\r
+       AREA_ID_AUSTRIA,\r
+       AREA_ID_AZERBAIJAN,\r
+       AREA_ID_BAHRAIN,\r
+       AREA_ID_BANGLADESH,\r
+       AREA_ID_BARBADOS,\r
+       AREA_ID_BELARUS,\r
+       AREA_ID_BELGIUM,\r
+       AREA_ID_BOLIVIA,\r
+       AREA_ID_BOSNIA_AND_HERZEGOVINA,\r
+       AREA_ID_BOTSWANA,\r
+       AREA_ID_BRAZIL,\r
+       AREA_ID_BULGARIA,\r
+       AREA_ID_CANADA,\r
+       AREA_ID_CHILE,\r
+       AREA_ID_CHINA,\r
+       AREA_ID_COLOMBIA,\r
+       AREA_ID_COTE_D_IVOIRE,\r
+       AREA_ID_CROATIA,\r
+       AREA_ID_CYPRUS,\r
+       AREA_ID_CZECH_REPUBLIC,\r
+       AREA_ID_DENMARK,\r
+       AREA_ID_ECUADOR,\r
+       AREA_ID_EGYPT,\r
+       AREA_ID_ESTONIA,\r
+       AREA_ID_FINLAND,\r
+       AREA_ID_FRANCE_INC_GUADELOUPE,\r
+       AREA_ID_GEORGIA,\r
+       AREA_ID_GERMANY,\r
+       AREA_ID_GREECE,\r
+       AREA_ID_HAITI,\r
+       AREA_ID_HONDURAS,\r
+       AREA_ID_HONG_KONG,\r
+       AREA_ID_HUNGARY,\r
+       AREA_ID_ICELAND,\r
+       AREA_ID_INDIA,\r
+       AREA_ID_INDONESIA,\r
+       AREA_ID_IRELAND,\r
+       AREA_ID_ISRAEL,\r
+       AREA_ID_ITALY,\r
+       AREA_ID_JAMAICA,\r
+       AREA_ID_JAPAN,\r
+       AREA_ID_JORDAN,\r
+       AREA_ID_KAZAKHSTAN,\r
+       AREA_ID_KENYA,\r
+       AREA_ID_KOREA_SOUTH,\r
+       AREA_ID_KUWAIT,\r
+       AREA_ID_LATVIA,\r
+       AREA_ID_LEBANON,\r
+       AREA_ID_LITHUANIA,\r
+       AREA_ID_LUXEMBOURG,\r
+       AREA_ID_MACEDONIA,\r
+       AREA_ID_MALAYSIA,\r
+       AREA_ID_MEXICO,\r
+       AREA_ID_MOLDOVA,\r
+       AREA_ID_MOROCCO,\r
+       AREA_ID_NEPAL,\r
+       AREA_ID_NETHERLAND_ANTILLES,\r
+       AREA_ID_NETHERLANDS_INC_BONAIRE,\r
+       AREA_ID_NEW_ZEALAND,\r
+       AREA_ID_NIGERIA,\r
+       AREA_ID_NORWAY,\r
+       AREA_ID_OMAN,\r
+       AREA_ID_PAKISTAN,\r
+       AREA_ID_PARAGUAY,\r
+       AREA_ID_PERU,\r
+       AREA_ID_PHILIPPINES,\r
+       AREA_ID_POLAND,\r
+       AREA_ID_PORTUGAL,\r
+       AREA_ID_QATAR,\r
+       AREA_ID_ROMANIA,\r
+       AREA_ID_RUSSIA,\r
+       AREA_ID_SAUDI_ARABIA,\r
+       AREA_ID_SERBIA,\r
+       AREA_ID_SINGAPORE,\r
+       AREA_ID_SLOVAKIA,\r
+       AREA_ID_SLOVENIA,\r
+       AREA_ID_SOUTH_AFRICA,\r
+       AREA_ID_SPAIN,\r
+       AREA_ID_SRI_LANKA,\r
+       AREA_ID_SWEDEN,\r
+       AREA_ID_SWITZERLAND,\r
+       AREA_ID_TAIWAN,\r
+       AREA_ID_THAILAND,\r
+       AREA_ID_TRINIDAD_TOBAGO,\r
+       AREA_ID_TUNISIA,\r
+       AREA_ID_TURKEY,\r
+       AREA_ID_TURKMENISTAN,\r
+       AREA_ID_UGANDA,\r
+       AREA_ID_UKRAINE,\r
+       AREA_ID_UNITED_KINGDOM,\r
+       AREA_ID_UNITED_STATES,\r
+       AREA_ID_URUGUAY,\r
+       AREA_ID_UZBEKISTAN,\r
+       AREA_ID_VENEZUELA,\r
+       AREA_ID_VIETNAM,\r
+       AREA_ID_NORDICS,\r
+       AREA_ID_BALTIC,\r
+       AREA_ID_CZECH_SLOVAKIA,\r
+       AREA_ID_CROATIA_SLOVENIA,\r
+       AREA_ID_LA_GROUP,\r
+       AREA_ID_UNITED_ARAB_EMIRATES,\r
+       AREA_ID_EMAT_UK,\r
+       AREA_ID_EMAT_FR,\r
+       AREA_ID_EMAT_PO,\r
+       AREA_ID_INDIA_HI,\r
+       AREA_ID_UAE_EN,\r
+       AREA_ID_ISRAEL_AR,\r
+       AREA_ID_NETHERLANDS_INC_BONAIRE_ENUS,\r
+       AREA_ID_NUMS,\r
+};\r
+\r
+#define DEVICE_TYPE_VALID      0xff\r
+#define DEVICE_TYPE_INVALID    -1\r
+\r
+#define DEVICE_ID_VALID        0xff\r
+#define DEVICE_ID_INVALID      -1\r
+\r
+#define DEVICE_ID_NULL                 0\r
+\r
+enum id_mm_type{\r
+       BID_MM_IOMEM,\r
+       BID_MM_IOREMAP,\r
+};\r
+\r
+\r
+enum id_tp{    \r
+       TP_ID_NULL = 0,\r
+       TP_ID_GT813,\r
+       TP_ID_EKTF2K,\r
+       TP_ID_NUMS,\r
+};\r
+\r
+enum id_lcd{\r
+       LCD_ID_NULL = 0,\r
+       LCD_ID_IVO_M101_NWN8,   \r
+       LCD_ID_EDID_I2C,\r
+       LCD_ID_NUMS,\r
+};\r
+\r
+enum id_key{\r
+       KEY_ID_NULL = 0,\r
+       KEY_ID_SHUTTLE,\r
+       KEY_ID_BITLAND,\r
+       KEY_ID_MALATA,\r
+       KEY_ID_CAPSENSE,\r
+       KEY_ID_ENGLISH_US,\r
+       KEY_ID_ENGLISH_UK,\r
+       KEY_ID_TURKISH,\r
+       KEY_ID_SLOVENIAN,\r
+       KEY_ID_RUSSIAN,\r
+       KEY_ID_CZECH,\r
+       KEY_ID_HUNGARIAN,\r
+       KEY_ID_HINDI,\r
+       KEY_ID_THAI,\r
+       KEY_ID_PORTUGUESE,\r
+       KEY_ID_ARABIC,\r
+       KEY_ID_GREEK,\r
+       KEY_ID_SWEDISH,\r
+       KEY_ID_NORWEGIAN,\r
+       KEY_ID_FINNISH,\r
+       KEY_ID_DANISH,\r
+       KEY_ID_ESTONIAN,\r
+       KEY_ID_FRENCH,\r
+       KEY_ID_GERMAN,\r
+       KEY_ID_HEBREW,\r
+       KEY_ID_ITALIAN,\r
+       KEY_ID_SPANISH,\r
+       KEY_ID_SWISS,\r
+       KEY_ID_DUTCH,\r
+       KEY_ID_BELGIAN,\r
+       KEY_ID_NORDIC,\r
+       KEY_ID_NUMS,\r
+};\r
+\r
+enum id_codec{\r
+       CODEC_ID_NULL = 0,\r
+       CODEC_ID_WM8994,\r
+       CODEC_ID_WM8900,\r
+       CODEC_ID_WM8988,\r
+       CODEC_ID_RT5616,        \r
+       CODEC_ID_RT5621,\r
+       CODEC_ID_RT5623,\r
+       CODEC_ID_RT3224,        \r
+       CODEC_ID_RT5625,        \r
+       CODEC_ID_RT5631,\r
+       CODEC_ID_RT5639,        \r
+       CODEC_ID_RT5640,\r
+       CODEC_ID_RT5642,        \r
+       CODEC_ID_RT3261,\r
+       CODEC_ID_AIC3262,\r
+       CODEC_ID_RK610,\r
+       CODEC_ID_RK616, \r
+       CODEC_ID_RK1000,\r
+       CODEC_ID_CS42L52,\r
+       CODEC_ID_ES8323,\r
+       CODEC_ID_NUMS,\r
+};\r
+\r
+\r
+enum id_wifi{\r
+       WIFI_ID_NULL = 0,\r
+               \r
+       //brcm wifi\r
+       WIFI_ID_BCM,\r
+       WIFI_ID_BCM4319,\r
+       WIFI_ID_BCM4330,\r
+       WIFI_ID_RK903_26M,\r
+       WIFI_ID_RK903_37M,\r
+        WIFI_ID_BCM4329,\r
+        WIFI_ID_RK901,\r
+        WIFI_ID_AP6181,\r
+        WIFI_ID_AP6210,\r
+        WIFI_ID_AP6330,\r
+        WIFI_ID_AP6476,\r
+        WIFI_ID_AP6493,\r
+        WIFI_ID_GB86302I,\r
+\r
+       //RealTek wifi\r
+       WIFI_ID_RTL8192CU,\r
+       WIFI_ID_RTL8188EU,\r
+       WIFI_ID_RTL8723AU,\r
+\r
+       //Mediatek wifi\r
+       WIFI_ID_COMBO,\r
+       WIFI_ID_MT5931,\r
+        WIFI_ID_RT5370,\r
+       WIFI_ID_NUMS,\r
+};\r
+\r
+\r
+enum id_bt{\r
+       BT_ID_NULL = 0,\r
+               \r
+       //brcm bluetooth\r
+       BT_ID_NH660,\r
+       BT_ID_BCM4330,\r
+       BT_ID_RK903_26M,\r
+       BT_ID_RK903,\r
+       BT_ID_BCM4329,\r
+       BT_ID_MV8787,\r
+       BT_ID_AP6210,\r
+       BT_ID_AP6330,\r
+       BT_ID_AP6476,\r
+       BT_ID_AP6493,\r
+       BT_ID_RFKILL,\r
+       \r
+       //REALTEK bluetooth\r
+       BT_ID_RTL8723,\r
+\r
+       //MTK bluetooth\r
+       BT_ID_MT6622,\r
+\r
+       //RDA bluetooth\r
+\r
+       BT_ID_NUMS,\r
+};\r
+\r
+\r
+enum id_gps{\r
+       GPS_ID_NULL = 0,\r
+       GPS_ID_RK_HV5820,\r
+       GPS_ID_BCM4751,\r
+       GPS_ID_GNS7560, \r
+       GPS_ID_MT3326,\r
+       GPS_ID_NUMS,\r
+};\r
+\r
+enum id_fm{\r
+       FM_ID_NULL = 0,\r
+       FM_ID_NUMS,\r
+};\r
+\r
+//include/linux/bp-auto.h\r
+enum id_modem\r
+{\r
+        MODEM_ID_NULL = 0,\r
+        MODEM_ID_MT6229,       //USI MT6229 WCDMA\r
+        MODEM_ID_MU509,                //huawei MU509 WCDMA\r
+        MODEM_ID_MI700,                //thinkwill MI700 WCDMA\r
+        MODEM_ID_MW100,                //thinkwill MW100 WCDMA\r
+        MODEM_ID_TD8801,       //spreadtrum SC8803 TD-SCDMA\r
+        MODEM_ID_SC6610,       //spreadtrum SC6610 GSM\r
+        MODEM_ID_M50,          //spreadtrum RDA GSM\r
+        MODEM_ID_MT6250,       //ZINN M50  EDGE\r
+        MODEM_ID_C66A,         //zhongben\r
+        MODEM_ID_NUMS,\r
+};\r
+\r
+       \r
+enum id_ddr{\r
+       DDR_ID_NULL = 0,\r
+       DDR_ID_NUMS,\r
+};\r
+\r
+enum id_flash{\r
+       FLASH_ID_NULL = 0,\r
+       FLASH_ID_NUMS,\r
+};\r
+\r
+enum id_hdmi{\r
+       HDMI_ID_NULL = 0,\r
+       HDMI_ID_RK30,\r
+       HDMI_ID_CAT66121,\r
+       HDMI_ID_RK610,\r
+       HDMI_ID_NUMS,\r
+};\r
+\r
+enum id_battery{\r
+       BATTERY_ID_NULL = 0,\r
+       BATTERY_ID_3300MAH,     \r
+       BATTERY_ID_3600MAH,     \r
+       BATTERY_ID_4700MAH,     \r
+       BATTERY_ID_7000MAH,     \r
+       BATTERY_ID_7700MAH,\r
+       BATTERY_ID_9000MAH,\r
+       BATTERY_ID_BLUEBERRY,\r
+       BATTERY_ID_NUMS,\r
+};\r
+\r
+enum id_charge{\r
+       CHARGE_ID_NULL = 0,\r
+       CHARGE_ID_CW2015,       \r
+       CHARGE_ID_BQ24193,\r
+       CHARGE_ID_BQ27541,\r
+       CHARGE_ID_OZ8806,\r
+       CHARGE_ID_NUMS,\r
+};\r
+       \r
+enum id_backlight{\r
+       BACKLIGHT_ID_NULL = 0,\r
+       BACKLIGHT_ID_RK29,\r
+       BACKLIGHT_ID_WM831X,\r
+       BACKLIGHT_ID_NUMS,\r
+};\r
+\r
+enum id_headset{\r
+       HEADSET_ID_NULL = 0,\r
+       HEADSET_ID_RK29,\r
+       HEADSET_ID_NUMS,\r
+};\r
+\r
+enum id_micphone{\r
+       MICPHONE_ID_NULL = 0,\r
+       MICPHONE_ID_ANALOGIC,\r
+       MICPHONE_ID_DIGITAL,\r
+       MICPHONE_ID_NUMS,\r
+};\r
+\r
+enum id_speaker{\r
+       SPEAKER_ID_NULL = 0,\r
+       SPEAKER_ID_0W8,\r
+       SPEAKER_ID_1W0,\r
+       SPEAKER_ID_1W5,\r
+       SPEAKER_ID_NUMS,\r
+};\r
+\r
+enum id_vibrator{\r
+       VIBRATOR_ID_NULL = 0,\r
+       VIBRATOR_ID_RK29,\r
+       VIBRATOR_ID_NUMS,\r
+};\r
+\r
+enum id_tv{\r
+       TV_ID_NULL = 0,\r
+       TV_ID_RK610,\r
+       TV_ID_NUMS,\r
+};\r
+       \r
+enum id_echip{\r
+       ECHIP_ID_NULL = 0,\r
+       ECHIP_ID_IT8561,        \r
+       ECHIP_ID_ITE,\r
+       ECHIP_ID_NUMS,\r
+};\r
+\r
+enum id_hub{\r
+       HUB_ID_NULL = 0,\r
+       HUB_ID_USB4604, \r
+       HUB_ID_NUMS,\r
+};\r
+\r
+enum id_tpad{\r
+       TPAD_ID_NULL = 0,\r
+       TPAD_ID_ELAN,   \r
+       TPAD_ID_SYNS,\r
+       TPAD_ID_NUMS,\r
+};     \r
+       \r
+enum id_pmic{\r
+       PMIC_ID_NULL = 0,\r
+       PMIC_ID_WM831X,\r
+       PMIC_ID_WM8326,\r
+       PMIC_ID_TPS65910,\r
+       PMIC_ID_ACT8846,\r
+       PMIC_ID_NUMS,\r
+};\r
+\r
+enum id_regulator{\r
+       REGULATOR_ID_NULL = 0,\r
+       REGULATOR_ID_PWM3,\r
+       REGULATOR_ID_NUMS,\r
+};\r
+\r
+enum id_rtc{\r
+       RTC_ID_NULL = 0,\r
+       RTC_ID_HYM8563,\r
+       RTC_ID_PCF8563,\r
+       RTC_ID_TPS65910,\r
+       RTC_ID_WM8326,\r
+       RTC_ID_RK,\r
+       RTC_ID_NUMS,\r
+};\r
+\r
+enum id_camera_front{\r
+       CAMERA_FRONT_ID_NULL = 0,\r
+       CAMERA_FRONT_ID_NUMS,\r
+};\r
+\r
+enum id_camera_back{\r
+       CAMERA_BACK_ID_NULL = 0,\r
+       CAMERA_BACK_ID_NUMS,\r
+};\r
+       \r
+enum id_sensor_angle{\r
+       ANGLE_ID_NULL = 0,\r
+       ANGLE_ID_NUMS,\r
+};\r
+\r
+enum id_sensor_accel{\r
+       ACCEL_ID_NULL = 0,\r
+       ACCEL_ID_NUMS,\r
+};\r
+\r
+enum id_sensor_compass{\r
+       COMPASS_ID_NULL = 0,\r
+       COMPASS_ID_NUMS,\r
+};\r
+\r
+enum id_sensor_gyro{\r
+       GYRO_ID_NULL = 0,\r
+       GYRO_ID_NUMS,\r
+};\r
+\r
+enum id_sensor_light{\r
+       LIGHT_ID_NULL = 0,\r
+       LIGHT_ID_NUMS,\r
+};\r
+\r
+enum id_sensor_proximity{\r
+       PROXIMITY_ID_NULL = 0,\r
+       PROXIMITY_ID_NUMS,\r
+};\r
+\r
+enum id_sensor_temperature{\r
+       TEMPERATURE_ID_NULL = 0,\r
+       TEMPERATURE_ID_NUMS,\r
+};\r
+       \r
+enum id_sensor_pressure{\r
+       PRESSURE_ID_NULL = 0,\r
+       PRESSURE_ID_NUMS,\r
+};\r
+\r
+enum id_led{\r
+       LED_ID_NULL = 0,\r
+       LED_ID_NUMS,\r
+};\r
+\r
+\r
+#define COUNTRY_AREA_NULL              "no"\r
+#define LOCALE_LANGUAGE_NULL   "no"\r
+#define LOCALE_REGION_NULL             "no"\r
+#define COUNTRY_GEO_NULL               "no"\r
+#define TIME_ZONE_NULL                 "no"\r
+#define USER_DEFINE_NULL               "no"\r
+\r
+\r
+#define LOCALE_LANGUAGE_AR        "ar" //°¢À­²®ÎÄ\r
+#define LOCALE_LANGUAGE_BE        "be" //°×¶íÂÞ˹ÎÄ\r
+#define LOCALE_LANGUAGE_BG        "bg" //±£¼ÓÀûÑÇÎÄ\r
+#define LOCALE_LANGUAGE_CA        "ca" //¼ÓÌ©ÂÞÄáÑÇÎÄ\r
+#define LOCALE_LANGUAGE_CS        "cs" //½Ý¿ËÎÄ\r
+#define LOCALE_LANGUAGE_DA        "da" //µ¤ÂóÎÄ\r
+#define LOCALE_LANGUAGE_DE        "de" //µÂÎÄ\r
+#define LOCALE_LANGUAGE_EL        "el" //Ï£À°ÎÄ\r
+#define LOCALE_LANGUAGE_EN        "en" //Ó¢ÎÄ\r
+#define LOCALE_LANGUAGE_ES        "es" //Î÷°àÑÀÎÄ\r
+#define LOCALE_LANGUAGE_ET        "et" //°®É³ÄáÑÇÎÄ\r
+#define LOCALE_LANGUAGE_FI        "fi" //·ÒÀ¼ÎÄ\r
+#define LOCALE_LANGUAGE_FR        "fr" //·¨ÎÄ\r
+#define LOCALE_LANGUAGE_HR        "hr" //¿ËÂÞµØÑÇÎÄ\r
+#define LOCALE_LANGUAGE_HU        "hu" //ÐÙÑÀÀûÎÄ\r
+#define LOCALE_LANGUAGE_IN        "in" //Ó¡¶ÈÄáÎ÷ÑÇÎÄ(Ó¡¶ÈÄáÎ÷ÑÇ)\r
+#define LOCALE_LANGUAGE_IS        "is" //±ùµºÎÄ\r
+#define LOCALE_LANGUAGE_IT        "it" //Òâ´óÀûÎÄ\r
+#define LOCALE_LANGUAGE_IW        "iw" //Ï£²®À´ÎÄ\r
+#define LOCALE_LANGUAGE_JA        "ja" //ÈÕÎÄ\r
+#define LOCALE_LANGUAGE_KO        "ko" //³¯ÏÊÎÄ\r
+#define LOCALE_LANGUAGE_LT        "lt" //Á¢ÌÕÍðÎÄ\r
+#define LOCALE_LANGUAGE_LV        "lv" //À­ÍÐάÑÇÎÄ(ÁÐÍÐ)\r
+#define LOCALE_LANGUAGE_MK        "mk" //ÂíÆä¶ÙÎÄ\r
+#define LOCALE_LANGUAGE_MS        "ms" //ÂíÀ´Î÷ÑÇÓï(ÂíÀ´Î÷ÑÇ)\r
+#define LOCALE_LANGUAGE_NL        "nl" //ºÉÀ¼ÎÄ\r
+#define LOCALE_LANGUAGE_NO        "no" //ŲÍþÎÄ\r
+#define LOCALE_LANGUAGE_PL        "pl" //²¨À¼ÎÄ\r
+#define LOCALE_LANGUAGE_PT        "pt" //ÆÏÌÑÑÀÎÄ\r
+#define LOCALE_LANGUAGE_RO        "ro" //ÂÞÂíÄáÑÇÎÄ\r
+#define LOCALE_LANGUAGE_RU        "ru" //¶íÎÄ\r
+#define LOCALE_LANGUAGE_SH        "sh" //Èû²¨Äá˹-¿ËÂÞµØÑÇÎÄ\r
+#define LOCALE_LANGUAGE_SK        "sk" //˹Âå·¥¿ËÎÄ\r
+#define LOCALE_LANGUAGE_SL        "sl" //˹ÂåÎÄÄáÑÇÎÄ\r
+#define LOCALE_LANGUAGE_SQ        "sq" //°¢¶û°ÍÄáÑÇÎÄ\r
+#define LOCALE_LANGUAGE_SR        "sr" //Èû¶ûάÑÇÎÄ\r
+#define LOCALE_LANGUAGE_SV        "sv" //ÈðµäÎÄ\r
+#define LOCALE_LANGUAGE_SW        "sw" //˹ÍßÏ£ÀïÓï(¿ÏÄáÑÇ)\r
+#define LOCALE_LANGUAGE_TH        "th" //Ì©ÎÄ\r
+#define LOCALE_LANGUAGE_TL        "tl" //·ÆÂɱöÓï(·ÆÂɱö)\r
+#define LOCALE_LANGUAGE_TR        "tr" //ÍÁ¶úÆäÎÄ\r
+#define LOCALE_LANGUAGE_UK        "uk" //ÎÚ¿ËÀ¼ÎÄ\r
+#define LOCALE_LANGUAGE_VI        "vi" //Ô½ÄÏÓï(Ô½ÄÏ)\r
+#define LOCALE_LANGUAGE_ZH        "zh" //ÖÐÎÄ \r
+\r
+\r
+#define LOCALE_REGION_AE        "AE" // °¢À­²®ÎÄ (°¢À­²®ÁªºÏÇõ³¤¹ú) \r
+#define LOCALE_REGION_AL        "AL" // °¢¶û°ÍÄáÑÇÎÄ (°¢¶û°ÍÄáÑÇ)\r
+#define LOCALE_REGION_AN        "AN" //Netherland Antilles\r
+#define LOCALE_REGION_AO        "AO" //Angola\r
+#define LOCALE_REGION_AR        "AR" // Î÷°àÑÀÎÄ (°¢¸ùÍ¢) \r
+#define LOCALE_REGION_AT        "AT" // µÂÎÄ (°ÂµØÀû) \r
+#define LOCALE_REGION_AT_EURO   "AT_EURO" // µÂÎÄ (°ÂµØÀû EURO) \r
+#define LOCALE_REGION_AU        "AU" // Ó¢ÎÄ (°Ä´óÀûÑÇ) \r
+#define LOCALE_REGION_AZ        "AZ" //Azerbaijan\r
+#define LOCALE_REGION_BA        "BA" //Bosnia and Herzegovina\r
+#define LOCALE_REGION_BB        "BB" //Barbados\r
+#define LOCALE_REGION_BD        "BD" //Bangladesh\r
+#define LOCALE_REGION_BE        "BE" // ·¨ÎÄ (±ÈÀûʱ) \r
+#define LOCALE_REGION_BE_EURO   "BE_EURO" // ·¨ÎÄ (±ÈÀûʱ EURO) \r
+#define LOCALE_REGION_BG        "BG" // ±£¼ÓÀûÑÇÎÄ (±£¼ÓÀûÑÇ)\r
+#define LOCALE_REGION_BH        "BH" // °¢À­²®ÎÄ (°ÍÁÖ) \r
+#define LOCALE_REGION_BO        "BO" // Î÷°àÑÀÎÄ (²£ÀûάÑÇ) \r
+#define LOCALE_REGION_BR        "BR" // ÆÏÌÑÑÀÎÄ (°ÍÎ÷) \r
+#define LOCALE_REGION_BW        "BW" //Botswana\r
+#define LOCALE_REGION_BY        "BY" // °×¶íÂÞ˹ÎÄ (°×¶íÂÞ˹)\r
+#define LOCALE_REGION_CA        "CA" // Ó¢ÎÄ (¼ÓÄôó) \r
+#define LOCALE_REGION_CH        "CH" // µÂÎÄ (ÈðÊ¿) \r
+#define LOCALE_REGION_CI        "CI" //Cote d'Ivoire\r
+#define LOCALE_REGION_CL        "CL" // Î÷°àÑÀÎÄ (ÖÇÀû) \r
+#define LOCALE_REGION_CN        "CN" // ÖÐÎÄ (Öйú) \r
+#define LOCALE_REGION_CO        "CO" // Î÷°àÑÀÎÄ (¸çÂ×±ÈÑÇ) \r
+#define LOCALE_REGION_CR        "CR" // Î÷°àÑÀÎÄ (¸ç˹´ïÀè¼Ó) \r
+#define LOCALE_REGION_CS        "CS" //Serbia\r
+#define LOCALE_REGION_CY        "CY" //Cyprus\r
+#define LOCALE_REGION_CZ        "CZ" // ½Ý¿ËÎÄ (½Ý¿Ë¹²ºÍ¹ú)\r
+#define LOCALE_REGION_DE        "DE" // µÂÎÄ (µÂ¹ú) \r
+#define LOCALE_REGION_DE_EURO   "DE_EURO" // µÂÎÄ (µÂ¹ú EURO) \r
+#define LOCALE_REGION_DK        "DK" // µ¤ÂóÎÄ (µ¤Âó)\r
+#define LOCALE_REGION_DO        "DO" // Î÷°àÑÀÎÄ (¶àÃ×Äá¼Ó¹²ºÍ¹ú) \r
+#define LOCALE_REGION_DZ        "DZ" // °¢À­²®ÎÄ (°¢¶û¼°ÀûÑÇ) \r
+#define LOCALE_REGION_EC        "EC" // Î÷°àÑÀÎÄ (¶ò¹Ï¶à¶û) \r
+#define LOCALE_REGION_EE        "EE" // °®É³ÄáÑÇÎÄ (°®É³ÄáÑÇ)\r
+#define LOCALE_REGION_EG        "EG" // °¢À­²®ÎÄ (°£¼°) \r
+#define LOCALE_REGION_ES        "ES" // Î÷°àÑÀÎÄ (Î÷°àÑÀ) \r
+#define LOCALE_REGION_ES_EURO   "ES_EURO" // Î÷°àÑÀÎÄ (Î÷°àÑÀ EURO) \r
+#define LOCALE_REGION_FI        "FI" // ·ÒÀ¼ÎÄ (·ÒÀ¼) \r
+#define LOCALE_REGION_FI_EURO   "FI_EURO" // ·ÒÀ¼ÎÄ (·ÒÀ¼ EURO)\r
+#define LOCALE_REGION_FR        "FR" // ·¨ÎÄ (·¨¹ú) \r
+#define LOCALE_REGION_FR_EURO   "FR_EURO" // ·¨ÎÄ (·¨¹ú EURO) \r
+#define LOCALE_REGION_GB        "GB" // Ó¢ÎÄ (Ó¢¹ú) \r
+#define LOCALE_REGION_GE        "GE" //Georgia\r
+#define LOCALE_REGION_GR        "GR" // Ï£À°ÎÄ (Ï£À°) \r
+#define LOCALE_REGION_GT        "GT" // Î÷°àÑÀÎÄ (ΣµØÂíÀ­) \r
+#define LOCALE_REGION_HK        "HK" // ÖÐÎÄ (Ïã¸Û) \r
+#define LOCALE_REGION_HN        "HN" // Î÷°àÑÀÎÄ (ºé¶¼À­Ë¹) \r
+#define LOCALE_REGION_HR        "HR" // ¿ËÂÞµØÑÇÎÄ (¿ËÂÞµØÑÇ)\r
+#define LOCALE_REGION_HT        "HT" //Haiti\r
+#define LOCALE_REGION_HU        "HU" // ÐÙÑÀÀûÎÄ (ÐÙÑÀÀû)\r
+#define LOCALE_REGION_ID        "ID" //Indonesia\r
+#define LOCALE_REGION_IE        "IE" // Ó¢ÎÄ (°®¶ûÀ¼) \r
+#define LOCALE_REGION_IE_EURO   "IE_EURO" // Ó¢ÎÄ (°®¶ûÀ¼ EURO) \r
+#define LOCALE_REGION_IL        "IL" // Ï£²®À´ÎÄ (ÒÔÉ«ÁÐ)\r
+#define LOCALE_REGION_IN        "IN" //India\r
+#define LOCALE_REGION_IQ        "IQ" // °¢À­²®ÎÄ (ÒÁÀ­¿Ë) \r
+#define LOCALE_REGION_IS        "IS" // ±ùµºÎÄ (±ùµº)\r
+#define LOCALE_REGION_IT        "IT" // Òâ´óÀûÎÄ (Òâ´óÀû) \r
+#define LOCALE_REGION_IT_EURO   "IT_EURO" // Òâ´óÀûÎÄ (Òâ´óÀû EURO)\r
+#define LOCALE_REGION_JM        "JM" //Jamaica\r
+#define LOCALE_REGION_JO        "JO" // °¢À­²®ÎÄ (Ô¼µ©) \r
+#define LOCALE_REGION_JP        "JP" // ÈÕÎÄ (ÈÕ±¾)\r
+#define LOCALE_REGION_KE        "KE" //Kenya\r
+#define LOCALE_REGION_KR        "KR" // ³¯ÏÊÎÄ (Äϳ¯ÏÊ)\r
+#define LOCALE_REGION_KW        "KW" // °¢À­²®ÎÄ (¿ÆÍþÌØ) \r
+#define LOCALE_REGION_KZ        "KZ" //Kazakhstan\r
+#define LOCALE_REGION_LB        "LB" // °¢À­²®ÎÄ (Àè°ÍÄÛ) \r
+#define LOCALE_REGION_LK        "LK" //Sri Lanka\r
+#define LOCALE_REGION_LT        "LT" // Á¢ÌÕÍðÎÄ (Á¢ÌÕÍð)\r
+#define LOCALE_REGION_LU        "LU" // µÂÎÄ (¬ɭ±¤) \r
+#define LOCALE_REGION_LU_EURO   "LU_EURO" // µÂÎÄ (¬ɭ±¤ EURO)\r
+#define LOCALE_REGION_LV        "LV" // À­ÍÐάÑÇÎÄ(ÁÐÍÐ) (À­ÍÑάÑÇ)\r
+#define LOCALE_REGION_LY        "LY" // °¢À­²®ÎÄ (Àû±ÈÑÇ) \r
+#define LOCALE_REGION_MA        "MA" // °¢À­²®ÎÄ (ĦÂå¸ç) \r
+#define LOCALE_REGION_MD        "MD" //Moldova\r
+#define LOCALE_REGION_MK        "MK" // ÂíÆä¶ÙÎÄ (ÂíÆä¶ÙÍõ¹ú)\r
+#define LOCALE_REGION_MX        "MX" // Î÷°àÑÀÎÄ (Ä«Î÷¸ç) \r
+#define LOCALE_REGION_MY        "MY" //Malaysia\r
+#define LOCALE_REGION_NG        "NG" //Nigeria\r
+#define LOCALE_REGION_NI        "NI" // Î÷°àÑÀÎÄ (Äá¼ÓÀ­¹Ï) \r
+#define LOCALE_REGION_NL        "NL" // ºÉÀ¼ÎÄ (ºÉÀ¼) \r
+#define LOCALE_REGION_NL_EURO   "NL_EURO " // ºÉÀ¼ÎÄ (ºÉÀ¼ EURO)\r
+#define LOCALE_REGION_NO        "NO" // Å²ÍþÎÄ (ŲÍþ) \r
+#define LOCALE_REGION_NP        "NP" //Nepal\r
+#define LOCALE_REGION_NY        "NO_NY" // Å²ÍþÎÄ (ŲÍþ NYNORSK)\r
+#define LOCALE_REGION_NZ        "NZ" // Ó¢ÎÄ (ÐÂÎ÷À¼) \r
+#define LOCALE_REGION_OM        "QM" // °¢À­²®ÎÄ (°¢Âü) \r
+#define LOCALE_REGION_PA        "PA" // Î÷°àÑÀÎÄ (°ÍÄÃÂí) \r
+#define LOCALE_REGION_PE        "PE" // Î÷°àÑÀÎÄ (Ãس) \r
+#define LOCALE_REGION_PH        "PH" //Philippines\r
+#define LOCALE_REGION_PK        "PK" //Pakistan\r
+#define LOCALE_REGION_PL        "PL" // ²¨À¼ÎÄ (²¨À¼) \r
+#define LOCALE_REGION_PR        "PR" // Î÷°àÑÀÎÄ (²¨¶àÀè¸ç) \r
+#define LOCALE_REGION_PT        "PT" // ÆÏÌÑÑÀÎÄ (ÆÏÌÑÑÀ) \r
+#define LOCALE_REGION_PT_EURO   "PT_EURO" // ÆÏÌÑÑÀÎÄ (ÆÏÌÑÑÀ EURO)\r
+#define LOCALE_REGION_PY        "PY" // Î÷°àÑÀÎÄ (°ÍÀ­¹ç) \r
+#define LOCALE_REGION_QA        "QA" // °¢À­²®ÎÄ (¿¨Ëþ¶û) \r
+#define LOCALE_REGION_RO        "RO" // ÂÞÂíÄáÑÇÎÄ (ÂÞÂíÄáÑÇ) \r
+#define LOCALE_REGION_RU        "RU" // ¶íÎÄ (¶íÂÞ˹)\r
+#define LOCALE_REGION_SA        "SA" // °¢À­²®ÎÄ (ɳÌØ°¢À­²®) \r
+#define LOCALE_REGION_SD        "SD" // °¢À­²®ÎÄ (ËÕµ¤) \r
+#define LOCALE_REGION_SE        "SE" // ÈðµäÎÄ (Èðµä)\r
+#define LOCALE_REGION_SG        "SG" //Singapore\r
+#define LOCALE_REGION_SI        "SI" // Ë¹ÂåÎÄÄáÑÇÎÄ (˹ÂåÎÄÄáÑÇ)\r
+#define LOCALE_REGION_SK        "SK" // Ë¹Âå·¥¿ËÎÄ (˹Âå·¥¿Ë)\r
+#define LOCALE_REGION_SV        "SV" // Î÷°àÑÀÎÄ (Èø¶ûÍ߶à) \r
+#define LOCALE_REGION_SY        "SY" // °¢À­²®ÎÄ (ÐðÀûÑÇ) \r
+#define LOCALE_REGION_TH        "TH" // Ì©ÎÄ (Ì©¹ú)\r
+#define LOCALE_REGION_TM        "TM" //Turkmenistan\r
+#define LOCALE_REGION_TN        "TN" // °¢À­²®ÎÄ (Í»Äá˹) \r
+#define LOCALE_REGION_TR        "TR" // ÍÁ¶úÆäÎÄ (ÍÁ¶úÆä) \r
+#define LOCALE_REGION_TT        "TT" //Trinidad Tobago\r
+#define LOCALE_REGION_TW        "TW" // ÖÐÎÄ (̨Íå)\r
+#define LOCALE_REGION_UA        "UA" // ÎÚ¿ËÀ¼ÎÄ (ÎÚ¿ËÀ¼)\r
+#define LOCALE_REGION_UG        "UG" //Uganda\r
+#define LOCALE_REGION_US        "US" // Ó¢ÎÄ (ÃÀ¹ú)\r
+#define LOCALE_REGION_UY        "UY" // Î÷°àÑÀÎÄ (ÎÚÀ­¹ç) \r
+#define LOCALE_REGION_UZ        "UZ" //Uzbekistan\r
+#define LOCALE_REGION_VE        "VE" // Î÷°àÑÀÎÄ (ίÄÚÈðÀ­) \r
+#define LOCALE_REGION_VN        "VN" //Vietnam\r
+#define LOCALE_REGION_YE        "YE" // °¢À­²®ÎÄ (Ò²ÃÅ)\r
+#define LOCALE_REGION_YU        "YU" // Èû¶ûάÑÇÎÄ (ÄÏ˹À­·ò)\r
+#define LOCALE_REGION_ZA        "ZA" // Ó¢ÎÄ (ÄÏ·Ç)\r
+\r
+\r
+#define TIME_ZONE_MARSHALL_ISLANDS             "Pacific/Majuro"\r
+#define TIME_ZONE_MIDWAY_ISLAND                        "Pacific/Midway"\r
+#define TIME_ZONE_HAWAII                       "Pacific/Honolulu"\r
+#define TIME_ZONE_ALASKA                       "America/Anchorage"\r
+#define TIME_ZONE_PACIFIC_TIME                 "America/Los_Angeles"\r
+#define TIME_ZONE_TIJUANA                      "America/Tijuana" \r
+#define TIME_ZONE_ARIZONA                      "America/Phoenix" \r
+#define TIME_ZONE_CHIHUAHUA                    "America/Chihuahua" \r
+#define TIME_ZONE_MOUNTAIN_TIME                        "America/Denver" \r
+#define TIME_ZONE_CENTRAL_AMERICA              "America/Costa_Rica" \r
+#define TIME_ZONE_CENTRAL_TIME                 "America/Chicago" \r
+#define TIME_ZONE_MEXICO_CITY                  "America/Mexico_City" \r
+#define TIME_ZONE_SASKATCHEWAN                 "America/Regina" \r
+#define TIME_ZONE_BOGOTA                       "America/Bogota" \r
+#define TIME_ZONE_EASTERN_TIME                 "America/New_York" \r
+#define TIME_ZONE_VENEZUELA                    "America/Caracas" \r
+#define TIME_ZONE_ATLANTIC_TIME_BARBADOS       "America/Barbados" \r
+#define TIME_ZONE_ATLANTIC_TIME_CANADA         "America/Halifax"\r
+#define TIME_ZONE_MANAUS                       "America/Manaus"\r
+#define TIME_ZONE_SANTIAGO                     "America/Santiago"\r
+#define TIME_ZONE_NEWFOUNDLAND                 "America/St_Johns"\r
+#define TIME_ZONE_BRASILIA                     "America/Sao_Paulo"\r
+#define TIME_ZONE_BUENOS_AIRES                 "America/Argentina/Buenos_Aires"\r
+#define TIME_ZONE_GREENLAND                    "America/Godthab"\r
+#define TIME_ZONE_MONTEVIDEO                   "America/Montevideo"\r
+#define TIME_ZONE_MID_ATLANTIC                 "Atlantic/South_Georgia"\r
+#define TIME_ZONE_AZORES                       "Atlantic/Azores"\r
+#define TIME_ZONE_CAPE_VERDE_ISLANDS           "Atlantic/Cape_Verde"\r
+#define TIME_ZONE_CASABLANCA                   "Africa/Casablanca"\r
+#define TIME_ZONE_LONDON_DUBLIN                        "Europe/London"\r
+#define TIME_ZONE_AMSTERDAM_BERLIN             "Europe/Amsterdam" \r
+#define TIME_ZONE_BELGRADE                     "Europe/Belgrade"\r
+#define TIME_ZONE_BRUSSELS                     "Europe/Brussels"\r
+#define TIME_ZONE_SARAJEVO                     "Europe/Sarajevo"\r
+#define TIME_ZONE_WINDHOEK                     "Africa/Windhoek"\r
+#define TIME_ZONE_W_AFRICA_TIME                        "Africa/Brazzaville"\r
+#define TIME_ZONE_AMMAN_JORDAN                 "Asia/Amman"\r
+#define TIME_ZONE_ATHENS_ISTANBUL              "Europe/Athens"\r
+#define TIME_ZONE_BEIRUT_LEBANON               "Asia/Beirut"\r
+#define TIME_ZONE_CAIRO                                "Africa/Cairo"\r
+#define TIME_ZONE_HELSINKI                     "Europe/Helsinki"\r
+#define TIME_ZONE_JERUSALEM                    "Asia/Jerusalem"\r
+#define TIME_ZONE_MINSK                                "Europe/Minsk"\r
+#define TIME_ZONE_HARARE                       "Africa/Harare"\r
+#define TIME_ZONE_BAGHDAD                      "Asia/Baghdad"\r
+#define TIME_ZONE_MOSCOW                       "Europe/Moscow"\r
+#define TIME_ZONE_KUWAIT                       "Asia/Kuwait"\r
+#define TIME_ZONE_NAIROBI                      "Africa/Nairobi"\r
+#define TIME_ZONE_TEHRAN                       "Asia/Tehran"\r
+#define TIME_ZONE_BAKU                         "Asia/Baku"\r
+#define TIME_ZONE_TBILISI                      "Asia/Tbilisi"\r
+#define TIME_ZONE_YEREVAN                      "Asia/Yerevan"\r
+#define TIME_ZONE_DUBAI                                "Asia/Dubai"\r
+#define TIME_ZONE_KABUL                                "Asia/Kabul"\r
+#define TIME_ZONE_ISLAMABAD_KARACHI            "Asia/Karachi"\r
+#define TIME_ZONE_URAL_SK                      "Asia/Oral"\r
+#define TIME_ZONE_YEKATERINBURG                        "Asia/Yekaterinburg"\r
+#define TIME_ZONE_KOLKATA                      "Asia/Calcutta"\r
+#define TIME_ZONE_SRI_LANKA                    "Asia/Colombo"\r
+#define TIME_ZONE_KATHMANDU                    "Asia/Katmandu"\r
+#define TIME_ZONE_ASTANA                       "Asia/Almaty"\r
+#define TIME_ZONE_YANGON                       "Asia/Rangoon"\r
+#define TIME_ZONE_KRASNOYARSK                  "Asia/Krasnoyarsk"\r
+#define TIME_ZONE_BANGKOK                      "Asia/Bangkok"\r
+#define TIME_ZONE_BEIJING                      "Asia/Shanghai"\r
+#define TIME_ZONE_HONG_KONG                    "Asia/Hong_Kong"\r
+#define TIME_ZONE_IRKUTSK                      "Asia/Irkutsk"\r
+#define TIME_ZONE_KUALA_LUMPUR                 "Asia/Kuala_Lumpur"\r
+#define TIME_ZONE_PERTH                                "Australia/Perth"\r
+#define TIME_ZONE_TAIPEI                       "Asia/Taipei"\r
+#define TIME_ZONE_SEOUL                                "Asia/Seoul"\r
+#define TIME_ZONE_TOKYO_OSAKA                  "Asia/Tokyo"\r
+#define TIME_ZONE_YAKUTSK                      "Asia/Yakutsk"\r
+#define TIME_ZONE_ADELAIDE                     "Australia/Adelaide"\r
+#define TIME_ZONE_DARWIN                       "Australia/Darwin"\r
+#define TIME_ZONE_BRISBANE                     "Australia/Brisbane"\r
+#define TIME_ZONE_HOBART                       "Australia/Hobart"\r
+#define TIME_ZONE_SYDNEY_CANBERRA              "Australia/Sydney"\r
+#define TIME_ZONE_VLADIVOSTOK                  "Asia/Vladivostok"\r
+#define TIME_ZONE_GUAM                         "Pacific/Guam"\r
+#define TIME_ZONE_MAGADAN                      "Asia/Magadan"\r
+#define TIME_ZONE_AUCKLAND                     "Pacific/Auckland"\r
+#define TIME_ZONE_FIJI                         "Pacific/Fiji"\r
+#define TIME_ZONE_TONGA                                "Pacific/Tongatapu"\r
+\r
+\r
+enum xml_gms_id{\r
+       GMS_ID_SEARCH,\r
+       GMS_ID_SEARCH_BY_VOICE,\r
+       GMS_ID_GMAIL,\r
+       GMS_ID_CONTACT_SYNC,\r
+       GMS_ID_CALENDAR_SYNC,\r
+       GMS_ID_TALK,\r
+       GMS_ID_CHROME,\r
+       GMS_ID_GOOGLES,\r
+       GMS_ID_MAPS,\r
+       GMS_ID_STREET_VIEW,\r
+       GMS_ID_YOUTUBE,\r
+       GMS_ID_GOOGLE_PLAY_STORE,\r
+       GMS_ID_GOOGLE_PLAY_BOOKS,\r
+       GMS_ID_GOOGLE_PLAY_MOVIES,\r
+       GMS_ID_GOOGLE_PLAY_MAGAZINES,\r
+       GMS_ID_GOOGLE_PLAY_MUSIC,\r
+       //GMS_ID_WIDEVINE,\r
+       GMS_ID_FACELOCK,\r
+       GMS_ID_GOOGLE_TTS,\r
+       //GMS_ID_GOOGLE_VOICE,\r
+       //GMS_ID_GOGGLES,\r
+       //GMS_ID_EARTH,\r
+       //GMS_ID_ORKUT,\r
+       //GMS_ID_DOCS_DRIVE,\r
+       GMS_ID_NEWS_WEATHER,\r
+       //GMS_ID_SHOPPER,\r
+       //GMS_ID_BLOGGER,\r
+       //GMS_ID_CURRENTS,\r
+       //GMS_ID_KEEP,\r
+       //GMS_ID_TRANSLATE,\r
+       //GMS_ID_KOREAN_IME,\r
+       //GMS_ID_PINYIN_IME,\r
+       GMS_ID_NUMS,\r
+};\r
+\r
+\r
+struct xml_gms_name{\r
+       int gms_id;\r
+       char gms_name[48];\r
+};\r
+\r
+\r
+static struct xml_gms_name gms_name[GMS_ID_NUMS] = \r
+{\r
+       {GMS_ID_SEARCH, "QuickSearchBox.apk"},\r
+       {GMS_ID_SEARCH_BY_VOICE, "VoiceSearchStub.apk"},\r
+       {GMS_ID_GMAIL, "Gmail2.apk"},\r
+       {GMS_ID_CONTACT_SYNC, "GoogleContactsSyncAdapter.apk"},\r
+       {GMS_ID_CALENDAR_SYNC, "GoogleCalendarSyncAdapter.apk"},\r
+       {GMS_ID_TALK, "Talk.apk"},\r
+       {GMS_ID_CHROME, "Chrome.apk"},\r
+       {GMS_ID_GOOGLES, "PlusOne.apk"},\r
+       {GMS_ID_MAPS, "GMS_Maps.apk"},\r
+       {GMS_ID_STREET_VIEW, "Street.apk"},\r
+       {GMS_ID_YOUTUBE, "YouTube.apk"},\r
+       {GMS_ID_GOOGLE_PLAY_STORE, "Phonesky.apk"},\r
+       {GMS_ID_GOOGLE_PLAY_BOOKS, "Books.apk"},\r
+       {GMS_ID_GOOGLE_PLAY_MOVIES, "Videos.apk"},\r
+       {GMS_ID_GOOGLE_PLAY_MAGAZINES, "Magazines.apk"},\r
+       {GMS_ID_GOOGLE_PLAY_MUSIC, "Music.apk"},\r
+       //{GMS_ID_WIDEVINE, ""},\r
+       {GMS_ID_FACELOCK, "FaceLock.apk"},\r
+       {GMS_ID_GOOGLE_TTS, "PicoTts.apk"},\r
+       //{GMS_ID_GOOGLE_VOICE, "Velvet.apk"},//?\r
+       //{GMS_ID_GOGGLES, "Velvet.apk"},//?\r
+       //{GMS_ID_EARTH, "Velvet.apk"},\r
+       //{GMS_ID_ORKUT, "Velvet.apk"},\r
+       //{GMS_ID_DOCS_DRIVE, "Velvet.apk"},\r
+       {GMS_ID_NEWS_WEATHER, "GenieWidget.apk"},\r
+       //{GMS_ID_SHOPPER, "Velvet.apk"},\r
+       //{GMS_ID_BLOGGER, "Velvet.apk"},\r
+       //{GMS_ID_CURRENTS, "Velvet.apk"},\r
+       //{GMS_ID_KEEP, "Velvet.apk"},\r
+       //{GMS_ID_TRANSLATE, "Velvet.apk"},\r
+       //{GMS_ID_KOREAN_IME, "Velvet.apk"},\r
+       //{GMS_ID_PINYIN_IME, "PinyinIME.apk"},\r
+};\r
+\r
+\r
+\r
+struct auto_xml_config{\r
+       int area_id;\r
+       int gms_flag[GMS_ID_NUMS];\r
+};\r
+\r
+\r
+static struct auto_xml_config xml_config[AREA_ID_NUMS] = {\r
+       {AREA_ID_NULL, {1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}},\r
+       {AREA_ID_ALBANIA,{0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1}},\r
+       {AREA_ID_ALGERIA,{0,1,0,0,0,0,0,1,0,1,0,1,1,1,1,1,0,1,1}},\r
+       {AREA_ID_ANGOLA,{0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1}},\r
+       {AREA_ID_ARGENTINA,{0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0}},\r
+       {AREA_ID_AUSTRALIA,{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}},\r
+       {AREA_ID_AUSTRIA,{0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0}},\r
+       {AREA_ID_AZERBAIJAN,{0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1}},\r
+       {AREA_ID_BAHRAIN,{0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,1,1}},\r
+       {AREA_ID_BANGLADESH,{0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1}},\r
+       {AREA_ID_BARBADOS,{0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1}},\r
+       {AREA_ID_BELARUS,{0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1}},\r
+       {AREA_ID_BELGIUM,{0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,0}},\r
+       {AREA_ID_BOLIVIA,{0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1}},\r
+       {AREA_ID_BOSNIA_AND_HERZEGOVINA,{0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1}},\r
+       {AREA_ID_BOTSWANA,{0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0}},\r
+       {AREA_ID_BRAZIL,{0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0}},\r
+       {AREA_ID_BULGARIA,{0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,1,1}},\r
+       {AREA_ID_CANADA,{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0}},\r
+       {AREA_ID_CHILE,{0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,0,0}},\r
+       {AREA_ID_CHINA,{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1}},\r
+       {AREA_ID_COLOMBIA,{0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,0,0,0}},\r
+       {AREA_ID_COTE_D_IVOIRE,{0,1,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,0,1}},\r
+       {AREA_ID_CROATIA,{0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1}},\r
+       {AREA_ID_CYPRUS,{0,1,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,0,1}},\r
+       {AREA_ID_CZECH_REPUBLIC,{0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0}},\r
+       {AREA_ID_DENMARK,{0,1,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1}},\r
+       {AREA_ID_ECUADOR,{0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1}},\r
+       {AREA_ID_EGYPT,{0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,0,1,1}},\r
+       {AREA_ID_ESTONIA,{0,1,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,1,1}},\r
+       {AREA_ID_FINLAND,{0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1}},\r
+       {AREA_ID_FRANCE_INC_GUADELOUPE,{0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0}},\r
+       {AREA_ID_GEORGIA,{0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1}},\r
+       {AREA_ID_GERMANY,{0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0}},\r
+       {AREA_ID_GREECE,{0,1,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,0,0}},\r
+       {AREA_ID_HAITI,{0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1}},\r
+       {AREA_ID_HONDURAS,{0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1}},\r
+       {AREA_ID_HONG_KONG,{0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0}},\r
+       {AREA_ID_HUNGARY,{0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,0}},\r
+       {AREA_ID_ICELAND,{0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,1,1}},\r
+       {AREA_ID_INDIA,{0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0}},\r
+       {AREA_ID_INDONESIA,{0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,0}},\r
+       {AREA_ID_IRELAND,{0,1,0,0,0,0,0,0,1,1,0,0,1,1,1,0,0,0,0}},\r
+       {AREA_ID_ISRAEL,{0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,0}},\r
+       {AREA_ID_ITALY,{0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0}},\r
+       {AREA_ID_JAMAICA,{0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1}},\r
+       {AREA_ID_JAPAN,{0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0}},\r
+       {AREA_ID_JORDAN,{0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,0,1,1}},\r
+       {AREA_ID_KAZAKHSTAN,{0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1}},\r
+       {AREA_ID_KENYA,{0,1,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,0}},\r
+       {AREA_ID_KOREA_SOUTH,{0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,1,0}},\r
+       {AREA_ID_KUWAIT,{0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,1,1}},\r
+       {AREA_ID_LATVIA,{0,1,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,0,1}},\r
+       {AREA_ID_LEBANON,{0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,1,0}},\r
+       {AREA_ID_LITHUANIA,{0,1,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,1,1}},\r
+       {AREA_ID_LUXEMBOURG,{0,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,0,0,1}},\r
+       {AREA_ID_MACEDONIA,{0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1}},\r
+       {AREA_ID_MALAYSIA,{0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,1,0}},\r
+       {AREA_ID_MEXICO,{0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0}},\r
+       {AREA_ID_MOLDOVA,{0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1}},\r
+       {AREA_ID_MOROCCO,{0,1,0,0,0,0,0,1,1,1,0,1,1,1,1,1,0,1,1}},\r
+       {AREA_ID_NEPAL,{0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1}},\r
+       {AREA_ID_NETHERLAND_ANTILLES,{0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1}},\r
+       {AREA_ID_NETHERLANDS_INC_BONAIRE,{0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0}},\r
+       {AREA_ID_NEW_ZEALAND,{0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0}},\r
+       {AREA_ID_NIGERIA,{0,1,0,0,0,0,0,1,1,1,0,1,1,1,1,1,0,0,0}},\r
+       {AREA_ID_NORWAY,{0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,0}},\r
+       {AREA_ID_OMAN,{0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,1,1}},\r
+       {AREA_ID_PAKISTAN,{0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1}},\r
+       {AREA_ID_PARAGUAY,{0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1}},\r
+       {AREA_ID_PERU,{0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0}},\r
+       {AREA_ID_PHILIPPINES,{0,1,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,0,0}},\r
+       {AREA_ID_POLAND,{0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0}},\r
+       {AREA_ID_PORTUGAL,{0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0}},\r
+       {AREA_ID_QATAR,{0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,1,1}},\r
+       {AREA_ID_ROMANIA,{0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,0,1}},\r
+       {AREA_ID_RUSSIA,{0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,1,0}},\r
+       {AREA_ID_SAUDI_ARABIA,{0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,0}},\r
+       {AREA_ID_SERBIA,{0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1}},\r
+       {AREA_ID_SINGAPORE,{0,1,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,0}},\r
+       {AREA_ID_SLOVAKIA,{0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,0,1}},\r
+       {AREA_ID_SLOVENIA,{0,1,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,1,1}},\r
+       {AREA_ID_SOUTH_AFRICA,{0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0}},\r
+       {AREA_ID_SPAIN,{0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0}},\r
+       {AREA_ID_SRI_LANKA,{0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1}},\r
+       {AREA_ID_SWEDEN,{0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0}},\r
+       {AREA_ID_SWITZERLAND,{0,1,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0}},\r
+       {AREA_ID_TAIWAN,{0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0}},\r
+       {AREA_ID_THAILAND,{0,1,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,1}},\r
+       {AREA_ID_TRINIDAD_TOBAGO,{0,1,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,0,1}},\r
+       {AREA_ID_TUNISIA,{0,1,0,0,0,0,0,0,1,1,0,1,1,1,1,1,0,1,1}},\r
+       {AREA_ID_TURKEY,{0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0}},\r
+       {AREA_ID_TURKMENISTAN,{0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1}},\r
+       {AREA_ID_UGANDA,{0,1,0,0,0,0,0,1,1,1,0,1,1,1,1,1,0,0,0}},\r
+       {AREA_ID_UKRAINE,{0,1,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0}},\r
+       {AREA_ID_UNITED_KINGDOM,{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}},\r
+       {AREA_ID_UNITED_STATES,{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}},\r
+       {AREA_ID_URUGUAY,{0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1}},\r
+       {AREA_ID_UZBEKISTAN,{0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1}},\r
+       {AREA_ID_VENEZUELA,{0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0}},\r
+       {AREA_ID_VIETNAM,{0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,0}},\r
+       {AREA_ID_NORDICS,{0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0}},\r
+       {AREA_ID_BALTIC,{0,1,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,0,1}},\r
+       {AREA_ID_CZECH_SLOVAKIA,{0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0}},\r
+       {AREA_ID_CROATIA_SLOVENIA,{0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,0,1}},\r
+       {AREA_ID_LA_GROUP,{0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,0,0,0}},\r
+       {AREA_ID_UNITED_ARAB_EMIRATES,{0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,0,0,0}},\r
+       {AREA_ID_EMAT_UK,{0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0}},\r
+       {AREA_ID_EMAT_FR,{0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,1}},\r
+       {AREA_ID_EMAT_PO,{0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1}},\r
+       {AREA_ID_INDIA_HI,{0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0}},\r
+       {AREA_ID_UAE_EN,{0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,0,0,0}},\r
+       {AREA_ID_ISRAEL_AR,{0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,0}},\r
+       {AREA_ID_NETHERLANDS_INC_BONAIRE_ENUS,{0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0}},\r
+};\r
+\r
+\r
+struct area_id_name{\r
+       int type;\r
+       int id;\r
+       char country_area[32];          //country or area name such as china\r
+       char locale_language[4];        //locale language name such as zh\r
+       char locale_region[8];          //locale region name such as CN\r
+       char country_geo[20];           //country geographical position such as asia            \r
+       char timezone[32];              //time zone such as Asia/Shanghai\r
+       char user_define[20];           //user-defined name such as A10,A12,A13 \r
+};\r
+\r
+\r
+struct operator_id_name{\r
+       int type;               //type\r
+       int id; \r
+       char operator_name[20]; //operator name such as CHINA MOBILE\r
+       char locale_region[8];  //area name such as CN\r
+};\r
+\r
+struct reserve_id_name{\r
+       int type;               //type\r
+       int id;                 \r
+       char reserve_name[20];  //reserve name  \r
+       char locale_region[20]; \r
+};\r
+\r
+\r
+struct device_id_name{\r
+       char type;      //device type\r
+       char id;        //board id\r
+       char type_name[14];\r
+       char driver_name[16];\r
+       char dev_name[16];      //name\r
+       char description[30];   // description\r
+       unsigned short device_id;//device_id and only one\r
+       //short select; // 1:device is selected 0:not\r
+};\r
+\r
+struct board_id_flag{  \r
+       atomic_t debug_flag;    \r
+};\r
+\r
+\r
+\r
+enum I2C_BUS_NUM{\r
+       BUS_NUM_I2C_0,\r
+       BUS_NUM_I2C_1,\r
+       BUS_NUM_I2C_2,\r
+       BUS_NUM_I2C_3,\r
+       BUS_NUM_I2C_4,\r
+       BUS_NUM_I2C_GPIO,\r
+       BUS_NUM_I2C_MAX,\r
+};\r
+\r
+\r
+enum {\r
+       BUS_NUM_SPI_0,\r
+       BUS_NUM_SPI_1,\r
+       BUS_NUM_SPI_MAX,\r
+};\r
+\r
+\r
+enum board_device_type{\r
+       BOARD_DEVICE_TYPE_VALID,\r
+       BOARD_DEVICE_TYPE_INVALID,\r
+       BOARD_DEVICE_TYPE_I2C,  \r
+       BOARD_DEVICE_TYPE_SPI,\r
+       BOARD_DEVICE_TYPE_PLATFORM,     \r
+       BOARD_DEVICE_TYPE_NUMS,\r
+};\r
+\r
+struct valid_invalid_name{\r
+       char name[32];\r
+};\r
+\r
+\r
+struct board_device_table{\r
+       void *addr;\r
+       int size;\r
+       int type;\r
+       int bus;\r
+};\r
+\r
+\r
+#include <linux/board-id-operator.h>\r
+\r
+struct board_id_private_data{          \r
+       struct device *dev;     \r
+       struct mutex operation_mutex;\r
+       struct area_id_name  area_area_id_name[AREA_ID_NUMS];\r
+       struct operator_id_name  area_operator_id_name[OPERATOR_ID_NUMS];\r
+       struct reserve_id_name  area_reserve_id_name[RESERVE_ID_NUMS];\r
+       struct area_id_name  area_select;       \r
+       struct operator_id_name  operator_select;       \r
+       struct reserve_id_name  reserve_select;\r
+       \r
+       struct device_id_name  tp_id_name[TP_ID_NUMS];\r
+       struct device_id_name  lcd_id_name[LCD_ID_NUMS];\r
+       struct device_id_name  key_id_name[KEY_ID_NUMS];\r
+       struct device_id_name  codec_id_name[CODEC_ID_NUMS];\r
+       struct device_id_name  wifi_id_name[WIFI_ID_NUMS];\r
+       struct device_id_name  bt_id_name[BT_ID_NUMS];\r
+       struct device_id_name  gps_id_name[GPS_ID_NUMS];\r
+       struct device_id_name  fm_id_name[FM_ID_NUMS];\r
+       struct device_id_name  modem_id_name[MODEM_ID_NUMS];    \r
+       struct device_id_name  ddr_id_name[DDR_ID_NUMS];\r
+       struct device_id_name  flash_id_name[FLASH_ID_NUMS];\r
+       struct device_id_name  hdmi_id_name[HDMI_ID_NUMS];\r
+       struct device_id_name  battery_id_name[BATTERY_ID_NUMS];\r
+       struct device_id_name  charge_id_name[CHARGE_ID_NUMS];\r
+       struct device_id_name  backlight_id_name[BACKLIGHT_ID_NUMS];\r
+       struct device_id_name  headset_id_name[HEADSET_ID_NUMS];\r
+       struct device_id_name  micphone_id_name[MICPHONE_ID_NUMS];\r
+       struct device_id_name  speaker_id_name[SPEAKER_ID_NUMS];\r
+       struct device_id_name  vibrator_id_name[VIBRATOR_ID_NUMS];\r
+       struct device_id_name  tv_id_name[TV_ID_NUMS];\r
+       struct device_id_name  echip_id_name[ECHIP_ID_NUMS];    \r
+       struct device_id_name  hub_id_name[HUB_ID_NUMS];        \r
+       struct device_id_name  tpad_id_name[TPAD_ID_NUMS];\r
+       \r
+       struct device_id_name  pmic_id_name[PMIC_ID_NUMS];\r
+       struct device_id_name  regulator_id_name[REGULATOR_ID_NUMS];\r
+       struct device_id_name  rtc_id_name[RTC_ID_NUMS];\r
+       struct device_id_name  camera_front_id_name[CAMERA_FRONT_ID_NUMS];\r
+       struct device_id_name  camera_back_id_name[CAMERA_BACK_ID_NUMS];        \r
+       struct device_id_name  sensor_angle_id_name[ANGLE_ID_NUMS];\r
+       struct device_id_name  sensor_accel_id_name[ACCEL_ID_NUMS];\r
+       struct device_id_name  sensor_compass_id_name[COMPASS_ID_NUMS];\r
+       struct device_id_name  sensor_gyroscope_id_name[GYRO_ID_NUMS];\r
+       struct device_id_name  sensor_light_id_name[LIGHT_ID_NUMS];\r
+       struct device_id_name  sensor_proximity_id_name[PROXIMITY_ID_NUMS];\r
+       struct device_id_name  sensor_temperature_id_name[TEMPERATURE_ID_NUMS]; \r
+       struct device_id_name  sensor_pressure_id_name[PRESSURE_ID_NUMS];\r
+       struct device_id_name  device_selected[DEVICE_NUM_TYPES];\r
+\r
+       \r
+       struct device_id_name  *device_start_addr[DEVICE_NUM_TYPES];    \r
+       char  device_num_max[DEVICE_NUM_TYPES];\r
+       \r
+       struct board_id_flag flags;\r
+       struct file_operations id_fops;\r
+       struct miscdevice id_miscdev;\r
+       struct board_id_platform_data *pdata;\r
+       \r
+       //for debug\r
+       struct file* board_id_data_filp;\r
+       mm_segment_t board_id_data_fs;\r
+       struct file* board_id_area_filp;\r
+       mm_segment_t board_id_area_fs;\r
+       struct file* board_id_device_filp;\r
+       mm_segment_t board_id_device_fs;\r
+\r
+       char vendor_data[DEVICE_NUM_TYPES];\r
+       \r
+};\r
+\r
+\r
+extern char board_id_get(enum type_devices type);\r
+extern int board_id_get_from_flash(char *pbuf, int type);\r
+\r
+\r
+#if 1\r
+#define DBG_ID(x...) if(g_board_id && (atomic_read(&g_board_id->flags.debug_flag) == 1)) printk(x)\r
+#else\r
+#define DBG_ID(x...)\r
+#endif\r
+\r
+\r
+#define BOARD_ID_IOCTL_BASE 'b'\r
+\r
+//#define BOARD_ID_IOCTL_READ_ALL                      _IOWR(BOARD_ID_IOCTL_BASE, 0x00, struct board_id_private_data)\r
+//#define BOARD_ID_IOCTL_WRITE_ALL                     _IOWR(BOARD_ID_IOCTL_BASE, 0x30, struct board_id_private_data)\r
+\r
+\r
+#define BOARD_ID_IOCTL_READ_AREA_ID                    _IOR(BOARD_ID_IOCTL_BASE, 0x80, struct area_id_name)\r
+#define BOARD_ID_IOCTL_READ_OPERATOR_ID                _IOR(BOARD_ID_IOCTL_BASE, 0x81, struct operator_id_name)\r
+#define BOARD_ID_IOCTL_READ_RESERVE_ID                         _IOR(BOARD_ID_IOCTL_BASE, 0x82, struct reserve_id_name)\r
+\r
+#define BOARD_ID_IOCTL_READ_AREA_NAME_BY_ID            _IOWR(BOARD_ID_IOCTL_BASE, 0x70, struct area_id_name)\r
+#define BOARD_ID_IOCTL_READ_OPERATOR_NAME_BY_ID        _IOWR(BOARD_ID_IOCTL_BASE, 0x71, struct operator_id_name)\r
+#define BOARD_ID_IOCTL_READ_RESERVE_NAME_BY_ID                 _IOWR(BOARD_ID_IOCTL_BASE, 0x72, struct reserve_id_name)\r
+#define BOARD_ID_IOCTL_READ_DEVICE_NAME_BY_ID          _IOWR(BOARD_ID_IOCTL_BASE, 0x73, struct device_id_name)\r
+\r
+\r
+\r
+#define BOARD_ID_IOCTL_READ_TP_ID                      _IOR(BOARD_ID_IOCTL_BASE, 0x01, struct device_id_name)\r
+#define BOARD_ID_IOCTL_READ_LCD_ID                     _IOR(BOARD_ID_IOCTL_BASE, 0x02, struct device_id_name)\r
+#define BOARD_ID_IOCTL_READ_KEY_ID                     _IOR(BOARD_ID_IOCTL_BASE, 0x03, struct device_id_name)\r
+#define BOARD_ID_IOCTL_READ_CODEC_ID                   _IOR(BOARD_ID_IOCTL_BASE, 0x04, struct device_id_name)\r
+#define BOARD_ID_IOCTL_READ_WIFI_ID                    _IOR(BOARD_ID_IOCTL_BASE, 0x05, struct device_id_name)\r
+#define BOARD_ID_IOCTL_READ_BT_ID                      _IOR(BOARD_ID_IOCTL_BASE, 0x06, struct device_id_name)  \r
+#define BOARD_ID_IOCTL_READ_GPS_ID                     _IOR(BOARD_ID_IOCTL_BASE, 0x07, struct device_id_name)\r
+#define BOARD_ID_IOCTL_READ_FM_ID                      _IOR(BOARD_ID_IOCTL_BASE, 0x08, struct device_id_name)\r
+#define BOARD_ID_IOCTL_READ_MODEM_ID                   _IOR(BOARD_ID_IOCTL_BASE, 0x09, struct device_id_name)  \r
+#define BOARD_ID_IOCTL_READ_DDR_ID                     _IOR(BOARD_ID_IOCTL_BASE, 0x0a, struct device_id_name)\r
+#define BOARD_ID_IOCTL_READ_FLASH_ID                   _IOR(BOARD_ID_IOCTL_BASE, 0x0b, struct device_id_name)\r
+#define BOARD_ID_IOCTL_READ_HDMI_ID                    _IOR(BOARD_ID_IOCTL_BASE, 0x0c, struct device_id_name)\r
+#define BOARD_ID_IOCTL_READ_BATTERY_ID                         _IOR(BOARD_ID_IOCTL_BASE, 0x0d, struct device_id_name)\r
+#define BOARD_ID_IOCTL_READ_CHARGE_ID                  _IOR(BOARD_ID_IOCTL_BASE, 0x0e, struct device_id_name)  \r
+#define BOARD_ID_IOCTL_READ_BACKLIGHT_ID               _IOR(BOARD_ID_IOCTL_BASE, 0x0f, struct device_id_name)\r
+#define BOARD_ID_IOCTL_READ_HEADSET_ID                         _IOR(BOARD_ID_IOCTL_BASE, 0x10, struct device_id_name)\r
+#define BOARD_ID_IOCTL_READ_MICPHONE_ID                _IOR(BOARD_ID_IOCTL_BASE, 0x11, struct device_id_name)\r
+#define BOARD_ID_IOCTL_READ_SPEAKER_ID                         _IOR(BOARD_ID_IOCTL_BASE, 0x12, struct device_id_name)\r
+#define BOARD_ID_IOCTL_READ_VIBRATOR_ID                _IOR(BOARD_ID_IOCTL_BASE, 0x13, struct device_id_name)\r
+#define BOARD_ID_IOCTL_READ_TV_ID                      _IOR(BOARD_ID_IOCTL_BASE, 0x14, struct device_id_name)\r
+#define BOARD_ID_IOCTL_READ_ECHIP_ID                   _IOR(BOARD_ID_IOCTL_BASE, 0x15, struct device_id_name)          \r
+#define BOARD_ID_IOCTL_READ_HUB_ID                     _IOR(BOARD_ID_IOCTL_BASE, 0x16, struct device_id_name)\r
+#define BOARD_ID_IOCTL_READ_TPAD_ID                    _IOR(BOARD_ID_IOCTL_BASE, 0x17, struct device_id_name)\r
+\r
+\r
+#define BOARD_ID_IOCTL_READ_PMIC_ID                    _IOR(BOARD_ID_IOCTL_BASE, 0x20, struct device_id_name)\r
+#define BOARD_ID_IOCTL_READ_REGULATOR_ID               _IOR(BOARD_ID_IOCTL_BASE, 0x21, struct device_id_name)\r
+#define BOARD_ID_IOCTL_READ_RTC_ID                     _IOR(BOARD_ID_IOCTL_BASE, 0x22, struct device_id_name)\r
+#define BOARD_ID_IOCTL_READ_CAMERA_FRONT_ID            _IOR(BOARD_ID_IOCTL_BASE, 0x23, struct device_id_name)\r
+#define BOARD_ID_IOCTL_READ_CAMERA_BACK_ID             _IOR(BOARD_ID_IOCTL_BASE, 0x24, struct device_id_name)  \r
+#define BOARD_ID_IOCTL_READ_SENSOR_ANGLE_ID            _IOR(BOARD_ID_IOCTL_BASE, 0x25, struct device_id_name)\r
+#define BOARD_ID_IOCTL_READ_SENSOR_ACCEL_ID            _IOR(BOARD_ID_IOCTL_BASE, 0x26, struct device_id_name)\r
+#define BOARD_ID_IOCTL_READ_SENSOR_COMPASS_ID          _IOR(BOARD_ID_IOCTL_BASE, 0x27, struct device_id_name)\r
+#define BOARD_ID_IOCTL_READ_SENSOR_GYRO_ID             _IOR(BOARD_ID_IOCTL_BASE, 0x28, struct device_id_name)\r
+#define BOARD_ID_IOCTL_READ_SENSOR_LIGHT_ID            _IOR(BOARD_ID_IOCTL_BASE, 0x29, struct device_id_name)\r
+#define BOARD_ID_IOCTL_READ_SENSOR_PROXIMITY_ID        _IOR(BOARD_ID_IOCTL_BASE, 0x2A, struct device_id_name)\r
+#define BOARD_ID_IOCTL_READ_SENSOR_TEMPERATURE_ID      _IOR(BOARD_ID_IOCTL_BASE, 0x2B, struct device_id_name)  \r
+#define BOARD_ID_IOCTL_READ_SENSOR_PRESSURE_ID                 _IOR(BOARD_ID_IOCTL_BASE, 0x2C, struct device_id_name)\r
+\r
+\r
+#define BOARD_ID_IOCTL_WRITE_AREA_ID           _IOW(BOARD_ID_IOCTL_BASE, 0x90, struct area_id_name)\r
+#define BOARD_ID_IOCTL_WRITE_OPERATOR_ID               _IOW(BOARD_ID_IOCTL_BASE, 0x91, struct operator_id_name)\r
+#define BOARD_ID_IOCTL_WRITE_RESERVE_ID                _IOW(BOARD_ID_IOCTL_BASE, 0x92, struct reserve_id_name)\r
+\r
+\r
+#define BOARD_ID_IOCTL_WRITE_TP_ID                     _IOW(BOARD_ID_IOCTL_BASE, 0x31, struct device_id_name)\r
+#define BOARD_ID_IOCTL_WRITE_LCD_ID                    _IOW(BOARD_ID_IOCTL_BASE, 0x32, struct device_id_name)\r
+#define BOARD_ID_IOCTL_WRITE_KEY_ID                    _IOW(BOARD_ID_IOCTL_BASE, 0x33, struct device_id_name)\r
+#define BOARD_ID_IOCTL_WRITE_CODEC_ID                  _IOW(BOARD_ID_IOCTL_BASE, 0x34, struct device_id_name)\r
+#define BOARD_ID_IOCTL_WRITE_WIFI_ID                   _IOW(BOARD_ID_IOCTL_BASE, 0x35, struct device_id_name)\r
+#define BOARD_ID_IOCTL_WRITE_BT_ID                     _IOW(BOARD_ID_IOCTL_BASE, 0x36, struct device_id_name)  \r
+#define BOARD_ID_IOCTL_WRITE_GPS_ID                    _IOW(BOARD_ID_IOCTL_BASE, 0x37, struct device_id_name)\r
+#define BOARD_ID_IOCTL_WRITE_FM_ID                     _IOW(BOARD_ID_IOCTL_BASE, 0x38, struct device_id_name)\r
+#define BOARD_ID_IOCTL_WRITE_MODEM_ID                  _IOW(BOARD_ID_IOCTL_BASE, 0x39, struct device_id_name)  \r
+#define BOARD_ID_IOCTL_WRITE_DDR_ID                    _IOW(BOARD_ID_IOCTL_BASE, 0x3a, struct device_id_name)\r
+#define BOARD_ID_IOCTL_WRITE_FLASH_ID                  _IOW(BOARD_ID_IOCTL_BASE, 0x3b, struct device_id_name)\r
+#define BOARD_ID_IOCTL_WRITE_HDMI_ID                   _IOW(BOARD_ID_IOCTL_BASE, 0x3c, struct device_id_name)\r
+#define BOARD_ID_IOCTL_WRITE_BATTERY_ID                _IOW(BOARD_ID_IOCTL_BASE, 0x3d, struct device_id_name)\r
+#define BOARD_ID_IOCTL_WRITE_CHARGE_ID                         _IOW(BOARD_ID_IOCTL_BASE, 0x3e, struct device_id_name)  \r
+#define BOARD_ID_IOCTL_WRITE_BACKLIGHT_ID              _IOW(BOARD_ID_IOCTL_BASE, 0x3f, struct device_id_name)\r
+#define BOARD_ID_IOCTL_WRITE_HEADSET_ID                _IOW(BOARD_ID_IOCTL_BASE, 0x40, struct device_id_name)\r
+#define BOARD_ID_IOCTL_WRITE_MICPHONE_ID               _IOW(BOARD_ID_IOCTL_BASE, 0x41, struct device_id_name)\r
+#define BOARD_ID_IOCTL_WRITE_SPEAKER_ID                _IOW(BOARD_ID_IOCTL_BASE, 0x42, struct device_id_name)\r
+#define BOARD_ID_IOCTL_WRITE_VIBRATOR_ID               _IOW(BOARD_ID_IOCTL_BASE, 0x43, struct device_id_name)\r
+#define BOARD_ID_IOCTL_WRITE_TV_ID                     _IOW(BOARD_ID_IOCTL_BASE, 0x44, struct device_id_name)\r
+#define BOARD_ID_IOCTL_WRITE_ECHIP_ID                  _IOW(BOARD_ID_IOCTL_BASE, 0x45, struct device_id_name)          \r
+#define BOARD_ID_IOCTL_WRITE_HUB_ID                    _IOW(BOARD_ID_IOCTL_BASE, 0x46, struct device_id_name)\r
+#define BOARD_ID_IOCTL_WRITE_TPAD_ID                   _IOW(BOARD_ID_IOCTL_BASE, 0x47, struct device_id_name)\r
+\r
+#define BOARD_ID_IOCTL_WRITE_PMIC_ID                   _IOW(BOARD_ID_IOCTL_BASE, 0x50, struct device_id_name)\r
+#define BOARD_ID_IOCTL_WRITE_REGULATOR_ID              _IOW(BOARD_ID_IOCTL_BASE, 0x51, struct device_id_name)\r
+#define BOARD_ID_IOCTL_WRITE_RTC_ID                    _IOW(BOARD_ID_IOCTL_BASE, 0x52, struct device_id_name)\r
+#define BOARD_ID_IOCTL_WRITE_CAMERA_FRONT_ID           _IOW(BOARD_ID_IOCTL_BASE, 0x53, struct device_id_name)\r
+#define BOARD_ID_IOCTL_WRITE_CAMERA_BACK_ID            _IOW(BOARD_ID_IOCTL_BASE, 0x54, struct device_id_name)  \r
+#define BOARD_ID_IOCTL_WRITE_SENSOR_ANGLE_ID           _IOW(BOARD_ID_IOCTL_BASE, 0x55, struct device_id_name)\r
+#define BOARD_ID_IOCTL_WRITE_SENSOR_ACCEL_ID           _IOW(BOARD_ID_IOCTL_BASE, 0x56, struct device_id_name)\r
+#define BOARD_ID_IOCTL_WRITE_SENSOR_COMPASS_ID                 _IOW(BOARD_ID_IOCTL_BASE, 0x57, struct device_id_name)\r
+#define BOARD_ID_IOCTL_WRITE_SENSOR_GYRO_ID            _IOW(BOARD_ID_IOCTL_BASE, 0x58, struct device_id_name)\r
+#define BOARD_ID_IOCTL_WRITE_SENSOR_LIGHT_ID           _IOW(BOARD_ID_IOCTL_BASE, 0x59, struct device_id_name)\r
+#define BOARD_ID_IOCTL_WRITE_SENSOR_PROXIMITY_ID       _IOW(BOARD_ID_IOCTL_BASE, 0x5A, struct device_id_name)\r
+#define BOARD_ID_IOCTL_WRITE_SENSOR_TEMPERATURE_ID     _IOW(BOARD_ID_IOCTL_BASE, 0x5B, struct device_id_name)  \r
+#define BOARD_ID_IOCTL_WRITE_SENSOR_PRESSURE_ID        _IOW(BOARD_ID_IOCTL_BASE, 0x5C, struct device_id_name)\r
+\r
+#define BOARD_ID_IOCTL_WRITE_AREA_FLASH                _IOW(BOARD_ID_IOCTL_BASE, 0x60, struct area_id_name)\r
+#define BOARD_ID_IOCTL_WRITE_DEVICE_FLASH              _IOW(BOARD_ID_IOCTL_BASE, 0x61, struct device_id_name)\r
+#define BOARD_ID_IOCTL_READ_STATUS                     _IOR(BOARD_ID_IOCTL_BASE, 0x62, char)\r
+#define BOARD_ID_IOCTL_READ_VENDOR_DATA                _IOR(BOARD_ID_IOCTL_BASE, 0x63, char[DEVICE_NUM_TYPES])\r
+\r
+#endif\r
+\r