misc: tegra-fuse: make chipid query overridable
Peng Du [Sun, 28 Dec 2014 00:22:03 +0000 (16:22 -0800)]
The chip_id register has been moved in newer SOCs, however
the old driver (tegra-fuse) cannot be easily adapted since
it has code to address a number of quirks of legacy chips,
which makes the overhauling the old driver very error prone.
This change is the first step towards cleaning up the chipid
driver. It makes the query of chipid function overridable,
which is sufficient to address the chipid HW change. Once
the legacy chips branch out of mainline, we can revamp the
chip_id driver properly.

Change-Id: I5f7a31cc0ba4de83796f8ad9a5f613bedaf9d458
Signed-off-by: Peng Du <pdu@nvidia.com>
Reviewed-on: http://git-master/r/667978
Reviewed-by: Adeel Raza <araza@nvidia.com>
Tested-by: Adeel Raza <araza@nvidia.com>
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>

drivers/misc/tegra-fuse/tegra_fuse.c
include/linux/tegra-soc.h

index 8ccba3d..2703be1 100644 (file)
@@ -520,9 +520,8 @@ static enum tegra_revision tegra_decode_revision(const struct tegra_id *id)
        return revision;
 }
 
-static void tegra_set_tegraid(u32 chipid,
-                                       u32 major, u32 minor,
-                                       u32 nlist, u32 patch, const char *priv)
+void tegra_set_tegraid(u32 chipid, u32 major, u32 minor,
+       u32 nlist, u32 patch, const char *priv)
 {
        tegra_id.chipid  = (enum tegra_chipid) chipid;
        tegra_id.major   = major;
@@ -564,7 +563,8 @@ static void tegra_fuse_cfg_reg_visible(void)
        writel(reg, IO_ADDRESS(TEGRA_CLK_RESET_BASE + 0x48));
 }
 
-static void tegra_get_tegraid_from_hw(void)
+/* Overridable by implementation of future platforms */
+__weak void tegra_get_tegraid_from_hw(void)
 {
        u32 cid;
        u32 nlist;
index 18a9db0..aeb76f8 100644 (file)
@@ -211,4 +211,8 @@ static inline bool tegra_platform_is_fpga(void)
 
 bool tegra_bonded_out_dev(enum tegra_bondout_dev);
 
+extern void tegra_set_tegraid(u32 chipid, u32 major, u32 minor,
+       u32 nlist, u32 patch, const char *priv);
+extern void tegra_get_tegraid_from_hw(void);
+
 #endif /* __LINUX_TEGRA_SOC_H_ */