diff mbox

[v3,3/3] ASoC: Intel: atom: Add sysfs entry in order to store FW version

Message ID 20161123074513.28661-4-sebastien.guiriec@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Sebastien Guiriec Nov. 23, 2016, 7:45 a.m. UTC
This patch is adding a sysfs entry in order to be able to get
access to SST FW version.

Signed-off-by: Sebastien Guiriec <sebastien.guiriec@intel.com>
Acked-by: Vinod Koul <vinod.koul@intel.com>
---
 sound/soc/intel/atom/sst/sst.c | 39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

Comments

Vinod Koul Nov. 23, 2016, 8:08 a.m. UTC | #1
On Wed, Nov 23, 2016 at 08:45:13AM +0100, Sebastien Guiriec wrote:

> +static ssize_t firmware_version_show(struct device *dev,
> +			    struct device_attribute *attr, char *buf)
> +{
> +	struct intel_sst_drv *ctx = dev_get_drvdata(dev);
> +
> +	if (ctx->fw_version.type == 0 && ctx->fw_version.major == 0 &&
> +	    ctx->fw_version.minor == 0 && ctx->fw_version.build == 0)
> +		return sprintf(buf, "FW not yet loaded\n");
> +	else
> +		return sprintf(buf, "v%02x.%02x.%02x.%02x\n",
> +			       ctx->fw_version.type, ctx->fw_version.major,
> +			       ctx->fw_version.minor, ctx->fw_version.build);
> +
> +}
> +
> +DEVICE_ATTR_RO(firmware_version);
> +
> +static const struct attribute *sst_fw_version_attrs[] = {
> +	&dev_attr_firmware_version.attr,
> +	NULL,
> +};
> +
> +static const struct attribute_group sst_fw_version_attr_group = {
> +	.attrs = (struct attribute **)sst_fw_version_attrs,
> +};

Hi Seb,

With each sysfs file (which is an ABI) we are supposed to update
Documentation/ABI/ as well, can you please add it

Sorry should have told you in last rev :(
diff mbox

Patch

diff --git a/sound/soc/intel/atom/sst/sst.c b/sound/soc/intel/atom/sst/sst.c
index a4b458e..9d35706 100644
--- a/sound/soc/intel/atom/sst/sst.c
+++ b/sound/soc/intel/atom/sst/sst.c
@@ -27,6 +27,7 @@ 
 #include <linux/pm_qos.h>
 #include <linux/async.h>
 #include <linux/acpi.h>
+#include <linux/sysfs.h>
 #include <sound/core.h>
 #include <sound/soc.h>
 #include <asm/platform_sst_audio.h>
@@ -241,6 +242,32 @@  int sst_alloc_drv_context(struct intel_sst_drv **ctx,
 }
 EXPORT_SYMBOL_GPL(sst_alloc_drv_context);
 
+static ssize_t firmware_version_show(struct device *dev,
+			    struct device_attribute *attr, char *buf)
+{
+	struct intel_sst_drv *ctx = dev_get_drvdata(dev);
+
+	if (ctx->fw_version.type == 0 && ctx->fw_version.major == 0 &&
+	    ctx->fw_version.minor == 0 && ctx->fw_version.build == 0)
+		return sprintf(buf, "FW not yet loaded\n");
+	else
+		return sprintf(buf, "v%02x.%02x.%02x.%02x\n",
+			       ctx->fw_version.type, ctx->fw_version.major,
+			       ctx->fw_version.minor, ctx->fw_version.build);
+
+}
+
+DEVICE_ATTR_RO(firmware_version);
+
+static const struct attribute *sst_fw_version_attrs[] = {
+	&dev_attr_firmware_version.attr,
+	NULL,
+};
+
+static const struct attribute_group sst_fw_version_attr_group = {
+	.attrs = (struct attribute **)sst_fw_version_attrs,
+};
+
 int sst_context_init(struct intel_sst_drv *ctx)
 {
 	int ret = 0, i;
@@ -314,8 +341,19 @@  int sst_context_init(struct intel_sst_drv *ctx)
 		dev_err(ctx->dev, "Firmware download failed:%d\n", ret);
 		goto do_free_mem;
 	}
+
+	ret = sysfs_create_group(&ctx->dev->kobj,
+				 &sst_fw_version_attr_group);
+	if (ret) {
+		dev_err(ctx->dev,
+			"Unable to create sysfs\n");
+		goto err_sysfs;
+	}
+
 	sst_register(ctx->dev);
 	return 0;
+err_sysfs:
+	sysfs_remove_group(&ctx->dev->kobj, &sst_fw_version_attr_group);
 
 do_free_mem:
 	destroy_workqueue(ctx->post_msg_wq);
@@ -329,6 +367,7 @@  void sst_context_cleanup(struct intel_sst_drv *ctx)
 	pm_runtime_disable(ctx->dev);
 	sst_unregister(ctx->dev);
 	sst_set_fw_state_locked(ctx, SST_SHUTDOWN);
+	sysfs_remove_group(&ctx->dev->kobj, &sst_fw_version_attr_group);
 	flush_scheduled_work();
 	destroy_workqueue(ctx->post_msg_wq);
 	pm_qos_remove_request(ctx->qos);