Merge branch 'exynos/pwm-clocksource' into late/multiplatform
authorArnd Bergmann <arnd@arndb.de>
Mon, 6 May 2013 21:49:09 +0000 (23:49 +0200)
committerArnd Bergmann <arnd@arndb.de>
Mon, 6 May 2013 21:49:09 +0000 (23:49 +0200)
This series from Tomasz Figa restores support for the pwm clocksource
in Exynos, which was broken during the conversion of the platform
to the common clk framework. The clocksource is only used in one
board in the mainline kernel (universal_c210), and this makes it
work for DT based probing as well as restoring the non-DT based
case.

* exynos/pwm-clocksource:
  ARM: dts: exynops4210: really add universal_c210 dts
  ARM: dts: exynos4210: Add basic dts file for universal_c210 board
  ARM: dts: exynos4: Add node for PWM device
  ARM: SAMSUNG: Do not register legacy timer interrupts on Exynos
  clocksource: samsung_pwm_timer: Work around rounding errors in clockevents core
  clocksource: samsung_pwm_timer: Correct programming of clock events
  clocksource: samsung_pwm_timer: Use proper clockevents max_delta
  clocksource: samsung_pwm_timer: Add support for non-DT platforms
  clocksource: samsung_pwm_timer: Drop unused samsung_pwm struct
  clocksource: samsung_pwm_timer: Keep all driver data in a structure
  clocksource: samsung_pwm_timer: Make PWM spinlock global
  clocksource: samsung_pwm_timer: Let platforms select the driver
  Documentation: Add device tree bindings for Samsung PWM timers
  clocksource: add samsung pwm timer driver

Conflicts:
arch/arm/boot/dts/Makefile
arch/arm/mach-exynos/common.c
drivers/clocksource/Kconfig
drivers/clocksource/Makefile

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
1  2 
arch/arm/boot/dts/Makefile
arch/arm/boot/dts/exynos4.dtsi
arch/arm/mach-exynos/common.c
arch/arm/plat-samsung/Kconfig
drivers/clocksource/Kconfig
drivers/clocksource/Makefile

index d3cd880d70b31e90703490a90d9866e5a7875858,ff48893d621cfe613c113d45b1172010631de1e4..2d870f4e4e2b18164c83ce9d63f518ee9bc86995
@@@ -42,10 -42,8 +42,11 @@@ dtb-$(CONFIG_ARCH_DOVE) += dove-cm-a510
  dtb-$(CONFIG_ARCH_EXYNOS) += exynos4210-origen.dtb \
        exynos4210-smdkv310.dtb \
        exynos4210-trats.dtb \
+       exynos4210-universal_c210.dtb \
 +      exynos4412-odroidx.dtb \
        exynos4412-smdk4412.dtb \
 +      exynos4412-origen.dtb \
 +      exynos5250-arndale.dtb \
        exynos5250-smdk5250.dtb \
        exynos5250-snow.dtb \
        exynos5440-ssdk5440.dtb
index 9ac47d51c40738063aa8ab5e317a9dee43ca3d29,4b866659ae98bb0e78a8bf3e8f158567eabaf9df..b620e34fbd92ae45eea9cbbcfa008231abb43823
@@@ -86,8 -86,6 +86,8 @@@
                compatible = "samsung,s3c2410-wdt";
                reg = <0x10060000 0x100>;
                interrupts = <0 43 0>;
 +              clocks = <&clock 345>;
 +              clock-names = "watchdog";
                status = "disabled";
        };
  
