summaryrefslogtreecommitdiffstats
path: root/drivers/staging/ti-st/st_kim.c
diff options
context:
space:
mode:
authorNaveen Jain <naveen_jain@ti.com>2010-06-09 03:45:33 -0500
committerGreg Kroah-Hartman <gregkh@suse.de>2010-06-18 12:39:38 -0700
commite2a53282859fab0e428a243cbe9ca8d727d9d840 (patch)
treec348e88a479d4ba7738595e5af962977d49eb484 /drivers/staging/ti-st/st_kim.c
parentb38fc2d965c3182c1855f868144a41a137e07983 (diff)
Staging: ti-st: add version info to sysfs
Add version information to be available under the sysfs group for kim. Signed-off-by: Naveen Jain <naveen_jain@ti.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/ti-st/st_kim.c')
-rw-r--r--drivers/staging/ti-st/st_kim.c40
1 files changed, 35 insertions, 5 deletions
diff --git a/drivers/staging/ti-st/st_kim.c b/drivers/staging/ti-st/st_kim.c
index cfba5f88abe..d015ad3c460 100644
--- a/drivers/staging/ti-st/st_kim.c
+++ b/drivers/staging/ti-st/st_kim.c
@@ -56,12 +56,13 @@ static struct platform_driver kim_platform_driver = {
};
static ssize_t show_pid(struct device *dev, struct device_attribute
- *attr, char *buf);
+ *attr, char *buf);
static ssize_t store_pid(struct device *dev, struct device_attribute
- *devattr, char *buf, size_t count);
+ *devattr, char *buf, size_t count);
static ssize_t show_list(struct device *dev, struct device_attribute
- *attr, char *buf);
-
+ *attr, char *buf);
+static ssize_t show_version(struct device *dev, struct device_attribute
+ *attr, char *buf);
/* structures specific for sysfs entries */
static struct kobj_attribute pid_attr =
__ATTR(pid, 0644, (void *)show_pid, (void *)store_pid);
@@ -69,10 +70,14 @@ __ATTR(pid, 0644, (void *)show_pid, (void *)store_pid);
static struct kobj_attribute list_protocols =
__ATTR(protocols, 0444, (void *)show_list, NULL);
+static struct kobj_attribute chip_version =
+__ATTR(version, 0444, (void *)show_version, NULL);
+
static struct attribute *uim_attrs[] = {
&pid_attr.attr,
/* add more debug sysfs entries */
&list_protocols.attr,
+ &chip_version.attr,
NULL,
};
@@ -251,7 +256,8 @@ static long read_local_version(char *bts_scr_name)
}
version =
- MAKEWORD(kim_gdata->resp_buffer[13], kim_gdata->resp_buffer[14]);
+ MAKEWORD(kim_gdata->resp_buffer[13],
+ kim_gdata->resp_buffer[14]);
chip = (version & 0x7C00) >> 10;
min_ver = (version & 0x007F);
maj_ver = (version & 0x0380) >> 7;
@@ -260,6 +266,13 @@ static long read_local_version(char *bts_scr_name)
maj_ver |= 0x0008;
sprintf(bts_scr_name, "TIInit_%d.%d.%d.bts", chip, maj_ver, min_ver);
+
+ /* to be accessed later via sysfs entry */
+ kim_gdata->version.full = version;
+ kim_gdata->version.chip = chip;
+ kim_gdata->version.maj_ver = maj_ver;
+ kim_gdata->version.min_ver = min_ver;
+
pr_info("%s", bts_scr_name);
return ST_SUCCESS;
}
@@ -516,6 +529,16 @@ long st_kim_stop(void)
/**********************************************************************/
/* functions called from subsystems */
+/* called when sysfs entry is read from */
+
+static ssize_t show_version(struct device *dev, struct device_attribute
+ *attr, char *buf)
+{
+ sprintf(buf, "%04X %d.%d.%d", kim_gdata->version.full,
+ kim_gdata->version.chip, kim_gdata->version.maj_ver,
+ kim_gdata->version.min_ver);
+ return strlen(buf);
+}
/* called when sysfs entry is written to */
static ssize_t store_pid(struct device *dev, struct device_attribute
@@ -656,6 +679,12 @@ static int kim_probe(struct platform_device *pdev)
}
pr_info("rfkill entry created for %ld", gpios[proto]);
}
+
+ if (sysfs_create_group(&pdev->dev.kobj, &uim_attr_grp)) {
+ pr_err(" sysfs entry creation failed");
+ return -1;
+ }
+ pr_info(" sysfs entries created ");
return ST_SUCCESS;
}
@@ -676,6 +705,7 @@ static int kim_remove(struct platform_device *pdev)
kim_gdata->rfkill[proto] = NULL;
}
pr_info("kim: GPIO Freed");
+ sysfs_remove_group(&pdev->dev.kobj, &uim_attr_grp);
kim_gdata->kim_pdev = NULL;
st_core_exit(kim_gdata->core_data);
return ST_SUCCESS;