static int wifi_calibration_read_proc(struct file *file, char __user *buf, size_t size, loff_t *ppos)
{
    unsigned char *ptr;
    unsigned int count = size;
    unsigned int len = 0;
    unsigned long p = *ppos;
    int ret = 0;

    len = wifi_get_nvs_size();
    if (p >= len)
        return 0;

    if (count > len - p)
        count = len - p;

    ptr = get_wifi_nvs_ram();
    if (ptr != NULL) {
        if (copy_to_user(buf, (void*)(ptr+NVS_DATA_OFFSET+p), count))
        {
            ret =  - EFAULT;
            printk("wifi_calibration_read_proc: FAIL to copy \n");
        }
        else
        {
            *ppos += count;
            ret = count;
        }
    } else {
        ret =  - EFAULT;
        printk("wifi_calibration_read_proc: ptr is null \n");
    }

    return ret;
}
static int __init wifi_nvs_init(void)
{
    wifi_calibration = create_proc_entry("calibration", 0444, NULL);
    if (wifi_calibration != NULL) {
        wifi_calibration->size = wifi_get_nvs_size();
        wifi_calibration->read_proc = wifi_calibration_read_proc;
        wifi_calibration->write_proc = NULL;
    }
    return 0;
}
int htc_get_wifi_calibration(char *buf, int count)
{
	unsigned char *ptr;
	unsigned len;

	ptr = get_wifi_nvs_ram();
	len = min(wifi_get_nvs_size(), (unsigned) count);
	memcpy(buf, ptr + NVS_DATA_OFFSET, len);
	return len;
}
static int wifi_calibration_read_proc(char *page, char **start, off_t off,
					int count, int *eof, void *data)
{
	unsigned char *ptr;
	unsigned len;

	ptr = get_wifi_nvs_ram();
	len = min(wifi_get_nvs_size(), (unsigned)count);
	memcpy(page, ptr + NVS_DATA_OFFSET, len);
	return len;
}
static int __init wifi_nvs_init(void)
{
	wifi_calibration = create_proc_entry("calibration", 0444, NULL);
	if (wifi_calibration != NULL) {
		wifi_calibration->size = wifi_get_nvs_size();
		wifi_calibration->read_proc = wifi_calibration_read_proc;
		wifi_calibration->write_proc = NULL;
	}

	wifi_data = create_proc_entry("wifi_data", 0444, NULL);
	if (wifi_data != NULL) {
		wifi_data->size = NVS_DATA_OFFSET;
		wifi_data->read_proc = wifi_data_read_proc;
		wifi_data->write_proc = NULL;
	}
	return 0;
}
static int __init wifi_nvs_init(void)
{
#ifdef CONFIG_WIFI_NVS_PROC_CREATE
	wifi_calibration = create_proc_entry("calibration", 0444, NULL);
	if (wifi_calibration != NULL) {
		wifi_calibration->size = wifi_get_nvs_size();
		wifi_calibration->read_proc = wifi_calibration_read_proc;
		wifi_calibration->write_proc = NULL;
	}
#endif
	wifi_data = create_proc_entry("wifi_data", 0444, NULL);
	if (wifi_data != NULL) {
		wifi_data->size = NVS_DATA_OFFSET;
		wifi_data->read_proc = wifi_data_read_proc;
		wifi_data->write_proc = NULL;
	}
	return 0;
}
static int __init wifi_nvs_init(void)
{

    // New create proc method for kernel 3.10.
    wifi_calibration = proc_create_data("calibration", 0444, NULL, &htc_cal_partition_fops, NULL);
    if (wifi_calibration == NULL) {
        printk("%s: unable to create /proc/calibration entry\n", __func__);
    } else {
        wifi_calibration->size = wifi_get_nvs_size();
    }

    wifi_data = proc_create_data("wifi_data", 0444, NULL, &htc_wifi_data_partition_fops, NULL);
    if (wifi_data == NULL) {
        printk("%s: unable to create /proc/wifi_data entry\n", __func__);
    } else {
        wifi_data->size = NVS_DATA_OFFSET;
    }

	return 0;
}
static int wifi_calibration_read_proc(char *page, char **start, off_t off,
					int count, int *eof, void *data)
{
	unsigned char *ptr;
	unsigned len;
#ifdef NVS_MSM_WIFI_DEBUG
	unsigned i;
#endif

	memcpy(page, nvs_mac_addr, NVS_MACADDR_SIZE);
	ptr = get_wifi_nvs_ram();
	len = min(wifi_get_nvs_size(), (unsigned)count);
	memcpy(page+NVS_MACADDR_SIZE, ptr, strlen(hardcoded_nvs));
#ifdef NVS_MSM_WIFI_DEBUG
	printk("WiFi Data len = %d \n", len);
	for(i=0;( i < len );i++) {
		printk("%c", *page++);
	}
#endif	
	return len;
}
int wifi_calibration_size_set(void)
{
	if (wifi_calibration != NULL)
		wifi_calibration->size = wifi_get_nvs_size();
	return 0;
}