Loading arch/arm/mach-msm/socinfo.c +98 −17 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ #define SMEM_IMAGE_VERSION_VARIANT_OFFSET 75 #define SMEM_IMAGE_VERSION_OEM_SIZE 32 #define SMEM_IMAGE_VERSION_OEM_OFFSET 96 #define SMEM_IMAGE_VERSION_PARTITION_APPS 10 enum { HW_PLATFORM_UNKNOWN = 0, Loading Loading @@ -662,23 +663,28 @@ msm_get_image_version(struct device *dev, } string_address += current_image * SMEM_IMAGE_VERSION_SINGLE_BLOCK_SIZE; string_address += SMEM_IMAGE_VERSION_NAME_OFFSET; return snprintf(buf, SMEM_IMAGE_VERSION_NAME_SIZE, "%-.75s", return snprintf(buf, SMEM_IMAGE_VERSION_NAME_SIZE, "%-.72s\n", string_address); } static ssize_t msm_store_image_type(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) msm_set_image_version(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { int ret, digit; char *store_address; ret = kstrtoint(buf, 10, &digit); if (ret) return ret; if (0 <= digit && digit < SMEM_IMAGE_VERSION_BLOCKS_COUNT) current_image = digit; else current_image = 0; if (current_image != SMEM_IMAGE_VERSION_PARTITION_APPS) return count; store_address = socinfo_get_image_version_base_address(); if (store_address == NULL) { pr_err("%s : Failed to get image version base address", __func__); return count; } store_address += current_image * SMEM_IMAGE_VERSION_SINGLE_BLOCK_SIZE; snprintf(store_address, SMEM_IMAGE_VERSION_NAME_SIZE, "%-.75s", buf); return count; } Loading @@ -698,10 +704,32 @@ msm_get_image_variant(struct device *dev, } string_address += current_image * SMEM_IMAGE_VERSION_SINGLE_BLOCK_SIZE; string_address += SMEM_IMAGE_VERSION_VARIANT_OFFSET; return snprintf(buf, SMEM_IMAGE_VERSION_VARIANT_SIZE, "%-.20s", return snprintf(buf, SMEM_IMAGE_VERSION_VARIANT_SIZE, "%-.20s\n", string_address); } static ssize_t msm_set_image_variant(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { char *store_address; if (current_image != SMEM_IMAGE_VERSION_PARTITION_APPS) return count; store_address = socinfo_get_image_version_base_address(); if (store_address == NULL) { pr_err("%s : Failed to get image version base address", __func__); return count; } store_address += current_image * SMEM_IMAGE_VERSION_SINGLE_BLOCK_SIZE; store_address += SMEM_IMAGE_VERSION_VARIANT_OFFSET; snprintf(store_address, SMEM_IMAGE_VERSION_VARIANT_SIZE, "%-.20s", buf); return count; } static ssize_t msm_get_image_crm_version(struct device *dev, struct device_attribute *attr, Loading @@ -721,6 +749,54 @@ msm_get_image_crm_version(struct device *dev, string_address); } static ssize_t msm_set_image_crm_version(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { char *store_address; if (current_image != SMEM_IMAGE_VERSION_PARTITION_APPS) return count; store_address = socinfo_get_image_version_base_address(); if (store_address == NULL) { pr_err("%s : Failed to get image version base address", __func__); return count; } store_address += current_image * SMEM_IMAGE_VERSION_SINGLE_BLOCK_SIZE; store_address += SMEM_IMAGE_VERSION_OEM_OFFSET; snprintf(store_address, SMEM_IMAGE_VERSION_OEM_SIZE, "%-.32s", buf); return count; } static ssize_t msm_get_image_number(struct device *dev, struct device_attribute *attr, char *buf) { return snprintf(buf, PAGE_SIZE, "%d\n", current_image); } static ssize_t msm_select_image(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { int ret, digit; ret = kstrtoint(buf, 10, &digit); if (ret) return ret; if (0 <= digit && digit < SMEM_IMAGE_VERSION_BLOCKS_COUNT) current_image = digit; else current_image = 0; return count; } static struct device_attribute msm_soc_attr_raw_version = __ATTR(raw_version, S_IRUGO, msm_get_raw_version, NULL); Loading Loading @@ -766,15 +842,19 @@ static struct device_attribute msm_soc_attr_pmic_die_revision = static struct device_attribute image_version = __ATTR(image_version, S_IRUGO | S_IWUSR, msm_get_image_version, msm_store_image_type); msm_get_image_version, msm_set_image_version); static struct device_attribute image_variant = __ATTR(image_variant, S_IRUGO, msm_get_image_variant, NULL); __ATTR(image_variant, S_IRUGO | S_IWUSR, msm_get_image_variant, msm_set_image_variant); static struct device_attribute image_crm_version = __ATTR(image_crm_version, S_IRUGO, msm_get_image_crm_version, NULL); __ATTR(image_crm_version, S_IRUGO | S_IWUSR, msm_get_image_crm_version, msm_set_image_crm_version); static struct device_attribute select_image = __ATTR(select_image, S_IRUGO | S_IWUGO, msm_get_image_number, msm_select_image); static void * __init setup_dummy_socinfo(void) { Loading Loading @@ -808,6 +888,7 @@ static void __init populate_soc_sysfs_files(struct device *msm_soc_device) device_create_file(msm_soc_device, &image_version); device_create_file(msm_soc_device, &image_variant); device_create_file(msm_soc_device, &image_crm_version); device_create_file(msm_soc_device, &select_image); switch (legacy_format) { case 8: Loading Loading
arch/arm/mach-msm/socinfo.c +98 −17 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ #define SMEM_IMAGE_VERSION_VARIANT_OFFSET 75 #define SMEM_IMAGE_VERSION_OEM_SIZE 32 #define SMEM_IMAGE_VERSION_OEM_OFFSET 96 #define SMEM_IMAGE_VERSION_PARTITION_APPS 10 enum { HW_PLATFORM_UNKNOWN = 0, Loading Loading @@ -662,23 +663,28 @@ msm_get_image_version(struct device *dev, } string_address += current_image * SMEM_IMAGE_VERSION_SINGLE_BLOCK_SIZE; string_address += SMEM_IMAGE_VERSION_NAME_OFFSET; return snprintf(buf, SMEM_IMAGE_VERSION_NAME_SIZE, "%-.75s", return snprintf(buf, SMEM_IMAGE_VERSION_NAME_SIZE, "%-.72s\n", string_address); } static ssize_t msm_store_image_type(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) msm_set_image_version(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { int ret, digit; char *store_address; ret = kstrtoint(buf, 10, &digit); if (ret) return ret; if (0 <= digit && digit < SMEM_IMAGE_VERSION_BLOCKS_COUNT) current_image = digit; else current_image = 0; if (current_image != SMEM_IMAGE_VERSION_PARTITION_APPS) return count; store_address = socinfo_get_image_version_base_address(); if (store_address == NULL) { pr_err("%s : Failed to get image version base address", __func__); return count; } store_address += current_image * SMEM_IMAGE_VERSION_SINGLE_BLOCK_SIZE; snprintf(store_address, SMEM_IMAGE_VERSION_NAME_SIZE, "%-.75s", buf); return count; } Loading @@ -698,10 +704,32 @@ msm_get_image_variant(struct device *dev, } string_address += current_image * SMEM_IMAGE_VERSION_SINGLE_BLOCK_SIZE; string_address += SMEM_IMAGE_VERSION_VARIANT_OFFSET; return snprintf(buf, SMEM_IMAGE_VERSION_VARIANT_SIZE, "%-.20s", return snprintf(buf, SMEM_IMAGE_VERSION_VARIANT_SIZE, "%-.20s\n", string_address); } static ssize_t msm_set_image_variant(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { char *store_address; if (current_image != SMEM_IMAGE_VERSION_PARTITION_APPS) return count; store_address = socinfo_get_image_version_base_address(); if (store_address == NULL) { pr_err("%s : Failed to get image version base address", __func__); return count; } store_address += current_image * SMEM_IMAGE_VERSION_SINGLE_BLOCK_SIZE; store_address += SMEM_IMAGE_VERSION_VARIANT_OFFSET; snprintf(store_address, SMEM_IMAGE_VERSION_VARIANT_SIZE, "%-.20s", buf); return count; } static ssize_t msm_get_image_crm_version(struct device *dev, struct device_attribute *attr, Loading @@ -721,6 +749,54 @@ msm_get_image_crm_version(struct device *dev, string_address); } static ssize_t msm_set_image_crm_version(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { char *store_address; if (current_image != SMEM_IMAGE_VERSION_PARTITION_APPS) return count; store_address = socinfo_get_image_version_base_address(); if (store_address == NULL) { pr_err("%s : Failed to get image version base address", __func__); return count; } store_address += current_image * SMEM_IMAGE_VERSION_SINGLE_BLOCK_SIZE; store_address += SMEM_IMAGE_VERSION_OEM_OFFSET; snprintf(store_address, SMEM_IMAGE_VERSION_OEM_SIZE, "%-.32s", buf); return count; } static ssize_t msm_get_image_number(struct device *dev, struct device_attribute *attr, char *buf) { return snprintf(buf, PAGE_SIZE, "%d\n", current_image); } static ssize_t msm_select_image(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { int ret, digit; ret = kstrtoint(buf, 10, &digit); if (ret) return ret; if (0 <= digit && digit < SMEM_IMAGE_VERSION_BLOCKS_COUNT) current_image = digit; else current_image = 0; return count; } static struct device_attribute msm_soc_attr_raw_version = __ATTR(raw_version, S_IRUGO, msm_get_raw_version, NULL); Loading Loading @@ -766,15 +842,19 @@ static struct device_attribute msm_soc_attr_pmic_die_revision = static struct device_attribute image_version = __ATTR(image_version, S_IRUGO | S_IWUSR, msm_get_image_version, msm_store_image_type); msm_get_image_version, msm_set_image_version); static struct device_attribute image_variant = __ATTR(image_variant, S_IRUGO, msm_get_image_variant, NULL); __ATTR(image_variant, S_IRUGO | S_IWUSR, msm_get_image_variant, msm_set_image_variant); static struct device_attribute image_crm_version = __ATTR(image_crm_version, S_IRUGO, msm_get_image_crm_version, NULL); __ATTR(image_crm_version, S_IRUGO | S_IWUSR, msm_get_image_crm_version, msm_set_image_crm_version); static struct device_attribute select_image = __ATTR(select_image, S_IRUGO | S_IWUGO, msm_get_image_number, msm_select_image); static void * __init setup_dummy_socinfo(void) { Loading Loading @@ -808,6 +888,7 @@ static void __init populate_soc_sysfs_files(struct device *msm_soc_device) device_create_file(msm_soc_device, &image_version); device_create_file(msm_soc_device, &image_variant); device_create_file(msm_soc_device, &image_crm_version); device_create_file(msm_soc_device, &select_image); switch (legacy_format) { case 8: Loading