[PATCH RFC] ARM: EXYNOS5: Setup legacy i2c controller interrupts on SMDK5250

Thomas Abraham thomas.abraham at linaro.org
Tue Nov 6 03:15:33 EST 2012


On 6 November 2012 11:48, Abhilash Kesavan <a.kesavan at samsung.com> wrote:
> On Exynos5 we have a new high-speed i2c controller. The interrupt
> sources for the legacy and new controller are muxed and are controlled
> via the SYSCON I2C_CFG register.
> At reset the interrupt source is configured for the high-speed controller,
> to continue using the old i2c controller we need to modify the I2C_CFG
> register.

If the high-speed i2c controllers are not used, can this configuration
be moved into the bootloader?

The other option could be, in the exynos5250_dt_machine_init()
function, first check if the platform is compatible with
"samsung,exynos5250" and if so search for a high-speed i2c controller
compatible node. If a high-speed controller node is found and if that
node is not disabled, then do not change the reset value of I2C_CFG
register.

Thanks,
Thomas.

>
> Signed-off-by: Abhilash Kesavan <a.kesavan at samsung.com>
> ---
> This is a hack, I am not quite clear on how to handle this via DT. Suggestions
> welcome.
>
>  arch/arm/mach-exynos/mach-exynos5-dt.c |   10 ++++++++++
>  1 files changed, 10 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/mach-exynos/mach-exynos5-dt.c b/arch/arm/mach-exynos/mach-exynos5-dt.c
> index ed37273..badffd4 100644
> --- a/arch/arm/mach-exynos/mach-exynos5-dt.c
> +++ b/arch/arm/mach-exynos/mach-exynos5-dt.c
> @@ -13,10 +13,12 @@
>  #include <linux/serial_core.h>
>  #include <linux/memblock.h>
>  #include <linux/of_fdt.h>
> +#include <linux/io.h>
>
>  #include <asm/mach/arch.h>
>  #include <asm/hardware/gic.h>
>  #include <mach/map.h>
> +#include <mach/regs-pmu.h>
>
>  #include <plat/cpu.h>
>  #include <plat/regs-serial.h>
> @@ -89,6 +91,12 @@ static const struct of_dev_auxdata exynos5250_auxdata_lookup[] __initconst = {
>         {},
>  };
>
> +static void exynos5_i2c_setup(void)
> +{
> +       /* Setup the low-speed i2c controller interrupts */
> +       writel(0x0, EXYNOS5_SYS_I2C_CFG);
> +}
> +
>  static void __init exynos5250_dt_map_io(void)
>  {
>         exynos_init_io(NULL, 0);
> @@ -97,6 +105,8 @@ static void __init exynos5250_dt_map_io(void)
>
>  static void __init exynos5250_dt_machine_init(void)
>  {
> +       exynos5_i2c_setup();
> +
>         of_platform_populate(NULL, of_default_bus_match_table,
>                                 exynos5250_auxdata_lookup, NULL);
>  }
> --
> 1.6.6.1
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel



More information about the linux-arm-kernel mailing list