diff options
-rw-r--r-- | arch/arm/mach-mvebu/armada-370-xp.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/arch/arm/mach-mvebu/armada-370-xp.c b/arch/arm/mach-mvebu/armada-370-xp.c index e2acff98e750..f6c9d1d85c14 100644 --- a/arch/arm/mach-mvebu/armada-370-xp.c +++ b/arch/arm/mach-mvebu/armada-370-xp.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include <linux/clocksource.h> | 21 | #include <linux/clocksource.h> |
22 | #include <linux/dma-mapping.h> | 22 | #include <linux/dma-mapping.h> |
23 | #include <linux/mbus.h> | 23 | #include <linux/mbus.h> |
24 | #include <linux/slab.h> | ||
24 | #include <asm/hardware/cache-l2x0.h> | 25 | #include <asm/hardware/cache-l2x0.h> |
25 | #include <asm/mach/arch.h> | 26 | #include <asm/mach/arch.h> |
26 | #include <asm/mach/map.h> | 27 | #include <asm/mach/map.h> |
@@ -28,6 +29,7 @@ | |||
28 | #include "armada-370-xp.h" | 29 | #include "armada-370-xp.h" |
29 | #include "common.h" | 30 | #include "common.h" |
30 | #include "coherency.h" | 31 | #include "coherency.h" |
32 | #include "mvebu-soc-id.h" | ||
31 | 33 | ||
32 | static void __init armada_370_xp_map_io(void) | 34 | static void __init armada_370_xp_map_io(void) |
33 | { | 35 | { |
@@ -45,8 +47,38 @@ static void __init armada_370_xp_timer_and_clk_init(void) | |||
45 | #endif | 47 | #endif |
46 | } | 48 | } |
47 | 49 | ||
50 | static void __init i2c_quirk(void) | ||
51 | { | ||
52 | struct device_node *np; | ||
53 | u32 dev, rev; | ||
54 | |||
55 | /* | ||
56 | * Only revisons more recent than A0 support the offload | ||
57 | * mechanism. We can exit only if we are sure that we can | ||
58 | * get the SoC revision and it is more recent than A0. | ||
59 | */ | ||
60 | if (mvebu_get_soc_id(&rev, &dev) == 0 && dev > MV78XX0_A0_REV) | ||
61 | return; | ||
62 | |||
63 | for_each_compatible_node(np, NULL, "marvell,mv78230-i2c") { | ||
64 | struct property *new_compat; | ||
65 | |||
66 | new_compat = kzalloc(sizeof(*new_compat), GFP_KERNEL); | ||
67 | |||
68 | new_compat->name = kstrdup("compatible", GFP_KERNEL); | ||
69 | new_compat->length = sizeof("marvell,mv78230-a0-i2c"); | ||
70 | new_compat->value = kstrdup("marvell,mv78230-a0-i2c", | ||
71 | GFP_KERNEL); | ||
72 | |||
73 | of_update_property(np, new_compat); | ||
74 | } | ||
75 | return; | ||
76 | } | ||
77 | |||
48 | static void __init armada_370_xp_dt_init(void) | 78 | static void __init armada_370_xp_dt_init(void) |
49 | { | 79 | { |
80 | if (of_machine_is_compatible("plathome,openblocks-ax3-4")) | ||
81 | i2c_quirk(); | ||
50 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); | 82 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); |
51 | } | 83 | } |
52 | 84 | ||