]> git.sur5r.net Git - u-boot/blobdiff - arch/arm/include/asm/arch-at91/clk.h
Merge git://git.denx.de/u-boot-samsung
[u-boot] / arch / arm / include / asm / arch-at91 / clk.h
index d4852a38c19c3eb25b960626f03eaad9d55fc39f..1d45e2dc112deda0f4a3d58745b8f088f22cdee9 100644 (file)
@@ -4,28 +4,13 @@
  * Lead Tech Design <www.leadtechdesign.com>
  * Copyright (C) 2009 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
  *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
+ * SPDX-License-Identifier:    GPL-2.0+
  */
 #ifndef __ASM_ARM_ARCH_CLK_H__
 #define __ASM_ARM_ARCH_CLK_H__
 
 #include <asm/arch/hardware.h>
+#include <asm/arch/at91_pmc.h>
 #include <asm/global_data.h>
 
 static inline unsigned long get_cpu_clk_rate(void)
@@ -64,14 +49,34 @@ static inline u32 get_pllb_init(void)
        return gd->arch.at91_pllb_usb_init;
 }
 
+#ifdef CPU_HAS_H32MXDIV
+static inline unsigned int get_h32mxdiv(void)
+{
+       struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
+
+       return readl(&pmc->mckr) & AT91_PMC_MCKR_H32MXDIV;
+}
+#else
+static inline unsigned int get_h32mxdiv(void)
+{
+       return 0;
+}
+#endif
+
 static inline unsigned long get_macb_pclk_rate(unsigned int dev_id)
 {
-       return get_mck_clk_rate();
+       if (get_h32mxdiv())
+               return get_mck_clk_rate() / 2;
+       else
+               return get_mck_clk_rate();
 }
 
 static inline unsigned long get_usart_clk_rate(unsigned int dev_id)
 {
-       return get_mck_clk_rate();
+       if (get_h32mxdiv())
+               return get_mck_clk_rate() / 2;
+       else
+               return get_mck_clk_rate();
 }
 
 static inline unsigned long get_lcdc_clk_rate(unsigned int dev_id)
@@ -81,18 +86,37 @@ static inline unsigned long get_lcdc_clk_rate(unsigned int dev_id)
 
 static inline unsigned long get_spi_clk_rate(unsigned int dev_id)
 {
-       return get_mck_clk_rate();
+       if (get_h32mxdiv())
+               return get_mck_clk_rate() / 2;
+       else
+               return get_mck_clk_rate();
 }
 
 static inline unsigned long get_twi_clk_rate(unsigned int dev_id)
 {
-       return get_mck_clk_rate();
+       if (get_h32mxdiv())
+               return get_mck_clk_rate() / 2;
+       else
+               return get_mck_clk_rate();
 }
 
 static inline unsigned long get_mci_clk_rate(void)
 {
-       return get_mck_clk_rate();
+       if (get_h32mxdiv())
+               return get_mck_clk_rate() / 2;
+       else
+               return get_mck_clk_rate();
+}
+
+static inline unsigned long get_pit_clk_rate(void)
+{
+       if (get_h32mxdiv())
+               return get_mck_clk_rate() / 2;
+       else
+               return get_mck_clk_rate();
 }
 
 int at91_clock_init(unsigned long main_clock);
+void at91_periph_clk_enable(int id);
+void at91_periph_clk_disable(int id);
 #endif /* __ASM_ARM_ARCH_CLK_H__ */