__maybe_unused void rk_iomux_sdcard_restore(void) { debug("rk restore sdcard iomux config.\n"); grf_writel((3 << 28) | (3 << 30) | grf_gpio1b_iomux, GRF_GPIO1B_IOMUX); grf_writel((0xFFF << 16) | grf_gpio1c_iomux, GRF_GPIO1C_IOMUX); debug("grf gpio1b iomux = 0x%08x\n", grf_readl(GRF_GPIO1B_IOMUX) & ((3<<12) | (3<<14))); debug("grf gpio1c iomux = 0x%08x\n", grf_readl(GRF_GPIO1C_IOMUX) & 0xFFF); }
static int rk30_vmac_speed_switch(int speed) { // printk("%s--speed=%d\n", __FUNCTION__, speed); if (10 == speed) { grf_writel(grf_readl(GRF_SOC_CON1) | (2<<16) & (~BIT_EMAC_SPEED), GRF_SOC_CON1); } else { grf_writel(grf_readl(GRF_SOC_CON1) | (2<<16) | BIT_EMAC_SPEED, GRF_SOC_CON1); } }
__maybe_unused void rk_iomux_sdcard_save(void) { debug("rk save sdcard iomux config.\n"); grf_gpio1b_iomux = grf_readl(GRF_GPIO1B_IOMUX) & ((3<<12) | (3<<14)); grf_gpio1c_iomux = grf_readl(GRF_GPIO1C_IOMUX) & 0xFFF; debug("grf gpio1b iomux = 0x%08x\n", grf_gpio1b_iomux); debug("grf gpio1c iomux = 0x%08x\n", grf_gpio1c_iomux); if (RK_FORCE_SELECT_JTAG) { debug("Force select jtag from sdcard io.\n"); } }
__maybe_unused void rk_iomux_sdcard_restore(void) { debug("rk restore sdcard iomux config.\n"); grf_writel((0x1FFFF << 16) | grf_gpio6c_iomux, GRF_GPIO6C_IOMUX); debug("grf gpio6c iomux = 0x%08x\n", grf_readl(GRF_GPIO6C_IOMUX) & 0x1FFFF); }
/*0 core, 1 gpu, 2 func*/ static u32 rk312x_pvtm_get_value(u32 ch , u32 time_us) { u32 val = 0, clk_cnt, check_cnt, pvtm_done_bit; if (ch > 2) return 0; /*24m clk ,24cnt=1us*/ clk_cnt = time_us*24; grf_writel(clk_cnt, RK312X_PVTM_CON0+(ch+1)*4); if ((ch == 0) || (ch == 1)) grf_writel(wr_msk_bit(3, ch*8, 0x3), RK312X_PVTM_CON0); else if (ch == 2) grf_writel(wr_msk_bit(3, 12, 0x3), RK312X_PVTM_CON0); if (time_us >= 1000) mdelay(time_us / 1000); udelay(time_us % 1000); if (ch == 0) pvtm_done_bit = 1; else if (ch == 1) pvtm_done_bit = 0; else if (ch == 2) pvtm_done_bit = 2; check_cnt = 100; while (!(grf_readl(RK312X_PVTM_STATUS0) & (1 << pvtm_done_bit))) { udelay(4); check_cnt--; if (!check_cnt) break; } if (check_cnt) val = grf_readl(RK312X_PVTM_STATUS0+(ch+1)*4); if ((ch == 0) || (ch == 1)) grf_writel(wr_msk_bit(0, ch*8, 0x3), RK312X_PVTM_CON0); else if (ch == 2) grf_writel(wr_msk_bit(0, 12, 0x3), RK312X_PVTM_CON0); return val; }
static void rk3288_uart2usb(uint32 en) { if (en) { grf_writel((0x0000 | (0x00C0 << 16)), GRF_UOC0_CON3); // usbphy0 bypass disable and otg enable. /* if define force enable usb to uart, maybe usb function will be affected */ #ifdef CONFIG_RKUART2USB_FORCE grf_writel((0x0004 | (0x0004 << 16)), GRF_UOC0_CON2); // software control usb phy enable grf_writel((0x002A | (0x003F << 16)), GRF_UOC0_CON3); // usb phy enter suspend grf_writel((0x00C0 | (0x00C0 << 16)), GRF_UOC0_CON3); // usb uart enable. #else con = grf_readl(GRF_SOC_STATUS2); if (!(con & (1<<14)) && (con & (1<<17))) { // check IO domain voltage select. grf_writel((0x0004 | (0x0004 << 16)), GRF_UOC0_CON2); // software control usb phy enable grf_writel((0x002A | (0x003F << 16)), GRF_UOC0_CON3); // usb phy enter suspend grf_writel((0x00C0 | (0x00C0 << 16)), GRF_UOC0_CON3); // uart enable } #endif /* CONFIG_RKUART2USB_FORCE */ } else { grf_writel((0x0000 | (0x00C0 << 16)), GRF_UOC0_CON3); // usb uart disable grf_writel((0x0000 | (0x0004 << 16)), GRF_UOC0_CON2); // software control usb phy disable } }