diff options
Diffstat (limited to 'arch/arm/mach-mvebu/armada-370-xp.c')
| -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 | ||
