diff options
| author | Dilip Kota <dkota@codeaurora.org> | 2017-12-22 16:40:49 +0530 |
|---|---|---|
| committer | Dilip Kota <dkota@codeaurora.org> | 2018-01-30 14:54:29 +0530 |
| commit | 4938bb02a80abb5de1f6e9e3d43c0ff16b4a99de (patch) | |
| tree | ccb0d283f23ad6c405d7fe3372296ff48065d066 /drivers/spi | |
| parent | 4ac5f8ab03ae1616d2f6a96319cdec5230b334d0 (diff) | |
spi_qsd: Add sysfs entry for QUP state
QUP state entry exposes the state of the SPI QUP
hardware. It tells whether SPI QUP is in run state,
pause state or reset state.
Change-Id: Idc012a30f78846ff5b4c6da20adcf68a7cd2b4d3
Signed-off-by: Dilip Kota <dkota@codeaurora.org>
Diffstat (limited to 'drivers/spi')
| -rw-r--r-- | drivers/spi/spi_qsd.c | 32 | ||||
| -rw-r--r-- | drivers/spi/spi_qsd.h | 3 |
2 files changed, 33 insertions, 2 deletions
diff --git a/drivers/spi/spi_qsd.c b/drivers/spi/spi_qsd.c index b8826b59ca23..5fd1565d692f 100644 --- a/drivers/spi/spi_qsd.c +++ b/drivers/spi/spi_qsd.c @@ -552,7 +552,7 @@ static inline int msm_spi_set_state(struct msm_spi *dd, } if (msm_spi_wait_valid(dd)) return -EIO; - + atomic_set(&dd->qup_state, state); return 0; } @@ -2040,6 +2040,33 @@ static ssize_t set_stats(struct device *dev, struct device_attribute *attr, static DEVICE_ATTR(stats, S_IRUGO | S_IWUSR, show_stats, set_stats); +static ssize_t show_qup_state(struct device *dev, + struct device_attribute *attr, char *buf) +{ + ssize_t ret = 0; + struct platform_device *pdev = container_of(dev, struct + platform_device, dev); + struct spi_master *master = platform_get_drvdata(pdev); + struct msm_spi *dd; + + dd = spi_master_get_devdata(master); + /* This check should not fail */ + if (dd) + ret = snprintf(buf, sizeof(int), "%u\n", + atomic_read(&dd->qup_state)); + return ret; +} + +static ssize_t set_qup_state(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + return 1; +} + +static DEVICE_ATTR(spi_qup_state, S_IWUSR | S_IRUGO, + show_qup_state, set_qup_state); + static struct attribute *dev_attrs[] = { &dev_attr_stats.attr, NULL, @@ -2617,6 +2644,7 @@ static int msm_spi_probe(struct platform_device *pdev) dd->mem_size = resource_size(resource); dd->dev = &pdev->dev; + atomic_set(&dd->qup_state, SPI_OP_STATE_RESET); if (pdata) { master->rt = pdata->rt_priority; if (pdata->dma_config) { @@ -2690,6 +2718,7 @@ skip_dma_resources: dev_err(&pdev->dev, "failed to create dev. attrs : %d\n", rc); goto err_attrs; } + rc = sysfs_create_file(&(dd->dev->kobj), &dev_attr_spi_qup_state.attr); spi_debugfs_init(dd); return 0; @@ -2843,6 +2872,7 @@ static int msm_spi_remove(struct platform_device *pdev) spi_debugfs_exit(dd); sysfs_remove_group(&pdev->dev.kobj, &dev_attr_grp); + sysfs_remove_file(&pdev->dev.kobj, &dev_attr_spi_qup_state.attr); if (dd->dma_teardown) dd->dma_teardown(dd); diff --git a/drivers/spi/spi_qsd.h b/drivers/spi/spi_qsd.h index 6632fe806e41..09b9cb9d5b7d 100644 --- a/drivers/spi/spi_qsd.h +++ b/drivers/spi/spi_qsd.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2014-2017, The Linux Foundation. All rights reserved. +/* Copyright (c) 2014-2018, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -405,6 +405,7 @@ struct msm_spi { bool is_init_complete; bool pack_words; bool slv_support; + atomic_t qup_state; }; /* Forward declaration */ |
