@@ -35,13 +35,15 @@
#include <linux/of.h>
#include <linux/of_address.h>
-void __iomem *omap_control_base;
+void __iomem *omap_control_status_reg;
unsigned long omap_control_phys_base;
size_t omap_control_mapsize;
u32 omap_control_status_read(void)
Then, if you want to move omap_control_status_reg(omap_control_base) initialization to the
omap2_set_globals_control(), it can be done following way:
@@ -149,6 +149,8 @@ static struct omap3_control_regs control_context;
#define OMAP_CTRL_REGADDR(reg) (omap2_ctrl_base + (reg))
#define OMAP4_CTRL_PAD_REGADDR(reg) (omap4_ctrl_pad_base + (reg))
+extern void __iomem *omap_control_status_reg;
+
void __init omap2_set_globals_control(struct omap_globals *omap2_globals)
{
if (omap2_globals->ctrl)
@@ -156,6 +158,20 @@ void __init omap2_set_globals_control(struct omap_globals *omap2_globals)
if (omap2_globals->ctrl_pad)
omap4_ctrl_pad_base = omap2_globals->ctrl_pad;
+
+ omap_control_status_reg = omap2_ctrl_base;
+ if (cpu_is_omap24xx())
+ omap_control_status_reg += OMAP24XX_CONTROL_STATUS;
+ else if (soc_is_am33xx())
+ omap_control_status_reg += AM33XX_CONTROL_STATUS;
+ else if (cpu_is_omap34xx())
+ omap_control_status_reg += OMAP343X_CONTROL_STATUS;
+ else if (cpu_is_omap44xx())
+ omap_control_status_reg += OMAP4_CTRL_MODULE_CORE_STATUS;
+ else if (soc_is_omap54xx())
+ omap_control_status_reg += OMAP5XXX_CONTROL_STATUS;
+ else
+ omap_control_status_reg = 0;
}
void __iomem *omap_ctrl_base_get(void)
Then omap_type() can be changed:
@@ -39,31 +39,27 @@ unsigned int omap_rev(void)
}
EXPORT_SYMBOL(omap_rev);
+extern void __iomem *omap_control_status_reg;
+
int omap_type(void)
{
u32 val = 0;
- if (cpu_is_omap24xx()) {
- val = omap_control_status_read();
- } else if (soc_is_am33xx()) {
- val = omap_control_status_read();
- } else if (cpu_is_omap34xx()) {
- val = omap_control_status_read();
- } else if (cpu_is_omap44xx()) {
+ if(!omap_control_status_reg) {
+ pr_err("Cannot detect omap type!\n");
+ goto out;
+ }
+
+ if(!soc_is_omap54xx()) {
val = omap_control_status_read();
- } else if (soc_is_omap54xx()) {
+ val &= OMAP2_DEVICETYPE_MASK;
+ val >>= 8;
+ } else {
val = omap_control_status_read();
val &= OMAP5_DEVICETYPE_MASK;
val >>= 6;
- goto out;
- } else {
- pr_err("Cannot detect omap type!\n");
- goto out;
}
- val &= OMAP2_DEVICETYPE_MASK;
- val >>= 8;
-
out:
return val;
}