Commit d591fdf8 authored by Danny Huang's avatar Danny Huang Committed by Stephen Warren

ARM: tegra: expose chip ID and revision

Expose Tegra chip ID and revision in /sys/devices/soc for user mode
usage
Signed-off-by: default avatarDanny Huang <dahuang@nvidia.com>
Signed-off-by: default avatarStephen Warren <swarren@nvidia.com>
parent e562b865
...@@ -675,6 +675,7 @@ config ARCH_TEGRA ...@@ -675,6 +675,7 @@ config ARCH_TEGRA
select HAVE_CLK select HAVE_CLK
select HAVE_SMP select HAVE_SMP
select MIGHT_HAVE_CACHE_L2X0 select MIGHT_HAVE_CACHE_L2X0
select SOC_BUS
select SPARSE_IRQ select SPARSE_IRQ
select USE_OF select USE_OF
help help
......
...@@ -33,6 +33,8 @@ ...@@ -33,6 +33,8 @@
#include <linux/io.h> #include <linux/io.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/i2c-tegra.h> #include <linux/i2c-tegra.h>
#include <linux/slab.h>
#include <linux/sys_soc.h>
#include <linux/usb/tegra_usb_phy.h> #include <linux/usb/tegra_usb_phy.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
...@@ -42,6 +44,7 @@ ...@@ -42,6 +44,7 @@
#include "board.h" #include "board.h"
#include "common.h" #include "common.h"
#include "fuse.h"
#include "iomap.h" #include "iomap.h"
static struct tegra_ehci_platform_data tegra_ehci1_pdata = { static struct tegra_ehci_platform_data tegra_ehci1_pdata = {
...@@ -80,12 +83,36 @@ static struct of_dev_auxdata tegra20_auxdata_lookup[] __initdata = { ...@@ -80,12 +83,36 @@ static struct of_dev_auxdata tegra20_auxdata_lookup[] __initdata = {
static void __init tegra_dt_init(void) static void __init tegra_dt_init(void)
{ {
struct soc_device_attribute *soc_dev_attr;
struct soc_device *soc_dev;
struct device *parent = NULL;
soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
if (!soc_dev_attr)
goto out;
soc_dev_attr->family = kasprintf(GFP_KERNEL, "Tegra");
soc_dev_attr->revision = kasprintf(GFP_KERNEL, "%d", tegra_revision);
soc_dev_attr->soc_id = kasprintf(GFP_KERNEL, "%d", tegra_chip_id);
soc_dev = soc_device_register(soc_dev_attr);
if (IS_ERR(soc_dev)) {
kfree(soc_dev_attr->family);
kfree(soc_dev_attr->revision);
kfree(soc_dev_attr->soc_id);
kfree(soc_dev_attr);
goto out;
}
parent = soc_device_to_device(soc_dev);
/* /*
* Finished with the static registrations now; fill in the missing * Finished with the static registrations now; fill in the missing
* devices * devices
*/ */
out:
of_platform_populate(NULL, of_default_bus_match_table, of_platform_populate(NULL, of_default_bus_match_table,
tegra20_auxdata_lookup, NULL); tegra20_auxdata_lookup, parent);
} }
static void __init trimslice_init(void) static void __init trimslice_init(void)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment