diff options
author | Vinayak Pane <vpane@nvidia.com> | 2012-12-27 13:21:22 -0800 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2013-09-14 12:58:57 -0700 |
commit | b49461e95c598ce3a025f0d9c13b1bf1937a78f8 (patch) | |
tree | 62ff26890a31aad6fb354656d0d5dd694a4fc4f8 /arch/arm/mach-tegra/tegra_bb.c | |
parent | eca96685d0c86295e54102773f38020074fcc46e (diff) |
arm: tegra: tegra_bb: add sysfs node state
The sysfs node "state" will show state of BB2AP_MEM_REQ signal.
This essentially shows BBC's current power state as hibernate/active.
Bug 1160000
Change-Id: I40451552cbe4c8c13e8855788e59c15a821fad87
Signed-off-by: Vinayak Pane <vpane@nvidia.com>
Reviewed-on: http://git-master/r/194842
Reviewed-by: Seshendra Gadagottu <sgadagottu@nvidia.com>
Tested-by: Seshendra Gadagottu <sgadagottu@nvidia.com>
Diffstat (limited to 'arch/arm/mach-tegra/tegra_bb.c')
-rw-r--r-- | arch/arm/mach-tegra/tegra_bb.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/arch/arm/mach-tegra/tegra_bb.c b/arch/arm/mach-tegra/tegra_bb.c index acc1dfb34a9c..0b655fc57045 100644 --- a/arch/arm/mach-tegra/tegra_bb.c +++ b/arch/arm/mach-tegra/tegra_bb.c @@ -45,6 +45,7 @@ #define APBDEV_PMC_IPC_PMC_IPC_STS_0 (0x500) #define APBDEV_PMC_IPC_PMC_IPC_STS_0_AP2BB_RESET_SHIFT (1) #define APBDEV_PMC_IPC_PMC_IPC_STS_0_AP2BB_RESET_DEFAULT_MASK (1) +#define APBDEV_PMC_IPC_PMC_IPC_STS_0_BB2AP_MEM_REQ_SHIFT (3) #define APBDEV_PMC_IPC_PMC_IPC_SET_0 (0x504) #define APBDEV_PMC_IPC_PMC_IPC_SET_0_AP2BB_RESET_SHIFT (1) @@ -539,6 +540,28 @@ static ssize_t show_tegra_bb_reset(struct device *dev, static DEVICE_ATTR(reset, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP, show_tegra_bb_reset, store_tegra_bb_reset); +static ssize_t show_tegra_bb_state(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + unsigned int sts, mem_req; + void __iomem *pmc = IO_ADDRESS(TEGRA_PMC_BASE); + struct platform_device *pdev = container_of(dev, + struct platform_device, + dev); + sts = readl(pmc + APBDEV_PMC_IPC_PMC_IPC_STS_0); + dev_dbg(&pdev->dev, "%s IPC_STS=0x%x\n", __func__, + (unsigned int)sts); + + mem_req = (sts >> APBDEV_PMC_IPC_PMC_IPC_STS_0_BB2AP_MEM_REQ_SHIFT) & 1; + + dev_dbg(&pdev->dev, "%s mem_req =%d\n", __func__, + (unsigned int)mem_req); + return sprintf(buf, "%d\n", (unsigned int)mem_req); +} + +static DEVICE_ATTR(state, S_IRUSR | S_IRGRP, show_tegra_bb_state, NULL); + #ifndef CONFIG_TEGRA_BASEBAND_SIMU static irqreturn_t tegra_bb_isr_handler(int irq, void *data) { @@ -749,6 +772,7 @@ static int tegra_bb_probe(struct platform_device *pdev) ret = device_create_file(&pdev->dev, &dev_attr_priv_size); ret = device_create_file(&pdev->dev, &dev_attr_ipc_size); ret = device_create_file(&pdev->dev, &dev_attr_reset); + ret = device_create_file(&pdev->dev, &dev_attr_state); bb->sd = sysfs_get_dirent(pdev->dev.kobj.sd, NULL, "status"); |