@@@ -95,8 -93,6 +95,8 @@@
                compatible = "samsung,s3c6410-rtc";
                reg = <0x10070000 0x100>;
                interrupts = <0 44 0>, <0 45 0>;
 +              clocks = <&clock 346>;
 +              clock-names = "rtc";
                status = "disabled";
        };
  
                compatible = "samsung,s5pv210-keypad";
                reg = <0x100A0000 0x100>;
                interrupts = <0 109 0>;
 +              clocks = <&clock 347>;
 +              clock-names = "keypad";
                status = "disabled";
        };
  
                compatible = "samsung,exynos4210-sdhci";
                reg = <0x12510000 0x100>;
                interrupts = <0 73 0>;
 +              clocks = <&clock 297>, <&clock 145>;
 +              clock-names = "hsmmc", "mmc_busclk.2";
                status = "disabled";
        };
  
                compatible = "samsung,exynos4210-sdhci";
                reg = <0x12520000 0x100>;
                interrupts = <0 74 0>;
 +              clocks = <&clock 298>, <&clock 146>;
 +              clock-names = "hsmmc", "mmc_busclk.2";
                status = "disabled";
        };
  
                compatible = "samsung,exynos4210-sdhci";
                reg = <0x12530000 0x100>;
                interrupts = <0 75 0>;
 +              clocks = <&clock 299>, <&clock 147>;
 +              clock-names = "hsmmc", "mmc_busclk.2";
                status = "disabled";
        };
  
                compatible = "samsung,exynos4210-sdhci";
                reg = <0x12540000 0x100>;
                interrupts = <0 76 0>;
 +              clocks = <&clock 300>, <&clock 148>;
 +              clock-names = "hsmmc", "mmc_busclk.2";
 +              status = "disabled";
 +      };
 +
 +      mfc: codec@13400000 {
 +              compatible = "samsung,mfc-v5";
 +              reg = <0x13400000 0x10000>;
 +              interrupts = <0 94 0>;
 +              samsung,power-domain = <&pd_mfc>;
                status = "disabled";
        };
  
                compatible = "samsung,exynos4210-uart";
                reg = <0x13800000 0x100>;
                interrupts = <0 52 0>;
 +              clocks = <&clock 312>, <&clock 151>;
 +              clock-names = "uart", "clk_uart_baud0";
                status = "disabled";
        };
  
                compatible = "samsung,exynos4210-uart";
                reg = <0x13810000 0x100>;
                interrupts = <0 53 0>;
 +              clocks = <&clock 313>, <&clock 152>;
 +              clock-names = "uart", "clk_uart_baud0";
                status = "disabled";
        };
  
                compatible = "samsung,exynos4210-uart";
                reg = <0x13820000 0x100>;
                interrupts = <0 54 0>;
 +              clocks = <&clock 314>, <&clock 153>;
 +              clock-names = "uart", "clk_uart_baud0";
                status = "disabled";
        };
  
                compatible = "samsung,exynos4210-uart";
                reg = <0x13830000 0x100>;
                interrupts = <0 55 0>;
 +              clocks = <&clock 315>, <&clock 154>;
 +              clock-names = "uart", "clk_uart_baud0";
                status = "disabled";
        };
  
                compatible = "samsung,s3c2440-i2c";
                reg = <0x13860000 0x100>;
                interrupts = <0 58 0>;
 +              clocks = <&clock 317>;
 +              clock-names = "i2c";
                status = "disabled";
        };
  
                compatible = "samsung,s3c2440-i2c";
                reg = <0x13870000 0x100>;
                interrupts = <0 59 0>;
 +              clocks = <&clock 318>;
 +              clock-names = "i2c";
                status = "disabled";
        };
  
                compatible = "samsung,s3c2440-i2c";
                reg = <0x13880000 0x100>;
                interrupts = <0 60 0>;
 +              clocks = <&clock 319>;
 +              clock-names = "i2c";
                status = "disabled";
        };
  
                compatible = "samsung,s3c2440-i2c";
                reg = <0x13890000 0x100>;
                interrupts = <0 61 0>;
 +              clocks = <&clock 320>;
 +              clock-names = "i2c";
                status = "disabled";
        };
  
                compatible = "samsung,s3c2440-i2c";
                reg = <0x138A0000 0x100>;
                interrupts = <0 62 0>;
 +              clocks = <&clock 321>;
 +              clock-names = "i2c";
                status = "disabled";
        };
  
                compatible = "samsung,s3c2440-i2c";
                reg = <0x138B0000 0x100>;
                interrupts = <0 63 0>;
 +              clocks = <&clock 322>;
 +              clock-names = "i2c";
                status = "disabled";
        };
  
                compatible = "samsung,s3c2440-i2c";
                reg = <0x138C0000 0x100>;
                interrupts = <0 64 0>;
 +              clocks = <&clock 323>;
 +              clock-names = "i2c";
                status = "disabled";
        };
  
                compatible = "samsung,s3c2440-i2c";
                reg = <0x138D0000 0x100>;
                interrupts = <0 65 0>;
 +              clocks = <&clock 324>;
 +              clock-names = "i2c";
                status = "disabled";
        };
  
                rx-dma-channel = <&pdma0 6>; /* preliminary */
                #address-cells = <1>;
                #size-cells = <0>;
 +              clocks = <&clock 327>, <&clock 159>;
 +              clock-names = "spi", "spi_busclk0";
                status = "disabled";
        };
  
                rx-dma-channel = <&pdma1 6>; /* preliminary */
                #address-cells = <1>;
                #size-cells = <0>;
 +              clocks = <&clock 328>, <&clock 160>;
 +              clock-names = "spi", "spi_busclk0";
                status = "disabled";
        };
  
                rx-dma-channel = <&pdma0 8>; /* preliminary */
                #address-cells = <1>;
                #size-cells = <0>;
 +              clocks = <&clock 329>, <&clock 161>;
 +              clock-names = "spi", "spi_busclk0";
                status = "disabled";
        };
  
