2009-07-16 14:41:54 +04:00
/*
* TI DA850 / OMAP - L138 chip specific setup
*
* Copyright ( C ) 2009 Texas Instruments Incorporated - http : //www.ti.com/
*
* Derived from : arch / arm / mach - davinci / da830 . c
* Original Copyrights follow :
*
* 2009 ( c ) MontaVista Software , Inc . This file is licensed under
* the terms of the GNU General Public License version 2. This program
* is licensed " as is " without any warranty of any kind , whether express
* or implied .
*/
2015-03-09 14:03:00 +03:00
# include <linux/clkdev.h>
2011-07-26 13:53:52 +04:00
# include <linux/gpio.h>
2009-07-16 14:41:54 +04:00
# include <linux/init.h>
# include <linux/clk.h>
# include <linux/platform_device.h>
2009-09-22 19:44:01 +04:00
# include <linux/cpufreq.h>
2009-09-22 19:44:02 +04:00
# include <linux/regulator/consumer.h>
2013-08-18 09:18:59 +04:00
# include <linux/platform_data/gpio-davinci.h>
2009-07-16 14:41:54 +04:00
# include <asm/mach/map.h>
2015-01-30 12:45:33 +03:00
# include "psc.h"
2009-07-16 14:41:54 +04:00
# include <mach/irqs.h>
# include <mach/cputype.h>
# include <mach/common.h>
# include <mach/time.h>
# include <mach/da8xx.h>
2009-09-22 19:44:01 +04:00
# include <mach/cpufreq.h>
2009-12-17 15:59:32 +03:00
# include <mach/pm.h>
2009-07-16 14:41:54 +04:00
# include "clock.h"
# include "mux.h"
# define DA850_PLL1_BASE 0x01e1a000
# define DA850_TIMER64P2_BASE 0x01f0c000
# define DA850_TIMER64P3_BASE 0x01f0d000
# define DA850_REF_FREQ 24000000
2009-08-31 14:18:05 +04:00
# define CFGCHIP3_ASYNC3_CLKSRC BIT(4)
2009-11-16 14:51:38 +03:00
# define CFGCHIP3_PLL1_MASTER_LOCK BIT(5)
2009-09-22 19:44:01 +04:00
# define CFGCHIP0_PLL_MASTER_LOCK BIT(4)
static int da850_set_armrate ( struct clk * clk , unsigned long rate ) ;
static int da850_round_armrate ( struct clk * clk , unsigned long rate ) ;
static int da850_set_pll0rate ( struct clk * clk , unsigned long armrate ) ;
2009-08-31 14:18:05 +04:00
2009-07-16 14:41:54 +04:00
static struct pll_data pll0_data = {
. num = 1 ,
. phys_base = DA8XX_PLL0_BASE ,
. flags = PLL_HAS_PREDIV | PLL_HAS_POSTDIV ,
} ;
static struct clk ref_clk = {
. name = " ref_clk " ,
. rate = DA850_REF_FREQ ,
2011-06-28 19:10:51 +04:00
. set_rate = davinci_simple_set_rate ,
2009-07-16 14:41:54 +04:00
} ;
static struct clk pll0_clk = {
. name = " pll0 " ,
. parent = & ref_clk ,
. pll_data = & pll0_data ,
. flags = CLK_PLL ,
2009-09-22 19:44:01 +04:00
. set_rate = da850_set_pll0rate ,
2009-07-16 14:41:54 +04:00
} ;
static struct clk pll0_aux_clk = {
. name = " pll0_aux_clk " ,
. parent = & pll0_clk ,
. flags = CLK_PLL | PRE_PLL ,
} ;
2013-01-11 04:23:22 +04:00
static struct clk pll0_sysclk1 = {
. name = " pll0_sysclk1 " ,
. parent = & pll0_clk ,
. flags = CLK_PLL ,
. div_reg = PLLDIV1 ,
} ;
2009-07-16 14:41:54 +04:00
static struct clk pll0_sysclk2 = {
. name = " pll0_sysclk2 " ,
. parent = & pll0_clk ,
. flags = CLK_PLL ,
. div_reg = PLLDIV2 ,
} ;
static struct clk pll0_sysclk3 = {
. name = " pll0_sysclk3 " ,
. parent = & pll0_clk ,
. flags = CLK_PLL ,
. div_reg = PLLDIV3 ,
2010-07-20 15:16:51 +04:00
. set_rate = davinci_set_sysclk_rate ,
. maxrate = 100000000 ,
2009-07-16 14:41:54 +04:00
} ;
static struct clk pll0_sysclk4 = {
. name = " pll0_sysclk4 " ,
. parent = & pll0_clk ,
. flags = CLK_PLL ,
. div_reg = PLLDIV4 ,
} ;
static struct clk pll0_sysclk5 = {
. name = " pll0_sysclk5 " ,
. parent = & pll0_clk ,
. flags = CLK_PLL ,
. div_reg = PLLDIV5 ,
} ;
static struct clk pll0_sysclk6 = {
. name = " pll0_sysclk6 " ,
. parent = & pll0_clk ,
. flags = CLK_PLL ,
. div_reg = PLLDIV6 ,
} ;
static struct clk pll0_sysclk7 = {
. name = " pll0_sysclk7 " ,
. parent = & pll0_clk ,
. flags = CLK_PLL ,
. div_reg = PLLDIV7 ,
} ;
static struct pll_data pll1_data = {
. num = 2 ,
. phys_base = DA850_PLL1_BASE ,
. flags = PLL_HAS_POSTDIV ,
} ;
static struct clk pll1_clk = {
. name = " pll1 " ,
. parent = & ref_clk ,
. pll_data = & pll1_data ,
. flags = CLK_PLL ,
} ;
static struct clk pll1_aux_clk = {
. name = " pll1_aux_clk " ,
. parent = & pll1_clk ,
. flags = CLK_PLL | PRE_PLL ,
} ;
static struct clk pll1_sysclk2 = {
. name = " pll1_sysclk2 " ,
. parent = & pll1_clk ,
. flags = CLK_PLL ,
. div_reg = PLLDIV2 ,
} ;
static struct clk pll1_sysclk3 = {
. name = " pll1_sysclk3 " ,
. parent = & pll1_clk ,
. flags = CLK_PLL ,
. div_reg = PLLDIV3 ,
} ;
2016-04-14 22:13:36 +03:00
static int da850_async3_set_parent ( struct clk * clk , struct clk * parent )
{
u32 val ;
val = readl ( DA8XX_SYSCFG0_VIRT ( DA8XX_CFGCHIP3_REG ) ) ;
if ( parent = = & pll0_sysclk2 ) {
val & = ~ CFGCHIP3_ASYNC3_CLKSRC ;
} else if ( parent = = & pll1_sysclk2 ) {
val | = CFGCHIP3_ASYNC3_CLKSRC ;
} else {
pr_err ( " Bad parent on async3 clock mux \n " ) ;
return - EINVAL ;
}
writel ( val , DA8XX_SYSCFG0_VIRT ( DA8XX_CFGCHIP3_REG ) ) ;
return 0 ;
}
static struct clk async3_clk = {
. name = " async3 " ,
. parent = & pll1_sysclk2 ,
. set_parent = da850_async3_set_parent ,
} ;
2009-07-16 14:41:54 +04:00
static struct clk i2c0_clk = {
. name = " i2c0 " ,
. parent = & pll0_aux_clk ,
} ;
static struct clk timerp64_0_clk = {
. name = " timer0 " ,
. parent = & pll0_aux_clk ,
} ;
static struct clk timerp64_1_clk = {
. name = " timer1 " ,
. parent = & pll0_aux_clk ,
} ;
static struct clk arm_rom_clk = {
. name = " arm_rom " ,
. parent = & pll0_sysclk2 ,
. lpsc = DA8XX_LPSC0_ARM_RAM_ROM ,
. flags = ALWAYS_ENABLED ,
} ;
static struct clk tpcc0_clk = {
. name = " tpcc0 " ,
. parent = & pll0_sysclk2 ,
. lpsc = DA8XX_LPSC0_TPCC ,
. flags = ALWAYS_ENABLED | CLK_PSC ,
} ;
static struct clk tptc0_clk = {
. name = " tptc0 " ,
. parent = & pll0_sysclk2 ,
. lpsc = DA8XX_LPSC0_TPTC0 ,
. flags = ALWAYS_ENABLED ,
} ;
static struct clk tptc1_clk = {
. name = " tptc1 " ,
. parent = & pll0_sysclk2 ,
. lpsc = DA8XX_LPSC0_TPTC1 ,
. flags = ALWAYS_ENABLED ,
} ;
static struct clk tpcc1_clk = {
. name = " tpcc1 " ,
. parent = & pll0_sysclk2 ,
. lpsc = DA850_LPSC1_TPCC1 ,
2009-09-30 19:48:03 +04:00
. gpsc = 1 ,
2009-07-16 14:41:54 +04:00
. flags = CLK_PSC | ALWAYS_ENABLED ,
} ;
static struct clk tptc2_clk = {
. name = " tptc2 " ,
. parent = & pll0_sysclk2 ,
. lpsc = DA850_LPSC1_TPTC2 ,
2009-09-30 19:48:03 +04:00
. gpsc = 1 ,
2009-07-16 14:41:54 +04:00
. flags = ALWAYS_ENABLED ,
} ;
2012-10-08 17:53:08 +04:00
static struct clk pruss_clk = {
. name = " pruss " ,
. parent = & pll0_sysclk2 ,
. lpsc = DA8XX_LPSC0_PRUSS ,
} ;
2009-07-16 14:41:54 +04:00
static struct clk uart0_clk = {
. name = " uart0 " ,
. parent = & pll0_sysclk2 ,
. lpsc = DA8XX_LPSC0_UART0 ,
} ;
static struct clk uart1_clk = {
. name = " uart1 " ,
2016-04-14 22:13:36 +03:00
. parent = & async3_clk ,
2009-07-16 14:41:54 +04:00
. lpsc = DA8XX_LPSC1_UART1 ,
2009-09-30 19:48:03 +04:00
. gpsc = 1 ,
2009-07-16 14:41:54 +04:00
} ;
static struct clk uart2_clk = {
. name = " uart2 " ,
2016-04-14 22:13:36 +03:00
. parent = & async3_clk ,
2009-07-16 14:41:54 +04:00
. lpsc = DA8XX_LPSC1_UART2 ,
2009-09-30 19:48:03 +04:00
. gpsc = 1 ,
2009-07-16 14:41:54 +04:00
} ;
static struct clk aintc_clk = {
. name = " aintc " ,
. parent = & pll0_sysclk4 ,
. lpsc = DA8XX_LPSC0_AINTC ,
. flags = ALWAYS_ENABLED ,
} ;
static struct clk gpio_clk = {
. name = " gpio " ,
. parent = & pll0_sysclk4 ,
. lpsc = DA8XX_LPSC1_GPIO ,
2009-09-30 19:48:03 +04:00
. gpsc = 1 ,
2009-07-16 14:41:54 +04:00
} ;
static struct clk i2c1_clk = {
. name = " i2c1 " ,
. parent = & pll0_sysclk4 ,
. lpsc = DA8XX_LPSC1_I2C ,
2009-09-30 19:48:03 +04:00
. gpsc = 1 ,
2009-07-16 14:41:54 +04:00
} ;
static struct clk emif3_clk = {
. name = " emif3 " ,
. parent = & pll0_sysclk5 ,
. lpsc = DA8XX_LPSC1_EMIF3C ,
2009-09-30 19:48:03 +04:00
. gpsc = 1 ,
2009-07-16 14:41:54 +04:00
. flags = ALWAYS_ENABLED ,
} ;
static struct clk arm_clk = {
. name = " arm " ,
. parent = & pll0_sysclk6 ,
. lpsc = DA8XX_LPSC0_ARM ,
. flags = ALWAYS_ENABLED ,
2009-09-22 19:44:01 +04:00
. set_rate = da850_set_armrate ,
. round_rate = da850_round_armrate ,
2009-07-16 14:41:54 +04:00
} ;
static struct clk rmii_clk = {
. name = " rmii " ,
. parent = & pll0_sysclk7 ,
} ;
2009-07-17 12:47:10 +04:00
static struct clk emac_clk = {
. name = " emac " ,
. parent = & pll0_sysclk4 ,
. lpsc = DA8XX_LPSC1_CPGMAC ,
2009-09-30 19:48:03 +04:00
. gpsc = 1 ,
2009-07-17 12:47:10 +04:00
} ;
2009-08-12 01:03:25 +04:00
static struct clk mcasp_clk = {
. name = " mcasp " ,
2016-04-14 22:13:36 +03:00
. parent = & async3_clk ,
2009-08-12 01:03:25 +04:00
. lpsc = DA8XX_LPSC1_McASP0 ,
2009-09-30 19:48:03 +04:00
. gpsc = 1 ,
2009-08-12 01:03:25 +04:00
} ;
2016-05-09 17:00:10 +03:00
static struct clk mcbsp0_clk = {
. name = " mcbsp0 " ,
. parent = & async3_clk ,
. lpsc = DA850_LPSC1_McBSP0 ,
. gpsc = 1 ,
} ;
static struct clk mcbsp1_clk = {
. name = " mcbsp1 " ,
. parent = & async3_clk ,
. lpsc = DA850_LPSC1_McBSP1 ,
. gpsc = 1 ,
} ;
2009-08-13 22:33:14 +04:00
static struct clk lcdc_clk = {
. name = " lcdc " ,
. parent = & pll0_sysclk2 ,
. lpsc = DA8XX_LPSC1_LCDC ,
2009-09-30 19:48:03 +04:00
. gpsc = 1 ,
2009-08-13 22:33:14 +04:00
} ;
2010-08-26 23:40:46 +04:00
static struct clk mmcsd0_clk = {
. name = " mmcsd0 " ,
2009-08-13 23:16:23 +04:00
. parent = & pll0_sysclk2 ,
. lpsc = DA8XX_LPSC0_MMC_SD ,
} ;
2010-08-26 23:40:46 +04:00
static struct clk mmcsd1_clk = {
. name = " mmcsd1 " ,
. parent = & pll0_sysclk2 ,
. lpsc = DA850_LPSC1_MMC_SD1 ,
. gpsc = 1 ,
} ;
2009-08-14 00:21:11 +04:00
static struct clk aemif_clk = {
. name = " aemif " ,
. parent = & pll0_sysclk3 ,
. lpsc = DA8XX_LPSC0_EMIF25 ,
. flags = ALWAYS_ENABLED ,
} ;
2010-12-28 01:43:12 +03:00
static struct clk usb11_clk = {
. name = " usb11 " ,
. parent = & pll0_sysclk4 ,
. lpsc = DA8XX_LPSC1_USB11 ,
. gpsc = 1 ,
} ;
static struct clk usb20_clk = {
. name = " usb20 " ,
. parent = & pll0_sysclk2 ,
. lpsc = DA8XX_LPSC1_USB20 ,
. gpsc = 1 ,
} ;
2011-02-22 16:37:00 +03:00
static struct clk spi0_clk = {
. name = " spi0 " ,
. parent = & pll0_sysclk2 ,
. lpsc = DA8XX_LPSC0_SPI0 ,
} ;
static struct clk spi1_clk = {
. name = " spi1 " ,
2016-04-14 22:13:36 +03:00
. parent = & async3_clk ,
2011-02-22 16:37:00 +03:00
. lpsc = DA8XX_LPSC1_SPI1 ,
. gpsc = 1 ,
} ;
2012-01-23 13:17:24 +04:00
static struct clk vpif_clk = {
. name = " vpif " ,
. parent = & pll0_sysclk2 ,
. lpsc = DA850_LPSC1_VPIF ,
. gpsc = 1 ,
} ;
2011-07-06 10:01:23 +04:00
static struct clk sata_clk = {
. name = " sata " ,
. parent = & pll0_sysclk2 ,
. lpsc = DA850_LPSC1_SATA ,
. gpsc = 1 ,
. flags = PSC_FORCE ,
} ;
2013-01-11 04:23:22 +04:00
static struct clk dsp_clk = {
. name = " dsp " ,
. parent = & pll0_sysclk1 ,
. domain = DAVINCI_GPSC_DSPDOMAIN ,
. lpsc = DA8XX_LPSC0_GEM ,
. flags = PSC_LRST | PSC_FORCE ,
} ;
2013-03-25 11:49:48 +04:00
static struct clk ehrpwm_clk = {
. name = " ehrpwm " ,
2016-04-14 22:13:36 +03:00
. parent = & async3_clk ,
2013-03-25 11:49:48 +04:00
. lpsc = DA8XX_LPSC1_PWM ,
. gpsc = 1 ,
} ;
2016-10-31 23:04:24 +03:00
static struct clk ehrpwm0_clk = {
. name = " ehrpwm0 " ,
. parent = & ehrpwm_clk ,
} ;
static struct clk ehrpwm1_clk = {
. name = " ehrpwm1 " ,
. parent = & ehrpwm_clk ,
} ;
2013-03-25 11:49:48 +04:00
# define DA8XX_EHRPWM_TBCLKSYNC BIT(12)
static void ehrpwm_tblck_enable ( struct clk * clk )
{
u32 val ;
val = readl ( DA8XX_SYSCFG0_VIRT ( DA8XX_CFGCHIP1_REG ) ) ;
val | = DA8XX_EHRPWM_TBCLKSYNC ;
writel ( val , DA8XX_SYSCFG0_VIRT ( DA8XX_CFGCHIP1_REG ) ) ;
}
static void ehrpwm_tblck_disable ( struct clk * clk )
{
u32 val ;
val = readl ( DA8XX_SYSCFG0_VIRT ( DA8XX_CFGCHIP1_REG ) ) ;
val & = ~ DA8XX_EHRPWM_TBCLKSYNC ;
writel ( val , DA8XX_SYSCFG0_VIRT ( DA8XX_CFGCHIP1_REG ) ) ;
}
static struct clk ehrpwm_tbclk = {
. name = " ehrpwm_tbclk " ,
. parent = & ehrpwm_clk ,
. clk_enable = ehrpwm_tblck_enable ,
. clk_disable = ehrpwm_tblck_disable ,
} ;
2016-10-31 23:04:24 +03:00
static struct clk ehrpwm0_tbclk = {
. name = " ehrpwm0_tbclk " ,
. parent = & ehrpwm_tbclk ,
} ;
static struct clk ehrpwm1_tbclk = {
. name = " ehrpwm1_tbclk " ,
. parent = & ehrpwm_tbclk ,
} ;
2013-03-25 11:49:48 +04:00
static struct clk ecap_clk = {
. name = " ecap " ,
2016-04-14 22:13:36 +03:00
. parent = & async3_clk ,
2013-03-25 11:49:48 +04:00
. lpsc = DA8XX_LPSC1_ECAP ,
. gpsc = 1 ,
} ;
2016-10-31 23:04:24 +03:00
static struct clk ecap0_clk = {
. name = " ecap0_clk " ,
. parent = & ecap_clk ,
} ;
static struct clk ecap1_clk = {
. name = " ecap1_clk " ,
. parent = & ecap_clk ,
} ;
static struct clk ecap2_clk = {
. name = " ecap2_clk " ,
. parent = & ecap_clk ,
} ;
2010-01-11 19:22:23 +03:00
static struct clk_lookup da850_clks [ ] = {
2009-07-16 14:41:54 +04:00
CLK ( NULL , " ref " , & ref_clk ) ,
CLK ( NULL , " pll0 " , & pll0_clk ) ,
CLK ( NULL , " pll0_aux " , & pll0_aux_clk ) ,
2013-01-11 04:23:22 +04:00
CLK ( NULL , " pll0_sysclk1 " , & pll0_sysclk1 ) ,
2009-07-16 14:41:54 +04:00
CLK ( NULL , " pll0_sysclk2 " , & pll0_sysclk2 ) ,
CLK ( NULL , " pll0_sysclk3 " , & pll0_sysclk3 ) ,
CLK ( NULL , " pll0_sysclk4 " , & pll0_sysclk4 ) ,
CLK ( NULL , " pll0_sysclk5 " , & pll0_sysclk5 ) ,
CLK ( NULL , " pll0_sysclk6 " , & pll0_sysclk6 ) ,
CLK ( NULL , " pll0_sysclk7 " , & pll0_sysclk7 ) ,
CLK ( NULL , " pll1 " , & pll1_clk ) ,
CLK ( NULL , " pll1_aux " , & pll1_aux_clk ) ,
CLK ( NULL , " pll1_sysclk2 " , & pll1_sysclk2 ) ,
CLK ( NULL , " pll1_sysclk3 " , & pll1_sysclk3 ) ,
2016-04-14 22:13:36 +03:00
CLK ( NULL , " async3 " , & async3_clk ) ,
2009-07-16 14:41:54 +04:00
CLK ( " i2c_davinci.1 " , NULL , & i2c0_clk ) ,
CLK ( NULL , " timer0 " , & timerp64_0_clk ) ,
2013-11-27 17:31:53 +04:00
CLK ( " davinci-wdt " , NULL , & timerp64_1_clk ) ,
2009-07-16 14:41:54 +04:00
CLK ( NULL , " arm_rom " , & arm_rom_clk ) ,
CLK ( NULL , " tpcc0 " , & tpcc0_clk ) ,
CLK ( NULL , " tptc0 " , & tptc0_clk ) ,
CLK ( NULL , " tptc1 " , & tptc1_clk ) ,
CLK ( NULL , " tpcc1 " , & tpcc1_clk ) ,
CLK ( NULL , " tptc2 " , & tptc2_clk ) ,
2012-10-08 17:53:08 +04:00
CLK ( " pruss_uio " , " pruss " , & pruss_clk ) ,
2013-06-19 13:15:38 +04:00
CLK ( " serial8250.0 " , NULL , & uart0_clk ) ,
CLK ( " serial8250.1 " , NULL , & uart1_clk ) ,
CLK ( " serial8250.2 " , NULL , & uart2_clk ) ,
2009-07-16 14:41:54 +04:00
CLK ( NULL , " aintc " , & aintc_clk ) ,
CLK ( NULL , " gpio " , & gpio_clk ) ,
CLK ( " i2c_davinci.2 " , NULL , & i2c1_clk ) ,
CLK ( NULL , " emif3 " , & emif3_clk ) ,
CLK ( NULL , " arm " , & arm_clk ) ,
CLK ( NULL , " rmii " , & rmii_clk ) ,
2009-07-17 12:47:10 +04:00
CLK ( " davinci_emac.1 " , NULL , & emac_clk ) ,
2013-08-15 10:01:33 +04:00
CLK ( " davinci_mdio.0 " , " fck " , & emac_clk ) ,
2009-08-12 01:03:25 +04:00
CLK ( " davinci-mcasp.0 " , NULL , & mcasp_clk ) ,
2016-05-09 17:00:10 +03:00
CLK ( " davinci-mcbsp.0 " , NULL , & mcbsp0_clk ) ,
CLK ( " davinci-mcbsp.1 " , NULL , & mcbsp1_clk ) ,
2012-11-20 16:41:01 +04:00
CLK ( " da8xx_lcdc.0 " , " fck " , & lcdc_clk ) ,
2013-03-28 17:11:59 +04:00
CLK ( " da830-mmc.0 " , NULL , & mmcsd0_clk ) ,
CLK ( " da830-mmc.1 " , NULL , & mmcsd1_clk ) ,
2016-08-19 19:47:36 +03:00
CLK ( " ti-aemif " , NULL , & aemif_clk ) ,
2009-08-14 00:21:11 +04:00
CLK ( NULL , " aemif " , & aemif_clk ) ,
2016-11-03 19:03:06 +03:00
CLK ( " ohci-da8xx " , " usb11 " , & usb11_clk ) ,
2016-10-27 03:18:16 +03:00
CLK ( " musb-da8xx " , " usb20 " , & usb20_clk ) ,
2011-02-22 16:37:00 +03:00
CLK ( " spi_davinci.0 " , NULL , & spi0_clk ) ,
CLK ( " spi_davinci.1 " , NULL , & spi1_clk ) ,
2012-01-23 13:17:24 +04:00
CLK ( " vpif " , NULL , & vpif_clk ) ,
2016-12-07 18:22:17 +03:00
CLK ( " ahci_da850 " , NULL , & sata_clk ) ,
2013-01-11 04:23:22 +04:00
CLK ( " davinci-rproc.0 " , NULL , & dsp_clk ) ,
2016-10-31 23:04:24 +03:00
CLK ( NULL , NULL , & ehrpwm_clk ) ,
CLK ( " ehrpwm.0 " , " fck " , & ehrpwm0_clk ) ,
CLK ( " ehrpwm.1 " , " fck " , & ehrpwm1_clk ) ,
CLK ( NULL , NULL , & ehrpwm_tbclk ) ,
CLK ( " ehrpwm.0 " , " tbclk " , & ehrpwm0_tbclk ) ,
CLK ( " ehrpwm.1 " , " tbclk " , & ehrpwm1_tbclk ) ,
CLK ( NULL , NULL , & ecap_clk ) ,
CLK ( " ecap.0 " , " fck " , & ecap0_clk ) ,
CLK ( " ecap.1 " , " fck " , & ecap1_clk ) ,
CLK ( " ecap.2 " , " fck " , & ecap2_clk ) ,
2009-07-16 14:41:54 +04:00
CLK ( NULL , NULL , NULL ) ,
} ;
/*
* Device specific mux setup
*
* soc description mux mode mode mux dbg
* reg offset mask mode
*/
static const struct mux_config da850_pins [ ] = {
# ifdef CONFIG_DAVINCI_MUX
/* UART0 function */
MUX_CFG ( DA850 , NUART0_CTS , 3 , 24 , 15 , 2 , false )
MUX_CFG ( DA850 , NUART0_RTS , 3 , 28 , 15 , 2 , false )
MUX_CFG ( DA850 , UART0_RXD , 3 , 16 , 15 , 2 , false )
MUX_CFG ( DA850 , UART0_TXD , 3 , 20 , 15 , 2 , false )
/* UART1 function */
MUX_CFG ( DA850 , UART1_RXD , 4 , 24 , 15 , 2 , false )
MUX_CFG ( DA850 , UART1_TXD , 4 , 28 , 15 , 2 , false )
/* UART2 function */
MUX_CFG ( DA850 , UART2_RXD , 4 , 16 , 15 , 2 , false )
MUX_CFG ( DA850 , UART2_TXD , 4 , 20 , 15 , 2 , false )
/* I2C1 function */
MUX_CFG ( DA850 , I2C1_SCL , 4 , 16 , 15 , 4 , false )
MUX_CFG ( DA850 , I2C1_SDA , 4 , 20 , 15 , 4 , false )
/* I2C0 function */
MUX_CFG ( DA850 , I2C0_SDA , 4 , 12 , 15 , 2 , false )
MUX_CFG ( DA850 , I2C0_SCL , 4 , 8 , 15 , 2 , false )
2009-07-17 12:47:10 +04:00
/* EMAC function */
MUX_CFG ( DA850 , MII_TXEN , 2 , 4 , 15 , 8 , false )
MUX_CFG ( DA850 , MII_TXCLK , 2 , 8 , 15 , 8 , false )
MUX_CFG ( DA850 , MII_COL , 2 , 12 , 15 , 8 , false )
MUX_CFG ( DA850 , MII_TXD_3 , 2 , 16 , 15 , 8 , false )
MUX_CFG ( DA850 , MII_TXD_2 , 2 , 20 , 15 , 8 , false )
MUX_CFG ( DA850 , MII_TXD_1 , 2 , 24 , 15 , 8 , false )
MUX_CFG ( DA850 , MII_TXD_0 , 2 , 28 , 15 , 8 , false )
MUX_CFG ( DA850 , MII_RXCLK , 3 , 0 , 15 , 8 , false )
MUX_CFG ( DA850 , MII_RXDV , 3 , 4 , 15 , 8 , false )
MUX_CFG ( DA850 , MII_RXER , 3 , 8 , 15 , 8 , false )
MUX_CFG ( DA850 , MII_CRS , 3 , 12 , 15 , 8 , false )
MUX_CFG ( DA850 , MII_RXD_3 , 3 , 16 , 15 , 8 , false )
MUX_CFG ( DA850 , MII_RXD_2 , 3 , 20 , 15 , 8 , false )
MUX_CFG ( DA850 , MII_RXD_1 , 3 , 24 , 15 , 8 , false )
MUX_CFG ( DA850 , MII_RXD_0 , 3 , 28 , 15 , 8 , false )
2009-08-11 19:10:50 +04:00
MUX_CFG ( DA850 , MDIO_CLK , 4 , 0 , 15 , 8 , false )
MUX_CFG ( DA850 , MDIO_D , 4 , 4 , 15 , 8 , false )
2009-10-01 01:00:53 +04:00
MUX_CFG ( DA850 , RMII_TXD_0 , 14 , 12 , 15 , 8 , false )
MUX_CFG ( DA850 , RMII_TXD_1 , 14 , 8 , 15 , 8 , false )
MUX_CFG ( DA850 , RMII_TXEN , 14 , 16 , 15 , 8 , false )
MUX_CFG ( DA850 , RMII_CRS_DV , 15 , 4 , 15 , 8 , false )
MUX_CFG ( DA850 , RMII_RXD_0 , 14 , 24 , 15 , 8 , false )
MUX_CFG ( DA850 , RMII_RXD_1 , 14 , 20 , 15 , 8 , false )
MUX_CFG ( DA850 , RMII_RXER , 14 , 28 , 15 , 8 , false )
MUX_CFG ( DA850 , RMII_MHZ_50_CLK , 15 , 0 , 15 , 0 , false )
2009-08-12 01:03:25 +04:00
/* McASP function */
MUX_CFG ( DA850 , ACLKR , 0 , 0 , 15 , 1 , false )
MUX_CFG ( DA850 , ACLKX , 0 , 4 , 15 , 1 , false )
MUX_CFG ( DA850 , AFSR , 0 , 8 , 15 , 1 , false )
MUX_CFG ( DA850 , AFSX , 0 , 12 , 15 , 1 , false )
MUX_CFG ( DA850 , AHCLKR , 0 , 16 , 15 , 1 , false )
MUX_CFG ( DA850 , AHCLKX , 0 , 20 , 15 , 1 , false )
MUX_CFG ( DA850 , AMUTE , 0 , 24 , 15 , 1 , false )
MUX_CFG ( DA850 , AXR_15 , 1 , 0 , 15 , 1 , false )
MUX_CFG ( DA850 , AXR_14 , 1 , 4 , 15 , 1 , false )
MUX_CFG ( DA850 , AXR_13 , 1 , 8 , 15 , 1 , false )
MUX_CFG ( DA850 , AXR_12 , 1 , 12 , 15 , 1 , false )
MUX_CFG ( DA850 , AXR_11 , 1 , 16 , 15 , 1 , false )
MUX_CFG ( DA850 , AXR_10 , 1 , 20 , 15 , 1 , false )
MUX_CFG ( DA850 , AXR_9 , 1 , 24 , 15 , 1 , false )
MUX_CFG ( DA850 , AXR_8 , 1 , 28 , 15 , 1 , false )
MUX_CFG ( DA850 , AXR_7 , 2 , 0 , 15 , 1 , false )
MUX_CFG ( DA850 , AXR_6 , 2 , 4 , 15 , 1 , false )
MUX_CFG ( DA850 , AXR_5 , 2 , 8 , 15 , 1 , false )
MUX_CFG ( DA850 , AXR_4 , 2 , 12 , 15 , 1 , false )
MUX_CFG ( DA850 , AXR_3 , 2 , 16 , 15 , 1 , false )
MUX_CFG ( DA850 , AXR_2 , 2 , 20 , 15 , 1 , false )
MUX_CFG ( DA850 , AXR_1 , 2 , 24 , 15 , 1 , false )
MUX_CFG ( DA850 , AXR_0 , 2 , 28 , 15 , 1 , false )
2009-08-13 22:33:14 +04:00
/* LCD function */
MUX_CFG ( DA850 , LCD_D_7 , 16 , 8 , 15 , 2 , false )
MUX_CFG ( DA850 , LCD_D_6 , 16 , 12 , 15 , 2 , false )
MUX_CFG ( DA850 , LCD_D_5 , 16 , 16 , 15 , 2 , false )
MUX_CFG ( DA850 , LCD_D_4 , 16 , 20 , 15 , 2 , false )
MUX_CFG ( DA850 , LCD_D_3 , 16 , 24 , 15 , 2 , false )
MUX_CFG ( DA850 , LCD_D_2 , 16 , 28 , 15 , 2 , false )
MUX_CFG ( DA850 , LCD_D_1 , 17 , 0 , 15 , 2 , false )
MUX_CFG ( DA850 , LCD_D_0 , 17 , 4 , 15 , 2 , false )
MUX_CFG ( DA850 , LCD_D_15 , 17 , 8 , 15 , 2 , false )
MUX_CFG ( DA850 , LCD_D_14 , 17 , 12 , 15 , 2 , false )
MUX_CFG ( DA850 , LCD_D_13 , 17 , 16 , 15 , 2 , false )
MUX_CFG ( DA850 , LCD_D_12 , 17 , 20 , 15 , 2 , false )
MUX_CFG ( DA850 , LCD_D_11 , 17 , 24 , 15 , 2 , false )
MUX_CFG ( DA850 , LCD_D_10 , 17 , 28 , 15 , 2 , false )
MUX_CFG ( DA850 , LCD_D_9 , 18 , 0 , 15 , 2 , false )
MUX_CFG ( DA850 , LCD_D_8 , 18 , 4 , 15 , 2 , false )
MUX_CFG ( DA850 , LCD_PCLK , 18 , 24 , 15 , 2 , false )
MUX_CFG ( DA850 , LCD_HSYNC , 19 , 0 , 15 , 2 , false )
MUX_CFG ( DA850 , LCD_VSYNC , 19 , 4 , 15 , 2 , false )
MUX_CFG ( DA850 , NLCD_AC_ENB_CS , 19 , 24 , 15 , 2 , false )
2009-08-13 23:16:23 +04:00
/* MMC/SD0 function */
MUX_CFG ( DA850 , MMCSD0_DAT_0 , 10 , 8 , 15 , 2 , false )
MUX_CFG ( DA850 , MMCSD0_DAT_1 , 10 , 12 , 15 , 2 , false )
MUX_CFG ( DA850 , MMCSD0_DAT_2 , 10 , 16 , 15 , 2 , false )
MUX_CFG ( DA850 , MMCSD0_DAT_3 , 10 , 20 , 15 , 2 , false )
MUX_CFG ( DA850 , MMCSD0_CLK , 10 , 0 , 15 , 2 , false )
MUX_CFG ( DA850 , MMCSD0_CMD , 10 , 4 , 15 , 2 , false )
2011-07-10 17:14:37 +04:00
/* MMC/SD1 function */
MUX_CFG ( DA850 , MMCSD1_DAT_0 , 18 , 8 , 15 , 2 , false )
MUX_CFG ( DA850 , MMCSD1_DAT_1 , 19 , 16 , 15 , 2 , false )
MUX_CFG ( DA850 , MMCSD1_DAT_2 , 19 , 12 , 15 , 2 , false )
MUX_CFG ( DA850 , MMCSD1_DAT_3 , 19 , 8 , 15 , 2 , false )
MUX_CFG ( DA850 , MMCSD1_CLK , 18 , 12 , 15 , 2 , false )
MUX_CFG ( DA850 , MMCSD1_CMD , 18 , 16 , 15 , 2 , false )
2009-08-14 00:21:11 +04:00
/* EMIF2.5/EMIFA function */
MUX_CFG ( DA850 , EMA_D_7 , 9 , 0 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_D_6 , 9 , 4 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_D_5 , 9 , 8 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_D_4 , 9 , 12 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_D_3 , 9 , 16 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_D_2 , 9 , 20 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_D_1 , 9 , 24 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_D_0 , 9 , 28 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_A_1 , 12 , 24 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_A_2 , 12 , 20 , 15 , 1 , false )
MUX_CFG ( DA850 , NEMA_CS_3 , 7 , 4 , 15 , 1 , false )
MUX_CFG ( DA850 , NEMA_CS_4 , 7 , 8 , 15 , 1 , false )
MUX_CFG ( DA850 , NEMA_WE , 7 , 16 , 15 , 1 , false )
MUX_CFG ( DA850 , NEMA_OE , 7 , 20 , 15 , 1 , false )
2009-08-14 01:36:25 +04:00
MUX_CFG ( DA850 , EMA_A_0 , 12 , 28 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_A_3 , 12 , 16 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_A_4 , 12 , 12 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_A_5 , 12 , 8 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_A_6 , 12 , 4 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_A_7 , 12 , 0 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_A_8 , 11 , 28 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_A_9 , 11 , 24 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_A_10 , 11 , 20 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_A_11 , 11 , 16 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_A_12 , 11 , 12 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_A_13 , 11 , 8 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_A_14 , 11 , 4 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_A_15 , 11 , 0 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_A_16 , 10 , 28 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_A_17 , 10 , 24 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_A_18 , 10 , 20 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_A_19 , 10 , 16 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_A_20 , 10 , 12 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_A_21 , 10 , 8 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_A_22 , 10 , 4 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_A_23 , 10 , 0 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_D_8 , 8 , 28 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_D_9 , 8 , 24 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_D_10 , 8 , 20 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_D_11 , 8 , 16 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_D_12 , 8 , 12 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_D_13 , 8 , 8 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_D_14 , 8 , 4 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_D_15 , 8 , 0 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_BA_1 , 5 , 24 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_CLK , 6 , 0 , 15 , 1 , false )
MUX_CFG ( DA850 , EMA_WAIT_1 , 6 , 24 , 15 , 1 , false )
MUX_CFG ( DA850 , NEMA_CS_2 , 7 , 0 , 15 , 1 , false )
2009-08-13 22:33:14 +04:00
/* GPIO function */
2010-12-28 01:43:10 +03:00
MUX_CFG ( DA850 , GPIO2_4 , 6 , 12 , 15 , 8 , false )
2009-10-01 01:00:53 +04:00
MUX_CFG ( DA850 , GPIO2_6 , 6 , 4 , 15 , 8 , false )
2009-09-16 01:46:14 +04:00
MUX_CFG ( DA850 , GPIO2_8 , 5 , 28 , 15 , 8 , false )
2009-08-13 22:33:14 +04:00
MUX_CFG ( DA850 , GPIO2_15 , 5 , 0 , 15 , 8 , false )
2010-12-28 01:43:10 +03:00
MUX_CFG ( DA850 , GPIO3_12 , 7 , 12 , 15 , 8 , false )
MUX_CFG ( DA850 , GPIO3_13 , 7 , 8 , 15 , 8 , false )
2009-08-13 23:16:23 +04:00
MUX_CFG ( DA850 , GPIO4_0 , 10 , 28 , 15 , 8 , false )
MUX_CFG ( DA850 , GPIO4_1 , 10 , 24 , 15 , 8 , false )
2011-07-10 17:14:38 +04:00
MUX_CFG ( DA850 , GPIO6_9 , 13 , 24 , 15 , 8 , false )
MUX_CFG ( DA850 , GPIO6_10 , 13 , 20 , 15 , 8 , false )
2010-12-28 01:43:10 +03:00
MUX_CFG ( DA850 , GPIO6_13 , 13 , 8 , 15 , 8 , false )
2009-12-17 15:59:32 +03:00
MUX_CFG ( DA850 , RTC_ALARM , 0 , 28 , 15 , 2 , false )
2012-01-23 13:17:24 +04:00
/* VPIF Capture */
MUX_CFG ( DA850 , VPIF_DIN0 , 15 , 4 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_DIN1 , 15 , 0 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_DIN2 , 14 , 28 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_DIN3 , 14 , 24 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_DIN4 , 14 , 20 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_DIN5 , 14 , 16 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_DIN6 , 14 , 12 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_DIN7 , 14 , 8 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_DIN8 , 16 , 4 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_DIN9 , 16 , 0 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_DIN10 , 15 , 28 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_DIN11 , 15 , 24 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_DIN12 , 15 , 20 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_DIN13 , 15 , 16 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_DIN14 , 15 , 12 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_DIN15 , 15 , 8 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_CLKIN0 , 14 , 0 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_CLKIN1 , 14 , 4 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_CLKIN2 , 19 , 8 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_CLKIN3 , 19 , 16 , 15 , 1 , false )
/* VPIF Display */
MUX_CFG ( DA850 , VPIF_DOUT0 , 17 , 4 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_DOUT1 , 17 , 0 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_DOUT2 , 16 , 28 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_DOUT3 , 16 , 24 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_DOUT4 , 16 , 20 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_DOUT5 , 16 , 16 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_DOUT6 , 16 , 12 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_DOUT7 , 16 , 8 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_DOUT8 , 18 , 4 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_DOUT9 , 18 , 0 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_DOUT10 , 17 , 28 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_DOUT11 , 17 , 24 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_DOUT12 , 17 , 20 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_DOUT13 , 17 , 16 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_DOUT14 , 17 , 12 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_DOUT15 , 17 , 8 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_CLKO2 , 19 , 12 , 15 , 1 , false )
MUX_CFG ( DA850 , VPIF_CLKO3 , 19 , 20 , 15 , 1 , false )
2009-07-16 14:41:54 +04:00
# endif
} ;
2012-10-05 04:11:28 +04:00
const short da850_i2c0_pins [ ] __initconst = {
2009-07-16 14:41:54 +04:00
DA850_I2C0_SDA , DA850_I2C0_SCL ,
- 1
} ;
2012-10-05 04:11:28 +04:00
const short da850_i2c1_pins [ ] __initconst = {
2009-07-16 14:41:54 +04:00
DA850_I2C1_SCL , DA850_I2C1_SDA ,
- 1
} ;
2012-10-05 04:11:28 +04:00
const short da850_lcdcntl_pins [ ] __initconst = {
2009-09-16 01:46:14 +04:00
DA850_LCD_D_0 , DA850_LCD_D_1 , DA850_LCD_D_2 , DA850_LCD_D_3 ,
DA850_LCD_D_4 , DA850_LCD_D_5 , DA850_LCD_D_6 , DA850_LCD_D_7 ,
DA850_LCD_D_8 , DA850_LCD_D_9 , DA850_LCD_D_10 , DA850_LCD_D_11 ,
DA850_LCD_D_12 , DA850_LCD_D_13 , DA850_LCD_D_14 , DA850_LCD_D_15 ,
DA850_LCD_PCLK , DA850_LCD_HSYNC , DA850_LCD_VSYNC , DA850_NLCD_AC_ENB_CS ,
2009-08-13 22:33:14 +04:00
- 1
} ;
2015-07-28 01:27:52 +03:00
const short da850_vpif_capture_pins [ ] __initconst = {
2012-01-23 13:17:24 +04:00
DA850_VPIF_DIN0 , DA850_VPIF_DIN1 , DA850_VPIF_DIN2 , DA850_VPIF_DIN3 ,
DA850_VPIF_DIN4 , DA850_VPIF_DIN5 , DA850_VPIF_DIN6 , DA850_VPIF_DIN7 ,
DA850_VPIF_DIN8 , DA850_VPIF_DIN9 , DA850_VPIF_DIN10 , DA850_VPIF_DIN11 ,
DA850_VPIF_DIN12 , DA850_VPIF_DIN13 , DA850_VPIF_DIN14 , DA850_VPIF_DIN15 ,
DA850_VPIF_CLKIN0 , DA850_VPIF_CLKIN1 , DA850_VPIF_CLKIN2 ,
DA850_VPIF_CLKIN3 ,
- 1
} ;
2015-07-28 01:27:52 +03:00
const short da850_vpif_display_pins [ ] __initconst = {
2012-01-23 13:17:24 +04:00
DA850_VPIF_DOUT0 , DA850_VPIF_DOUT1 , DA850_VPIF_DOUT2 , DA850_VPIF_DOUT3 ,
DA850_VPIF_DOUT4 , DA850_VPIF_DOUT5 , DA850_VPIF_DOUT6 , DA850_VPIF_DOUT7 ,
DA850_VPIF_DOUT8 , DA850_VPIF_DOUT9 , DA850_VPIF_DOUT10 ,
DA850_VPIF_DOUT11 , DA850_VPIF_DOUT12 , DA850_VPIF_DOUT13 ,
DA850_VPIF_DOUT14 , DA850_VPIF_DOUT15 , DA850_VPIF_CLKO2 ,
DA850_VPIF_CLKO3 ,
- 1
} ;
2009-07-16 14:41:54 +04:00
/* FIQ are pri 0-1; otherwise 2-7, with 7 lowest priority */
static u8 da850_default_priorities [ DA850_N_CP_INTC_IRQ ] = {
[ IRQ_DA8XX_COMMTX ] = 7 ,
[ IRQ_DA8XX_COMMRX ] = 7 ,
[ IRQ_DA8XX_NINT ] = 7 ,
[ IRQ_DA8XX_EVTOUT0 ] = 7 ,
[ IRQ_DA8XX_EVTOUT1 ] = 7 ,
[ IRQ_DA8XX_EVTOUT2 ] = 7 ,
[ IRQ_DA8XX_EVTOUT3 ] = 7 ,
[ IRQ_DA8XX_EVTOUT4 ] = 7 ,
[ IRQ_DA8XX_EVTOUT5 ] = 7 ,
[ IRQ_DA8XX_EVTOUT6 ] = 7 ,
[ IRQ_DA8XX_EVTOUT7 ] = 7 ,
[ IRQ_DA8XX_CCINT0 ] = 7 ,
[ IRQ_DA8XX_CCERRINT ] = 7 ,
[ IRQ_DA8XX_TCERRINT0 ] = 7 ,
[ IRQ_DA8XX_AEMIFINT ] = 7 ,
[ IRQ_DA8XX_I2CINT0 ] = 7 ,
[ IRQ_DA8XX_MMCSDINT0 ] = 7 ,
[ IRQ_DA8XX_MMCSDINT1 ] = 7 ,
[ IRQ_DA8XX_ALLINT0 ] = 7 ,
[ IRQ_DA8XX_RTC ] = 7 ,
[ IRQ_DA8XX_SPINT0 ] = 7 ,
[ IRQ_DA8XX_TINT12_0 ] = 7 ,
[ IRQ_DA8XX_TINT34_0 ] = 7 ,
[ IRQ_DA8XX_TINT12_1 ] = 7 ,
[ IRQ_DA8XX_TINT34_1 ] = 7 ,
[ IRQ_DA8XX_UARTINT0 ] = 7 ,
[ IRQ_DA8XX_KEYMGRINT ] = 7 ,
[ IRQ_DA850_MPUADDRERR0 ] = 7 ,
[ IRQ_DA8XX_CHIPINT0 ] = 7 ,
[ IRQ_DA8XX_CHIPINT1 ] = 7 ,
[ IRQ_DA8XX_CHIPINT2 ] = 7 ,
[ IRQ_DA8XX_CHIPINT3 ] = 7 ,
[ IRQ_DA8XX_TCERRINT1 ] = 7 ,
[ IRQ_DA8XX_C0_RX_THRESH_PULSE ] = 7 ,
[ IRQ_DA8XX_C0_RX_PULSE ] = 7 ,
[ IRQ_DA8XX_C0_TX_PULSE ] = 7 ,
[ IRQ_DA8XX_C0_MISC_PULSE ] = 7 ,
[ IRQ_DA8XX_C1_RX_THRESH_PULSE ] = 7 ,
[ IRQ_DA8XX_C1_RX_PULSE ] = 7 ,
[ IRQ_DA8XX_C1_TX_PULSE ] = 7 ,
[ IRQ_DA8XX_C1_MISC_PULSE ] = 7 ,
[ IRQ_DA8XX_MEMERR ] = 7 ,
[ IRQ_DA8XX_GPIO0 ] = 7 ,
[ IRQ_DA8XX_GPIO1 ] = 7 ,
[ IRQ_DA8XX_GPIO2 ] = 7 ,
[ IRQ_DA8XX_GPIO3 ] = 7 ,
[ IRQ_DA8XX_GPIO4 ] = 7 ,
[ IRQ_DA8XX_GPIO5 ] = 7 ,
[ IRQ_DA8XX_GPIO6 ] = 7 ,
[ IRQ_DA8XX_GPIO7 ] = 7 ,
[ IRQ_DA8XX_GPIO8 ] = 7 ,
[ IRQ_DA8XX_I2CINT1 ] = 7 ,
[ IRQ_DA8XX_LCDINT ] = 7 ,
[ IRQ_DA8XX_UARTINT1 ] = 7 ,
[ IRQ_DA8XX_MCASPINT ] = 7 ,
[ IRQ_DA8XX_ALLINT1 ] = 7 ,
[ IRQ_DA8XX_SPINT1 ] = 7 ,
[ IRQ_DA8XX_UHPI_INT1 ] = 7 ,
[ IRQ_DA8XX_USB_INT ] = 7 ,
[ IRQ_DA8XX_IRQN ] = 7 ,
[ IRQ_DA8XX_RWAKEUP ] = 7 ,
[ IRQ_DA8XX_UARTINT2 ] = 7 ,
[ IRQ_DA8XX_DFTSSINT ] = 7 ,
[ IRQ_DA8XX_EHRPWM0 ] = 7 ,
[ IRQ_DA8XX_EHRPWM0TZ ] = 7 ,
[ IRQ_DA8XX_EHRPWM1 ] = 7 ,
[ IRQ_DA8XX_EHRPWM1TZ ] = 7 ,
[ IRQ_DA850_SATAINT ] = 7 ,
[ IRQ_DA850_TINTALL_2 ] = 7 ,
[ IRQ_DA8XX_ECAP0 ] = 7 ,
[ IRQ_DA8XX_ECAP1 ] = 7 ,
[ IRQ_DA8XX_ECAP2 ] = 7 ,
[ IRQ_DA850_MMCSDINT0_1 ] = 7 ,
[ IRQ_DA850_MMCSDINT1_1 ] = 7 ,
[ IRQ_DA850_T12CMPINT0_2 ] = 7 ,
[ IRQ_DA850_T12CMPINT1_2 ] = 7 ,
[ IRQ_DA850_T12CMPINT2_2 ] = 7 ,
[ IRQ_DA850_T12CMPINT3_2 ] = 7 ,
[ IRQ_DA850_T12CMPINT4_2 ] = 7 ,
[ IRQ_DA850_T12CMPINT5_2 ] = 7 ,
[ IRQ_DA850_T12CMPINT6_2 ] = 7 ,
[ IRQ_DA850_T12CMPINT7_2 ] = 7 ,
[ IRQ_DA850_T12CMPINT0_3 ] = 7 ,
[ IRQ_DA850_T12CMPINT1_3 ] = 7 ,
[ IRQ_DA850_T12CMPINT2_3 ] = 7 ,
[ IRQ_DA850_T12CMPINT3_3 ] = 7 ,
[ IRQ_DA850_T12CMPINT4_3 ] = 7 ,
[ IRQ_DA850_T12CMPINT5_3 ] = 7 ,
[ IRQ_DA850_T12CMPINT6_3 ] = 7 ,
[ IRQ_DA850_T12CMPINT7_3 ] = 7 ,
[ IRQ_DA850_RPIINT ] = 7 ,
[ IRQ_DA850_VPIFINT ] = 7 ,
[ IRQ_DA850_CCINT1 ] = 7 ,
[ IRQ_DA850_CCERRINT1 ] = 7 ,
[ IRQ_DA850_TCERRINT2 ] = 7 ,
[ IRQ_DA850_TINTALL_3 ] = 7 ,
[ IRQ_DA850_MCBSP0RINT ] = 7 ,
[ IRQ_DA850_MCBSP0XINT ] = 7 ,
[ IRQ_DA850_MCBSP1RINT ] = 7 ,
[ IRQ_DA850_MCBSP1XINT ] = 7 ,
[ IRQ_DA8XX_ARMCLKSTOPREQ ] = 7 ,
} ;
static struct map_desc da850_io_desc [ ] = {
{
. virtual = IO_VIRT ,
. pfn = __phys_to_pfn ( IO_PHYS ) ,
. length = IO_SIZE ,
. type = MT_DEVICE
} ,
{
. virtual = DA8XX_CP_INTC_VIRT ,
. pfn = __phys_to_pfn ( DA8XX_CP_INTC_BASE ) ,
. length = DA8XX_CP_INTC_SIZE ,
. type = MT_DEVICE
} ,
} ;
2010-05-08 01:06:36 +04:00
static u32 da850_psc_bases [ ] = { DA8XX_PSC0_BASE , DA8XX_PSC1_BASE } ;
2009-07-16 14:41:54 +04:00
/* Contents of JTAG ID register used to identify exact cpu type */
static struct davinci_id da850_ids [ ] = {
{
. variant = 0x0 ,
. part_no = 0xb7d1 ,
. manufacturer = 0x017 , /* 0x02f >> 1 */
. cpu_id = DAVINCI_CPU_ID_DA850 ,
. name = " da850/omap-l138 " ,
} ,
2011-01-03 16:03:27 +03:00
{
. variant = 0x1 ,
. part_no = 0xb7d1 ,
. manufacturer = 0x017 , /* 0x02f >> 1 */
. cpu_id = DAVINCI_CPU_ID_DA850 ,
. name = " da850/omap-l138/am18x " ,
} ,
2009-07-16 14:41:54 +04:00
} ;
static struct davinci_timer_instance da850_timer_instance [ 4 ] = {
{
2010-05-08 01:06:35 +04:00
. base = DA8XX_TIMER64P0_BASE ,
2009-07-16 14:41:54 +04:00
. bottom_irq = IRQ_DA8XX_TINT12_0 ,
. top_irq = IRQ_DA8XX_TINT34_0 ,
} ,
{
2010-05-08 01:06:35 +04:00
. base = DA8XX_TIMER64P1_BASE ,
2009-07-16 14:41:54 +04:00
. bottom_irq = IRQ_DA8XX_TINT12_1 ,
. top_irq = IRQ_DA8XX_TINT34_1 ,
} ,
{
2010-05-08 01:06:35 +04:00
. base = DA850_TIMER64P2_BASE ,
2009-07-16 14:41:54 +04:00
. bottom_irq = IRQ_DA850_TINT12_2 ,
. top_irq = IRQ_DA850_TINT34_2 ,
} ,
{
2010-05-08 01:06:35 +04:00
. base = DA850_TIMER64P3_BASE ,
2009-07-16 14:41:54 +04:00
. bottom_irq = IRQ_DA850_TINT12_3 ,
. top_irq = IRQ_DA850_TINT34_3 ,
} ,
} ;
/*
* T0_BOT : Timer 0 , bottom : Used for clock_event
* T0_TOP : Timer 0 , top : Used for clocksource
* T1_BOT , T1_TOP : Timer 1 , bottom & top : Used for watchdog timer
*/
static struct davinci_timer_info da850_timer_info = {
. timers = da850_timer_instance ,
. clockevent_id = T0_BOT ,
. clocksource_id = T0_TOP ,
} ;
2009-09-22 19:44:01 +04:00
# ifdef CONFIG_CPU_FREQ
/*
* Notes :
* According to the TRM , minimum PLLM results in maximum power savings .
* The OPP definitions below should keep the PLLM as low as possible .
*
2010-12-20 19:01:33 +03:00
* The output of the PLLM must be between 300 to 600 MHz .
2009-09-22 19:44:01 +04:00
*/
struct da850_opp {
unsigned int freq ; /* in KHz */
unsigned int prediv ;
unsigned int mult ;
unsigned int postdiv ;
2009-09-22 19:44:02 +04:00
unsigned int cvdd_min ; /* in uV */
unsigned int cvdd_max ; /* in uV */
2009-09-22 19:44:01 +04:00
} ;
2010-12-20 19:01:33 +03:00
static const struct da850_opp da850_opp_456 = {
. freq = 456000 ,
. prediv = 1 ,
. mult = 19 ,
. postdiv = 1 ,
. cvdd_min = 1300000 ,
. cvdd_max = 1350000 ,
} ;
static const struct da850_opp da850_opp_408 = {
. freq = 408000 ,
. prediv = 1 ,
. mult = 17 ,
. postdiv = 1 ,
. cvdd_min = 1300000 ,
. cvdd_max = 1350000 ,
} ;
static const struct da850_opp da850_opp_372 = {
. freq = 372000 ,
. prediv = 2 ,
. mult = 31 ,
. postdiv = 1 ,
. cvdd_min = 1200000 ,
. cvdd_max = 1320000 ,
} ;
2009-09-22 19:44:01 +04:00
static const struct da850_opp da850_opp_300 = {
. freq = 300000 ,
. prediv = 1 ,
. mult = 25 ,
. postdiv = 2 ,
2010-07-07 12:32:49 +04:00
. cvdd_min = 1200000 ,
2009-09-22 19:44:02 +04:00
. cvdd_max = 1320000 ,
2009-09-22 19:44:01 +04:00
} ;
static const struct da850_opp da850_opp_200 = {
. freq = 200000 ,
. prediv = 1 ,
. mult = 25 ,
. postdiv = 3 ,
2010-07-07 12:32:49 +04:00
. cvdd_min = 1100000 ,
2009-09-22 19:44:02 +04:00
. cvdd_max = 1160000 ,
2009-09-22 19:44:01 +04:00
} ;
static const struct da850_opp da850_opp_96 = {
. freq = 96000 ,
. prediv = 1 ,
. mult = 20 ,
. postdiv = 5 ,
2010-07-07 12:32:49 +04:00
. cvdd_min = 1000000 ,
2009-09-22 19:44:02 +04:00
. cvdd_max = 1050000 ,
2009-09-22 19:44:01 +04:00
} ;
# define OPP(freq) \
{ \
2013-03-30 14:55:15 +04:00
. driver_data = ( unsigned int ) & da850_opp_ # # freq , \
2009-09-22 19:44:01 +04:00
. frequency = freq * 1000 , \
}
static struct cpufreq_frequency_table da850_freq_table [ ] = {
2010-12-20 19:01:33 +03:00
OPP ( 456 ) ,
OPP ( 408 ) ,
OPP ( 372 ) ,
2009-09-22 19:44:01 +04:00
OPP ( 300 ) ,
OPP ( 200 ) ,
OPP ( 96 ) ,
{
2013-03-30 14:55:15 +04:00
. driver_data = 0 ,
2009-09-22 19:44:01 +04:00
. frequency = CPUFREQ_TABLE_END ,
} ,
} ;
2010-12-20 19:01:33 +03:00
# ifdef CONFIG_REGULATOR
static int da850_set_voltage ( unsigned int index ) ;
static int da850_regulator_init ( void ) ;
# endif
static struct davinci_cpufreq_config cpufreq_info = {
. freq_table = da850_freq_table ,
# ifdef CONFIG_REGULATOR
. init = da850_regulator_init ,
. set_voltage = da850_set_voltage ,
# endif
} ;
2009-10-22 13:42:16 +04:00
# ifdef CONFIG_REGULATOR
static struct regulator * cvdd ;
static int da850_set_voltage ( unsigned int index )
{
struct da850_opp * opp ;
if ( ! cvdd )
return - ENODEV ;
2013-03-30 14:55:15 +04:00
opp = ( struct da850_opp * ) cpufreq_info . freq_table [ index ] . driver_data ;
2009-10-22 13:42:16 +04:00
return regulator_set_voltage ( cvdd , opp - > cvdd_min , opp - > cvdd_max ) ;
}
static int da850_regulator_init ( void )
{
cvdd = regulator_get ( NULL , " cvdd " ) ;
if ( WARN ( IS_ERR ( cvdd ) , " Unable to obtain voltage regulator for CVDD; "
" voltage scaling unsupported \n " ) ) {
return PTR_ERR ( cvdd ) ;
}
return 0 ;
}
# endif
2009-09-22 19:44:01 +04:00
static struct platform_device da850_cpufreq_device = {
. name = " cpufreq-davinci " ,
. dev = {
. platform_data = & cpufreq_info ,
} ,
2010-07-20 15:16:51 +04:00
. id = - 1 ,
2009-09-22 19:44:01 +04:00
} ;
2010-12-20 19:01:33 +03:00
unsigned int da850_max_speed = 300000 ;
2012-04-30 18:00:15 +04:00
int da850_register_cpufreq ( char * async_clk )
2009-09-22 19:44:01 +04:00
{
2010-12-20 19:01:33 +03:00
int i ;
2010-07-20 15:16:51 +04:00
/* cpufreq driver can help keep an "async" clock constant */
if ( async_clk )
clk_add_alias ( " async " , da850_cpufreq_device . name ,
async_clk , NULL ) ;
2010-12-20 19:01:33 +03:00
for ( i = 0 ; i < ARRAY_SIZE ( da850_freq_table ) ; i + + ) {
if ( da850_freq_table [ i ] . frequency < = da850_max_speed ) {
cpufreq_info . freq_table = & da850_freq_table [ i ] ;
break ;
}
}
2010-07-20 15:16:51 +04:00
2009-09-22 19:44:01 +04:00
return platform_device_register ( & da850_cpufreq_device ) ;
}
static int da850_round_armrate ( struct clk * clk , unsigned long rate )
{
2014-04-26 00:15:55 +04:00
int ret = 0 , diff ;
2009-09-22 19:44:01 +04:00
unsigned int best = ( unsigned int ) - 1 ;
2010-12-20 19:01:33 +03:00
struct cpufreq_frequency_table * table = cpufreq_info . freq_table ;
2014-04-26 00:15:55 +04:00
struct cpufreq_frequency_table * pos ;
2009-09-22 19:44:01 +04:00
rate / = 1000 ; /* convert to kHz */
2014-04-26 00:15:55 +04:00
cpufreq_for_each_entry ( pos , table ) {
diff = pos - > frequency - rate ;
2009-09-22 19:44:01 +04:00
if ( diff < 0 )
diff = - diff ;
if ( diff < best ) {
best = diff ;
2014-04-26 00:15:55 +04:00
ret = pos - > frequency ;
2009-09-22 19:44:01 +04:00
}
}
return ret * 1000 ;
}
static int da850_set_armrate ( struct clk * clk , unsigned long index )
{
struct clk * pllclk = & pll0_clk ;
return clk_set_rate ( pllclk , index ) ;
}
2016-12-07 18:22:18 +03:00
static int da850_set_pll0rate ( struct clk * clk , unsigned long rate )
2009-09-22 19:44:01 +04:00
{
struct pll_data * pll = clk - > pll_data ;
2016-12-07 18:22:18 +03:00
struct cpufreq_frequency_table * freq ;
unsigned int prediv , mult , postdiv ;
struct da850_opp * opp = NULL ;
2009-09-22 19:44:01 +04:00
int ret ;
2016-12-07 18:22:18 +03:00
rate / = 1000 ;
for ( freq = da850_freq_table ;
freq - > frequency ! = CPUFREQ_TABLE_END ; freq + + ) {
/* rate is in Hz, freq->frequency is in KHz */
if ( freq - > frequency = = rate ) {
opp = ( struct da850_opp * ) freq - > driver_data ;
break ;
}
}
if ( ! opp )
return - EINVAL ;
2009-09-22 19:44:01 +04:00
prediv = opp - > prediv ;
mult = opp - > mult ;
postdiv = opp - > postdiv ;
ret = davinci_set_pllrate ( pll , prediv , mult , postdiv ) ;
if ( WARN_ON ( ret ) )
return ret ;
return 0 ;
}
# else
2010-07-20 15:16:48 +04:00
int __init da850_register_cpufreq ( char * async_clk )
2009-09-22 19:44:01 +04:00
{
return 0 ;
}
static int da850_set_armrate ( struct clk * clk , unsigned long rate )
{
return - EINVAL ;
}
static int da850_set_pll0rate ( struct clk * clk , unsigned long armrate )
{
return - EINVAL ;
}
static int da850_round_armrate ( struct clk * clk , unsigned long rate )
{
return clk - > rate ;
}
# endif
2012-01-23 13:17:24 +04:00
/* VPIF resource, platform data */
static u64 da850_vpif_dma_mask = DMA_BIT_MASK ( 32 ) ;
static struct resource da850_vpif_resource [ ] = {
{
. start = DA8XX_VPIF_BASE ,
. end = DA8XX_VPIF_BASE + 0xfff ,
. flags = IORESOURCE_MEM ,
}
} ;
static struct platform_device da850_vpif_dev = {
. name = " vpif " ,
. id = - 1 ,
. dev = {
. dma_mask = & da850_vpif_dma_mask ,
. coherent_dma_mask = DMA_BIT_MASK ( 32 ) ,
} ,
. resource = da850_vpif_resource ,
. num_resources = ARRAY_SIZE ( da850_vpif_resource ) ,
} ;
static struct resource da850_vpif_display_resource [ ] = {
{
. start = IRQ_DA850_VPIFINT ,
. end = IRQ_DA850_VPIFINT ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct platform_device da850_vpif_display_dev = {
. name = " vpif_display " ,
. id = - 1 ,
. dev = {
. dma_mask = & da850_vpif_dma_mask ,
. coherent_dma_mask = DMA_BIT_MASK ( 32 ) ,
} ,
. resource = da850_vpif_display_resource ,
. num_resources = ARRAY_SIZE ( da850_vpif_display_resource ) ,
} ;
static struct resource da850_vpif_capture_resource [ ] = {
{
. start = IRQ_DA850_VPIFINT ,
. end = IRQ_DA850_VPIFINT ,
. flags = IORESOURCE_IRQ ,
} ,
{
. start = IRQ_DA850_VPIFINT ,
. end = IRQ_DA850_VPIFINT ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct platform_device da850_vpif_capture_dev = {
. name = " vpif_capture " ,
. id = - 1 ,
. dev = {
. dma_mask = & da850_vpif_dma_mask ,
. coherent_dma_mask = DMA_BIT_MASK ( 32 ) ,
} ,
. resource = da850_vpif_capture_resource ,
. num_resources = ARRAY_SIZE ( da850_vpif_capture_resource ) ,
} ;
int __init da850_register_vpif ( void )
{
return platform_device_register ( & da850_vpif_dev ) ;
}
int __init da850_register_vpif_display ( struct vpif_display_config
* display_config )
{
da850_vpif_display_dev . dev . platform_data = display_config ;
return platform_device_register ( & da850_vpif_display_dev ) ;
}
int __init da850_register_vpif_capture ( struct vpif_capture_config
* capture_config )
{
da850_vpif_capture_dev . dev . platform_data = capture_config ;
return platform_device_register ( & da850_vpif_capture_dev ) ;
}
2013-08-18 09:18:59 +04:00
static struct davinci_gpio_platform_data da850_gpio_platform_data = {
. ngpio = 144 ,
} ;
int __init da850_register_gpio ( void )
{
return da8xx_register_gpio ( & da850_gpio_platform_data ) ;
}
2009-07-16 14:41:54 +04:00
static struct davinci_soc_info davinci_soc_info_da850 = {
. io_desc = da850_io_desc ,
. io_desc_num = ARRAY_SIZE ( da850_io_desc ) ,
2010-05-08 01:06:34 +04:00
. jtag_id_reg = DA8XX_SYSCFG0_BASE + DA8XX_JTAG_ID_REG ,
2009-07-16 14:41:54 +04:00
. ids = da850_ids ,
. ids_num = ARRAY_SIZE ( da850_ids ) ,
. cpu_clks = da850_clks ,
. psc_bases = da850_psc_bases ,
. psc_bases_num = ARRAY_SIZE ( da850_psc_bases ) ,
2010-05-08 01:06:38 +04:00
. pinmux_base = DA8XX_SYSCFG0_BASE + 0x120 ,
2009-07-16 14:41:54 +04:00
. pinmux_pins = da850_pins ,
. pinmux_pins_num = ARRAY_SIZE ( da850_pins ) ,
2010-05-08 01:06:37 +04:00
. intc_base = DA8XX_CP_INTC_BASE ,
2009-07-16 14:41:54 +04:00
. intc_type = DAVINCI_INTC_TYPE_CP_INTC ,
. intc_irq_prios = da850_default_priorities ,
. intc_irq_num = DA850_N_CP_INTC_IRQ ,
. timer_info = & da850_timer_info ,
. emac_pdata = & da8xx_emac_pdata ,
2012-10-05 21:04:42 +04:00
. sram_dma = DA8XX_SHARED_RAM_BASE ,
. sram_len = SZ_128K ,
2009-07-16 14:41:54 +04:00
} ;
void __init da850_init ( void )
{
2009-11-16 14:51:38 +03:00
unsigned int v ;
2010-05-08 01:06:39 +04:00
davinci_common_init ( & davinci_soc_info_da850 ) ;
2009-11-16 14:51:32 +03:00
da8xx_syscfg0_base = ioremap ( DA8XX_SYSCFG0_BASE , SZ_4K ) ;
if ( WARN ( ! da8xx_syscfg0_base , " Unable to map syscfg0 module " ) )
return ;
da8xx_syscfg1_base = ioremap ( DA8XX_SYSCFG1_BASE , SZ_4K ) ;
if ( WARN ( ! da8xx_syscfg1_base , " Unable to map syscfg1 module " ) )
2009-08-31 14:17:59 +04:00
return ;
2009-11-16 14:51:38 +03:00
/* Unlock writing to PLL0 registers */
v = __raw_readl ( DA8XX_SYSCFG0_VIRT ( DA8XX_CFGCHIP0_REG ) ) ;
v & = ~ CFGCHIP0_PLL_MASTER_LOCK ;
__raw_writel ( v , DA8XX_SYSCFG0_VIRT ( DA8XX_CFGCHIP0_REG ) ) ;
/* Unlock writing to PLL1 registers */
v = __raw_readl ( DA8XX_SYSCFG0_VIRT ( DA8XX_CFGCHIP3_REG ) ) ;
v & = ~ CFGCHIP3_PLL1_MASTER_LOCK ;
__raw_writel ( v , DA8XX_SYSCFG0_VIRT ( DA8XX_CFGCHIP3_REG ) ) ;
2016-04-14 22:13:35 +03:00
davinci_clk_init ( davinci_soc_info_da850 . cpu_clks ) ;
2009-07-16 14:41:54 +04:00
}