static unsigned long i2s_ext_mclk_set_clock(unsigned long clk, int ch) { unsigned long ret_clk = 0; PM_DBGOUT("%s: %ld\n", __func__, clk); if (clk > 1) { // set input & gpio_mode of I2S MCLK pin switch (ch) { case 0: nxp_soc_gpio_set_io_func(PAD_GPIO_D + 13, NX_GPIO_PADFUNC_0); nxp_soc_gpio_set_io_dir(PAD_GPIO_D + 13, 0); break; case 1: case 2: nxp_soc_gpio_set_io_func(PAD_GPIO_A + 28, NX_GPIO_PADFUNC_0); nxp_soc_gpio_set_io_dir(PAD_GPIO_A + 28, 0); break; default: break; } #if defined(CFG_EXT_MCLK_PWM_CH) nxp_cpu_periph_clock_register(CLK_ID_I2S_0 + ch, clk, 0); i2s_ext_clk_value = clk; } else { if (clk) { ret_clk = nxp_soc_pwm_set_frequency(CFG_EXT_MCLK_PWM_CH, i2s_ext_clk_value, 50); } else { ret_clk = nxp_soc_pwm_set_frequency(CFG_EXT_MCLK_PWM_CH, 0, 0); } } msleep(1); #else printk("err!!! must have other ext_clk++\n"); nxp_cpu_periph_clock_register(CLK_ID_I2S_0 + ch, clk, 0); i2s_ext_clk_value = clk; } else {
static void nand_dev_init(struct mtd_info *mtd) { unsigned int io = CFG_IO_NAND_nWP; NX_MCUS_SetAutoResetEnable(CTRUE); NX_MCUS_ClearInterruptPending(0); NX_MCUS_SetInterruptEnable(0, CFALSE); /* polling */ #ifdef CFG_NAND_ECCIRQ_MODE NX_MCUS_SetECCInterruptEnable(0, CTRUE); #else NX_MCUS_SetECCInterruptEnable(0, CFALSE); #endif NX_MCUS_SetNFBank(0); NX_MCUS_SetNFCSEnable(CFALSE); nxp_soc_gpio_set_out_value(io, 0); nxp_soc_gpio_set_io_dir(io, 1); nxp_soc_gpio_set_io_func(io, nxp_soc_gpio_get_altnum(io)); nxp_soc_gpio_set_out_value(io, 1); }
int nxp_usb_phy_init(struct platform_device *pdev, int type) { PM_DBGOUT("++ %s\n", __func__); if (!pdev) return -EINVAL; if( type == NXP_USB_PHY_OTG ) { u32 temp; // 1. Release otg common reset writel(readl(SOC_VA_RSTCON + 0x04) & ~(1<<25), SOC_VA_RSTCON + 0x04); // reset on udelay(1); writel(readl(SOC_VA_RSTCON + 0x04) | (1<<25), SOC_VA_RSTCON + 0x04); // reset off // 2. Program scale mode to real mode writel(readl(SOC_VA_TIEOFF + 0x30) & ~(3<<0), SOC_VA_TIEOFF + 0x30); // 3. Select word interface and enable word interface selection #if (HOST_SS_BUS_WIDTH16 == 1) writel(readl(SOC_VA_TIEOFF + 0x38) | (3<<8), SOC_VA_TIEOFF + 0x38); // 2'b01 8bit, 2'b11 16bit word #else writel(readl(SOC_VA_TIEOFF + 0x38) & ~(3<<8), SOC_VA_TIEOFF + 0x38); #endif // 4. Select VBUS temp = readl(SOC_VA_TIEOFF + 0x34); temp &= ~(3<<24); /* Analog 5V */ // temp |= (3<<24); /* Digital 3.3V */ writel(temp, SOC_VA_TIEOFF + 0x34); // 5. POR of PHY temp &= ~(3<<7); temp |= (1<<7); writel(temp, SOC_VA_TIEOFF + 0x34); #if 1 udelay(1); writel(readl(SOC_VA_TIEOFF + 0x34) | (3<<7), SOC_VA_TIEOFF + 0x34); #endif udelay(10); // 40us delay need. // 6. UTMI reset temp |= (1<<3); writel(temp, SOC_VA_TIEOFF + 0x34); udelay(1); // 10 clock need // 7. AHB reset temp |= (1<<2); writel(temp, SOC_VA_TIEOFF + 0x34); udelay(1); // 10 clock need } else { u32 fladj_val, bit_num, bit_pos = 21; // fladj_val0 u32 temp1, temp2, temp3; // 0. Set FLADJ Register. fladj_val = 0x20; #if 0 temp1 = readl(SOC_VA_TIEOFF + 0x1C) & ~(0x1FFFFFF); temp2 = temp1 | fladj_val; #else temp2 = fladj_val; #endif for (bit_num = 0; bit_num < 6; bit_num++) { if (fladj_val & (1<<bit_num)) temp2 |= (0x7 << bit_pos); bit_pos -= 3; } writel(temp2, SOC_VA_TIEOFF + 0x1C); // 1. Release common reset of host controller writel(readl(SOC_VA_RSTCON + 0x04) & ~(1<<24), SOC_VA_RSTCON + 0x04); // reset on udelay(1); if (type == NXP_USB_PHY_HSIC) { #if defined (CFG_GPIO_HSIC_EXTHUB_RESET) // GPIO Reset nxp_soc_gpio_set_io_dir(CFG_GPIO_HSIC_EXTHUB_RESET, CTRUE); nxp_soc_gpio_set_io_pull_enb(CFG_GPIO_HSIC_EXTHUB_RESET, CTRUE); nxp_soc_gpio_set_out_value(CFG_GPIO_HSIC_EXTHUB_RESET, CTRUE); udelay( 10 ); nxp_soc_gpio_set_out_value(CFG_GPIO_HSIC_EXTHUB_RESET, CFALSE); udelay( 10 ); nxp_soc_gpio_set_out_value(CFG_GPIO_HSIC_EXTHUB_RESET, CTRUE); #else printk("is there extern hub on hsic port???\n"); #endif } writel(readl(SOC_VA_RSTCON + 0x04) | (1<<24), SOC_VA_RSTCON + 0x04); // reset off if (type == NXP_USB_PHY_HSIC) { // HSIC 12M rerference Clock setting writel( 0x02, USB2_HOST_CLKGEN); writel( 0x0C, USB2_HOST_CLKGEN + 0x4); // 8 : ok, c : no writel( 0x10, USB2_HOST_CLKGEN + 0xc); writel( 0x30, USB2_HOST_CLKGEN + 0xc); writel( 0x06, USB2_HOST_CLKGEN); // HSIC 480M clock setting writel(readl(SOC_VA_TIEOFF + 0x14) & ~(3<<23), SOC_VA_TIEOFF + 0x14); writel(readl(SOC_VA_TIEOFF + 0x14) | (2<<23), SOC_VA_TIEOFF + 0x14); // HSIC Enable in PORT1 of LINK writel(readl(SOC_VA_TIEOFF + 0x14) & ~(7<<14), SOC_VA_TIEOFF + 0x14); writel(readl(SOC_VA_TIEOFF + 0x14) | (2<<14), SOC_VA_TIEOFF + 0x14); } // 2. Program AHB Burst type temp1 = readl(SOC_VA_TIEOFF + 0x1C) & ~HOST_SS_DMA_BURST_MASK; if (type == NXP_USB_PHY_OHCI) writel(temp1 | OHCI_SS_ENABLE_DMA_BURST, SOC_VA_TIEOFF + 0x1C); else writel(temp1 | EHCI_SS_ENABLE_DMA_BURST, SOC_VA_TIEOFF + 0x1C); // 3. Select word interface and enable word interface selection temp1 = readl(SOC_VA_TIEOFF + 0x14) | (3<<25); // 2'b01 8bit, 2'b11 16bit word temp2 = readl(SOC_VA_TIEOFF + 0x24) | (3<<8); // 2'b01 8bit, 2'b11 16bit word temp3 = readl(SOC_VA_TIEOFF + 0x2C) | (3<<12); // 2'b01 8bit, 2'b11 16bit word #if (HOST_SS_BUS_WIDTH16 == 0) temp1 &= ~(2<<25); temp2 &= ~(2<<8); temp3 &= ~(2<<12); #endif writel(temp1, SOC_VA_TIEOFF + 0x14); writel(temp2, SOC_VA_TIEOFF + 0x24); if (type == NXP_USB_PHY_HSIC) writel(temp3, SOC_VA_TIEOFF + 0x2C); // 4. POR of PHY temp1 = readl(SOC_VA_TIEOFF + 0x20); temp1 &= ~(3<<7); temp1 |= (1<<7); writel(temp1, SOC_VA_TIEOFF + 0x20); udelay(10); // 40us delay need. if (type == NXP_USB_PHY_HSIC) { // Set HSIC mode writel(readl(SOC_VA_TIEOFF + 0x14) | (3<<23), SOC_VA_TIEOFF + 0x14); // POR of HSIC PHY writel(readl(SOC_VA_TIEOFF + 0x28) & ~(3<<18), SOC_VA_TIEOFF + 0x28); writel(readl(SOC_VA_TIEOFF + 0x28) | (1<<18), SOC_VA_TIEOFF + 0x28); // Wait clock of PHY - about 40 micro seconds udelay(100); // 40us delay need. } // 5. Release utmi reset temp1 = readl(SOC_VA_TIEOFF + 0x14) | (7<<20); if (type == NXP_USB_PHY_HSIC) writel(temp1, SOC_VA_TIEOFF + 0x14); else writel(temp1 & ~(4<<20), SOC_VA_TIEOFF + 0x14); //6. Release ahb reset of EHCI, OHCI //writel(readl(SOC_VA_TIEOFF + 0x14) & ~(7<<17), SOC_VA_TIEOFF + 0x14); writel(readl(SOC_VA_TIEOFF + 0x14) | (7<<17), SOC_VA_TIEOFF + 0x14); } PM_DBGOUT("-- %s\n", __func__); return 0; }