+       pwm@139D0000 {
+               compatible = "samsung,exynos4210-pwm";
+               reg = <0x139D0000 0x1000>;
+               interrupts = <0 37 0>, <0 38 0>, <0 39 0>, <0 40 0>, <0 41 0>;
+               #pwm-cells = <2>;
+               status = "disabled";
+       };
        amba {
                #address-cells = <1>;
                #size-cells = <1>;
                        compatible = "arm,pl330", "arm,primecell";
                        reg = <0x12680000 0x1000>;
                        interrupts = <0 35 0>;
 +                      clocks = <&clock 292>;
 +                      clock-names = "apb_pclk";
 +                      #dma-cells = <1>;
 +                      #dma-channels = <8>;
 +                      #dma-requests = <32>;
                };
  
                pdma1: pdma@12690000 {
                        compatible = "arm,pl330", "arm,primecell";
                        reg = <0x12690000 0x1000>;
                        interrupts = <0 36 0>;
 +                      clocks = <&clock 293>;
 +                      clock-names = "apb_pclk";
 +                      #dma-cells = <1>;
 +                      #dma-channels = <8>;
 +                      #dma-requests = <32>;
                };
  
                mdma1: mdma@12850000 {
                        compatible = "arm,pl330", "arm,primecell";
                        reg = <0x12850000 0x1000>;
                        interrupts = <0 34 0>;
 +                      clocks = <&clock 279>;
 +                      clock-names = "apb_pclk";
 +                      #dma-cells = <1>;
 +                      #dma-channels = <8>;
 +                      #dma-requests = <1>;
                };
        };
  };
index 9208079d5d52084704f32dac962bd7cc51330364,8abf2b6b98c6268ac8756ff962717bc0b0f25117..4bc1c49c69f1c70b171eb82c2f87139402cddc47
@@@ -25,8 -25,6 +25,8 @@@
  #include <linux/irqdomain.h>
  #include <linux/irqchip.h>
  #include <linux/of_address.h>
 +#include <linux/clocksource.h>
 +#include <linux/clk-provider.h>
  #include <linux/irqchip/arm-gic.h>
  
  #include <asm/proc-fns.h>
@@@ -39,9 -37,9 +39,9 @@@
  #include <mach/regs-irq.h>
  #include <mach/regs-pmu.h>
  #include <mach/regs-gpio.h>
 +#include <mach/irqs.h>
  
  #include <plat/cpu.h>
 -#include <plat/clock.h>
  #include <plat/devs.h>
  #include <plat/pm.h>
  #include <plat/sdhci.h>
