[alsa-devel] [PATCH v3 0/3] ASoC: intel: atom: Add FW version information
This patch series is adding FW version information of SST. Version is both log as dev_info and sysfs entry.
Update since V1: - sysfs entry is set to "FW not yet loaded" in case we do not have loaded the FW once
Update since V2: - Add Vinod ack. https://www.spinics.net/lists/alsa-devel/msg56521.html
Sebastien Guiriec (3): ASoC: intel: atom: Add debug information related to FW version ASoC: Intel: atom: save FW version ASoC: Intel: atom: Add sysfs entry in order to store FW version
sound/soc/intel/atom/sst/sst.c | 39 ++++++++++++++++++++++++++++++++++++++ sound/soc/intel/atom/sst/sst.h | 1 + sound/soc/intel/atom/sst/sst_ipc.c | 10 +++++++++- 3 files changed, 49 insertions(+), 1 deletion(-)
This patch is adding debug information related 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_ipc.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/sound/soc/intel/atom/sst/sst_ipc.c b/sound/soc/intel/atom/sst/sst_ipc.c index 8afa6fe..92ffeaa 100644 --- a/sound/soc/intel/atom/sst/sst_ipc.c +++ b/sound/soc/intel/atom/sst/sst_ipc.c @@ -236,6 +236,9 @@ static void process_fw_init(struct intel_sst_drv *sst_drv_ctx, retval = init->result; goto ret; } + dev_info(sst_drv_ctx->dev, "FW Version %02x.%02x.%02x.%02x\n", + init->fw_version.type, init->fw_version.major, + init->fw_version.minor, init->fw_version.build);
ret: sst_wake_up_block(sst_drv_ctx, retval, FW_DWNL_ID, 0 , NULL, 0);
After the boot of the SST FW the firmware version is send back to the driver. This patch is saving the FW version inside the driver.
Signed-off-by: Sebastien Guiriec sebastien.guiriec@intel.com Acked-by: Vinod Koul vinod.koul@intel.com --- sound/soc/intel/atom/sst/sst.h | 1 + sound/soc/intel/atom/sst/sst_ipc.c | 5 +++++ 2 files changed, 6 insertions(+)
diff --git a/sound/soc/intel/atom/sst/sst.h b/sound/soc/intel/atom/sst/sst.h index 3f49386..5c9a51cc 100644 --- a/sound/soc/intel/atom/sst/sst.h +++ b/sound/soc/intel/atom/sst/sst.h @@ -436,6 +436,7 @@ struct intel_sst_drv { */ char firmware_name[FW_NAME_SIZE];
+ struct snd_sst_fw_version fw_version; struct sst_fw_save *fw_save; };
diff --git a/sound/soc/intel/atom/sst/sst_ipc.c b/sound/soc/intel/atom/sst/sst_ipc.c index 92ffeaa..8e88211 100644 --- a/sound/soc/intel/atom/sst/sst_ipc.c +++ b/sound/soc/intel/atom/sst/sst_ipc.c @@ -240,6 +240,11 @@ static void process_fw_init(struct intel_sst_drv *sst_drv_ctx, init->fw_version.type, init->fw_version.major, init->fw_version.minor, init->fw_version.build);
+ /* Save FW version */ + sst_drv_ctx->fw_version.type = init->fw_version.type; + sst_drv_ctx->fw_version.major = init->fw_version.major; + sst_drv_ctx->fw_version.minor = init->fw_version.minor; + sst_drv_ctx->fw_version.build = init->fw_version.build; ret: sst_wake_up_block(sst_drv_ctx, retval, FW_DWNL_ID, 0 , NULL, 0); }
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(+)
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);
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 :(
participants (2)
-
Sebastien Guiriec
-
Vinod Koul