@@@ -67,16 -65,17 +67,16 @@@ static const char name_exynos5440[] = "
  static void exynos4_map_io(void);
  static void exynos5_map_io(void);
  static void exynos5440_map_io(void);
 -static void exynos4_init_clocks(int xtal);
 -static void exynos5_init_clocks(int xtal);
  static void exynos4_init_uarts(struct s3c2410_uartcfg *cfg, int no);
  static int exynos_init(void);
  
 +unsigned long xxti_f = 0, xusbxti_f = 0;
 +
  static struct cpu_table cpu_ids[] __initdata = {
        {
                .idcode         = EXYNOS4210_CPU_ID,
                .idmask         = EXYNOS4_CPU_MASK,
                .map_io         = exynos4_map_io,
 -              .init_clocks    = exynos4_init_clocks,
                .init_uarts     = exynos4_init_uarts,
                .init           = exynos_init,
                .name           = name_exynos4210,
@@@ -84,6 -83,7 +84,6 @@@
                .idcode         = EXYNOS4212_CPU_ID,
                .idmask         = EXYNOS4_CPU_MASK,
                .map_io         = exynos4_map_io,
 -              .init_clocks    = exynos4_init_clocks,
                .init_uarts     = exynos4_init_uarts,
                .init           = exynos_init,
                .name           = name_exynos4212,
@@@ -91,6 -91,7 +91,6 @@@
                .idcode         = EXYNOS4412_CPU_ID,
                .idmask         = EXYNOS4_CPU_MASK,
                .map_io         = exynos4_map_io,
 -              .init_clocks    = exynos4_init_clocks,
                .init_uarts     = exynos4_init_uarts,
                .init           = exynos_init,
                .name           = name_exynos4412,
@@@ -98,6 -99,7 +98,6 @@@
                .idcode         = EXYNOS5250_SOC_ID,
                .idmask         = EXYNOS5_SOC_MASK,
                .map_io         = exynos5_map_io,
 -              .init_clocks    = exynos5_init_clocks,
                .init           = exynos_init,
                .name           = name_exynos5250,
        }, {
@@@ -254,6 -256,11 +254,6 @@@ static struct map_desc exynos5_iodesc[
                .pfn            = __phys_to_pfn(EXYNOS5_PA_SROMC),
                .length         = SZ_4K,
                .type           = MT_DEVICE,
 -      }, {
 -              .virtual        = (unsigned long)S5P_VA_SYSTIMER,
 -              .pfn            = __phys_to_pfn(EXYNOS5_PA_SYSTIMER),
 -              .length         = SZ_4K,
 -              .type           = MT_DEVICE,
        }, {
                .virtual        = (unsigned long)S5P_VA_SYSRAM,
                .pfn            = __phys_to_pfn(EXYNOS5_PA_SYSRAM),
@@@ -361,9 -368,6 +361,9 @@@ static void __init exynos4_map_io(void
        else
                iotable_init(exynos4_iodesc1, ARRAY_SIZE(exynos4_iodesc1));
  
 +      if (!IS_ENABLED(CONFIG_EXYNOS_ATAGS))
 +              return
 +
        /* initialize device information early */
        exynos4_default_sdhci0();
        exynos4_default_sdhci1();
@@@ -398,41 -402,45 +398,41 @@@ static void __init exynos5_map_io(void
        iotable_init(exynos5_iodesc, ARRAY_SIZE(exynos5_iodesc));
  }
  
 -static void __init exynos4_init_clocks(int xtal)
 -{
 -      printk(KERN_DEBUG "%s: initializing clocks\n", __func__);
 -
 -      s3c24xx_register_baseclocks(xtal);
 -      s5p_register_clocks(xtal);
 -
 -      if (soc_is_exynos4210())
 -              exynos4210_register_clocks();
 -      else if (soc_is_exynos4212() || soc_is_exynos4412())
 -              exynos4212_register_clocks();
 -
 -      exynos4_register_clocks();
 -      exynos4_setup_clocks();
 -}
 -
  static void __init exynos5440_map_io(void)
  {
        iotable_init(exynos5440_iodesc0, ARRAY_SIZE(exynos5440_iodesc0));
  }
  
 -static void __init exynos5_init_clocks(int xtal)
 +void __init exynos_init_time(void)
  {
 -      printk(KERN_DEBUG "%s: initializing clocks\n", __func__);
 -
 -      /* EXYNOS5440 can support only common clock framework */
 -
 -      if (soc_is_exynos5440())
 -              return;
 -
 -#ifdef CONFIG_SOC_EXYNOS5250
 -      s3c24xx_register_baseclocks(xtal);
 -      s5p_register_clocks(xtal);
 -
 -      exynos5_register_clocks();
 -      exynos5_setup_clocks();
 +      if (of_have_populated_dt()) {
 +#ifdef CONFIG_OF
 +              of_clk_init(NULL);
 +              clocksource_of_init();
 +#endif
 +      } else {
 +              /* todo: remove after migrating legacy E4 platforms to dt */
 +#ifdef CONFIG_ARCH_EXYNOS4
 +              exynos4_clk_init(NULL, !soc_is_exynos4210(), S5P_VA_CMU, readl(S5P_VA_CHIPID + 8) & 1);
 +              exynos4_clk_register_fixed_ext(xxti_f, xusbxti_f);
  #endif
 +              mct_init(S5P_VA_SYSTIMER, EXYNOS4_IRQ_MCT_G0, EXYNOS4_IRQ_MCT_L0, EXYNOS4_IRQ_MCT_L1);
 +      }
 +}
 +
 +static unsigned int max_combiner_nr(void)
 +{
 +      if (soc_is_exynos5250())
 +              return EXYNOS5_MAX_COMBINER_NR;
 +      else if (soc_is_exynos4412())
 +              return EXYNOS4412_MAX_COMBINER_NR;
 +      else if (soc_is_exynos4212())
 +              return EXYNOS4212_MAX_COMBINER_NR;
 +      else
 +              return EXYNOS4210_MAX_COMBINER_NR;
  }
  
 +
  void __init exynos4_init_irq(void)
  {
        unsigned int gic_bank_offset;
  #endif
  
        if (!of_have_populated_dt())
 -              combiner_init(S5P_VA_COMBINER_BASE, NULL);
 +              combiner_init(S5P_VA_COMBINER_BASE, NULL,
 +                            max_combiner_nr(), COMBINER_IRQ(0, 0));
-       /*
-        * The parameters of s5p_init_irq() are for VIC init.
-        * Theses parameters should be NULL and 0 because EXYNOS4
-        * uses GIC instead of VIC.
-        */
-       s5p_init_irq(NULL, 0);
  }
  
  void __init exynos5_init_irq(void)
  #ifdef CONFIG_OF
        irqchip_init();
  #endif
-       /*
-        * The parameters of s5p_init_irq() are for VIC init.
-        * Theses parameters should be NULL and 0 because EXYNOS4
-        * uses GIC instead of VIC.
-        */
-       if (!of_machine_is_compatible("samsung,exynos5440"))
-               s5p_init_irq(NULL, 0);
        gic_arch_extn.irq_set_wake = s3c_irq_wake;
  }
  
@@@ -563,8 -555,6 +548,8 @@@ static void __init exynos4_init_uarts(s
        s3c24xx_init_uartdevs("exynos4210-uart", exynos4_uart_resources, cfg, no);
  }
  
 +
 +#ifdef CONFIG_EXYNOS_ATAGS
  static void __iomem *exynos_eint_base;
  
  static DEFINE_SPINLOCK(eint_lock);
@@@ -817,7 -807,6 +802,7 @@@ static int __init exynos_init_irq_eint(
        static const struct of_device_id exynos_pinctrl_ids[] = {
                { .compatible = "samsung,exynos4210-pinctrl", },
                { .compatible = "samsung,exynos4x12-pinctrl", },
 +              { .compatible = "samsung,exynos5250-pinctrl", },
        };
        struct device_node *pctrl_np, *wkup_np;
        const char *wkup_compat = "samsung,exynos4210-wakeup-eint";
        return 0;
  }
  arch_initcall(exynos_init_irq_eint);
 +#endif
 +
 +static struct resource exynos4_pmu_resource[] = {
 +      DEFINE_RES_IRQ(EXYNOS4_IRQ_PMU),
 +      DEFINE_RES_IRQ(EXYNOS4_IRQ_PMU_CPU1),
 +#if defined(CONFIG_SOC_EXYNOS4412)
 +      DEFINE_RES_IRQ(EXYNOS4_IRQ_PMU_CPU2),
 +      DEFINE_RES_IRQ(EXYNOS4_IRQ_PMU_CPU3),
 +#endif
 +};
 +
 +static struct platform_device exynos4_device_pmu = {
 +      .name           = "arm-pmu",
 +      .num_resources  = ARRAY_SIZE(exynos4_pmu_resource),
 +      .resource       = exynos4_pmu_resource,
 +};
 +
 +static int __init exynos_armpmu_init(void)
 +{
 +      if (!of_have_populated_dt()) {
 +              if (soc_is_exynos4210() || soc_is_exynos4212())
 +                      exynos4_device_pmu.num_resources = 2;
 +              platform_device_register(&exynos4_device_pmu);
 +      }
 +
 +      return 0;
 +}
 +arch_initcall(exynos_armpmu_init);
index 77dd30af32f5ecbaa5c28e38a65aee151bf59d05,2e1b1905ac3a26e183f88564ec0602d41418325c..53b2d59ca252f6d52683a9d8c9d433f36a5328ac
@@@ -13,10 -13,6 +13,10 @@@ config PLAT_SAMSUN
        help
          Base platform code for all Samsung SoC based systems
  
 +config PLAT_SAMSUNG_SINGLE
 +      def_bool PLAT_SAMSUNG && !ARCH_MULTIPLATFORM
 +      
 +
  config PLAT_S5P
        bool
        depends on (ARCH_S5P64X0 || ARCH_S5PC100 || ARCH_S5PV210 || ARCH_EXYNOS)
@@@ -27,9 -23,9 +27,9 @@@
        select GIC_NON_BANKED if ARCH_EXYNOS4
        select NO_IOPORT
        select PLAT_SAMSUNG
 -      select S3C_GPIO_TRACK
 +      select S3C_GPIO_TRACK if PLAT_SAMSUNG_SINGLE
        select S5P_GPIO_DRVSTR
 -      select SAMSUNG_CLKSRC
 +      select SAMSUNG_CLKSRC if !COMMON_CLK
        select SAMSUNG_GPIOLIB_4BIT
        select SAMSUNG_IRQ_VIC_TIMER
        help
@@@ -74,7 -70,7 +74,7 @@@ config S3C_LOWLEVEL_UART_POR
  
  # timer options
  
 -config S5P_HRT
 +config SAMSUNG_HRT
        bool
        select SAMSUNG_DEV_PWM
        help
@@@ -93,7 -89,7 +93,7 @@@ config SAMSUNG_CLKSR
          used by newer systems such as the S3C64XX.
  
  config S5P_CLOCK
 -      def_bool (ARCH_S5P64X0 || ARCH_S5PC100 || ARCH_S5PV210 || ARCH_EXYNOS)
 +      def_bool (ARCH_S5P64X0 || ARCH_S5PC100 || ARCH_S5PV210)
        help
          Support common clock part for ARCH_S5P and ARCH_EXYNOS SoCs
  
@@@ -105,9 -101,9 +105,9 @@@ config SAMSUNG_IRQ_VIC_TIME
           Internal configuration to build the VIC timer interrupt code.
  
  config S5P_IRQ
-       def_bool (ARCH_S5P64X0 || ARCH_S5PC100 || ARCH_S5PV210 || ARCH_EXYNOS)
+       def_bool (ARCH_S5P64X0 || ARCH_S5PC100 || ARCH_S5PV210)
        help
-         Support common interrup part for ARCH_S5P and ARCH_EXYNOS SoCs
+         Support common interrupt part for ARCH_S5P SoCs
  
  config S5P_EXT_INT
        bool
@@@ -182,7 -178,6 +182,7 @@@ config S5P_DEV_UAR
  
  config S3C_ADC
        bool "ADC common driver support"
 +      depends on PLAT_SAMSUNG_SINGLE
        help
          Core support for the ADC block found in the Samsung SoC systems
          for drivers such as the touchscreen and hwmon to use to share
index 73fcddb8314d4c1fba7277ddb98d8d06aaad526a,6d6174978f95edfb95bbda0b205ac15a7d7ab364..5d9bab2b5012a2ad0ce3439361c88190511ed4c3
@@@ -31,9 -31,6 +31,9 @@@ config SUNXI_TIME
  config VT8500_TIMER
        bool
  
 +config CADENCE_TTC_TIMER
 +      bool
 +
  config CLKSRC_NOMADIK_MTU
        bool
        depends on (ARCH_NOMADIK || ARCH_U8500)
@@@ -71,7 -68,11 +71,16 @@@ config CLKSRC_METAG_GENERI
        help
          This option enables support for the Meta per-thread timers.
  
 +config CLKSRC_EXYNOS_MCT
 +      def_bool y if ARCH_EXYNOS
 +      help
 +        Support for Multi Core Timer controller on Exynos SoCs.
++
+ config CLKSRC_SAMSUNG_PWM
+       bool
+       select CLKSRC_MMIO
+       help
+         This is a new clocksource driver for the PWM timer found in
+         Samsung S3C, S5P and Exynos SoCs, replacing an earlier driver
+         for all devicetree enabled platforms. This driver will be
+         needed only on systems that do not have the Exynos MCT available.
index cd1f09cbd61a7c37895ce5c0c46d552b9b77076c,891c9f2af0218f579746b76d9beade2b298c520b..2289f0cb4c4c517405b21cd8c862369314d37822
@@@ -19,8 -19,7 +19,9 @@@ obj-$(CONFIG_ARCH_BCM2835)    += bcm2835_t
  obj-$(CONFIG_SUNXI_TIMER)     += sunxi_timer.o
  obj-$(CONFIG_ARCH_TEGRA)      += tegra20_timer.o
  obj-$(CONFIG_VT8500_TIMER)    += vt8500_timer.o
 +obj-$(CONFIG_CADENCE_TTC_TIMER)       += cadence_ttc_timer.o
 +obj-$(CONFIG_CLKSRC_EXYNOS_MCT)       += exynos_mct.o
+ obj-$(CONFIG_CLKSRC_SAMSUNG_PWM)      += samsung_pwm_timer.o
  
  obj-$(CONFIG_ARM_ARCH_TIMER)          += arm_arch_timer.o
  obj-$(CONFIG_CLKSRC_METAG_GENERIC)    += metag_generic.o