/***************************************************************************** function name : mali_domain_powerdown_begin description : powerdown begin with it input vars : void output vars : NA return value : void calls : phy_reg_writel called : mali_platform_powerdown history : 1.data : 04/03/2014 author : s00250033 modify : new *****************************************************************************/ void mali_domain_powerdown_begin(void) { MALI_DEBUG_PRINT(3, ("mali power down start! \n")); phy_reg_writel(SOC_MEDIA_SCTRL_BASE_ADDR,SOC_MEDIA_SCTRL_SC_MEDIA_RSTEN_ADDR(0),0,0,1); phy_reg_writel(SOC_MEDIA_SCTRL_BASE_ADDR,SOC_MEDIA_SCTRL_SC_MEDIA_CLKDIS_ADDR(0),1,1,1); phy_reg_writel(SOC_AO_SCTRL_BASE_ADDR,SOC_AO_SCTRL_SC_PW_CLKDIS0_ADDR(0),1,1,1); phy_reg_writel(SOC_AO_SCTRL_BASE_ADDR,SOC_AO_SCTRL_SC_PW_ISOEN0_ADDR(0),1,1,1); phy_reg_writel(SOC_AO_SCTRL_BASE_ADDR,SOC_AO_SCTRL_SC_PW_RSTEN0_ADDR(0),1,1,1); MALI_DEBUG_PRINT(3, ("mali power down end! \n")); }
/*************************************************************************** * FunctionName: ispv1_csi_phy_set; * Description : csi phyhardware poweron region set; * Input : csiphy_power_enum; * Output : NA; * ReturnValue : NA; * Other : NA; ***************************************************************************/ static void ispv1_csi_phy_set(camera_power_state type, csi_index_t index) { if (POWER_ON == type) { if (index == CSI_INDEX_0) { /* CSI PHY0 RSTDIS */ phy_reg_writel(SOC_SC_ON_BASE_ADDR, SOC_AO_SCTRL_SC_PW_RSTDIS0_ADDR(0), SOC_AO_SCTRL_SC_PW_RSTDIS0_pw_rstdis0_22cs0phy_START, SOC_AO_SCTRL_SC_PW_RSTDIS0_pw_rstdis0_22cs0phy_END, 0x1); /* CSI PHY0 CLKREG ENABLE */ phy_reg_writel(SOC_SC_ON_BASE_ADDR, SOC_AO_SCTRL_SC_PW_CLKEN0_ADDR(0), SOC_AO_SCTRL_SC_PW_CLKEN0_pw_clken0_22cs0phy_START, SOC_AO_SCTRL_SC_PW_CLKEN0_pw_clken0_22cs0phy_END, 0x1); } else { /* CSI PHY2 RSTDIS */ phy_reg_writel(SOC_SC_ON_BASE_ADDR, SOC_AO_SCTRL_SC_PW_RSTDIS0_ADDR(0), SOC_AO_SCTRL_SC_PW_RSTDIS0_pw_rstdis0_24cs2phy_START, SOC_AO_SCTRL_SC_PW_RSTDIS0_pw_rstdis0_24cs2phy_END, 0x1); /* CSI PHY2 CLKREG ENABLE */ phy_reg_writel(SOC_SC_ON_BASE_ADDR, SOC_AO_SCTRL_SC_PW_CLKEN0_ADDR(0), SOC_AO_SCTRL_SC_PW_CLKEN0_pw_clken0_24cs2phy_START, SOC_AO_SCTRL_SC_PW_CLKEN0_pw_clken0_24cs2phy_END, 0x1); } } else if (POWER_OFF == type) { if (index == CSI_INDEX_0) { /* CSI PHY0 CLKREG DISABLE */ phy_reg_writel(SOC_SC_ON_BASE_ADDR, SOC_AO_SCTRL_SC_PW_CLKDIS0_ADDR(0), SOC_AO_SCTRL_SC_PW_CLKDIS0_pw_clkdis0_22cs0phy_START, SOC_AO_SCTRL_SC_PW_CLKDIS0_pw_clkdis0_22cs0phy_END, 0x1); /* CSI PHY0 RST ENABLE */ phy_reg_writel(SOC_SC_ON_BASE_ADDR, SOC_AO_SCTRL_SC_PW_RSTEN0_ADDR(0), SOC_AO_SCTRL_SC_PW_RSTEN0_pw_rsten0_22cs0phy_START, SOC_AO_SCTRL_SC_PW_RSTEN0_pw_rsten0_22cs0phy_END, 0x1); } else { /* CSI PHY2 CLKREG DISABLE */ phy_reg_writel(SOC_SC_ON_BASE_ADDR, SOC_AO_SCTRL_SC_PW_CLKDIS0_ADDR(0), SOC_AO_SCTRL_SC_PW_CLKDIS0_pw_clkdis0_24cs2phy_START, SOC_AO_SCTRL_SC_PW_CLKDIS0_pw_clkdis0_24cs2phy_END, 0x1); /* CSI PHY2 RST ENABLE */ phy_reg_writel(SOC_SC_ON_BASE_ADDR, SOC_AO_SCTRL_SC_PW_RSTEN0_ADDR(0), SOC_AO_SCTRL_SC_PW_RSTEN0_pw_rsten0_24cs2phy_START, SOC_AO_SCTRL_SC_PW_RSTEN0_pw_rsten0_24cs2phy_END, 0x1); } } else { print_error("%s, ispv1_power_enum input error:%d", __func__, type); } return; }
int video_harden_clkdis_isoen_rsten(video_harden_dev_id_enum dev_id) { int ret = 0; printk(KERN_INFO "dev_id is %d.\n", dev_id); ret = video_harden_device_id_check(dev_id); if (ret != 0) { return -1; } if ((video_harden_rst_iso_clk_vote.vcodec_bit == 0) && (video_harden_rst_iso_clk_vote.jpeg_bit == 0) && (video_harden_rst_iso_clk_vote.isp_bit == 0)) { printk(KERN_ERR "video_harden_clkdis_isoen_rsten is already done!\n"); return -1; } ret = down_interruptible(&video_harden_busy_lock); if (0 != ret) { printk(KERN_ERR "video_harden_busy_lock failed\n"); return -1; } switch (dev_id) { case VIDEO_HARDEN_DEV_ID_VCODEC: /* VCODEC */ video_harden_rst_iso_clk_vote.vcodec_bit = 0; break; case VIDEO_HARDEN_DEV_ID_JPEG: /* JPEG */ video_harden_rst_iso_clk_vote.jpeg_bit = 0; break; case VIDEO_HARDEN_DEV_ID_ISP: /* ISP */ video_harden_rst_iso_clk_vote.isp_bit = 0; break; default: break; } if ( (video_harden_rst_iso_clk_vote.vcodec_bit == 0) && (video_harden_rst_iso_clk_vote.jpeg_bit == 0) && (video_harden_rst_iso_clk_vote.isp_bit == 0)) { /* AO_SC SOC_AO_SCTRL_SC_PW_CLKDIS0_ADDR [0x804] */ phy_reg_writel(SOC_AO_SCTRL_BASE_ADDR, SOC_AO_SCTRL_SC_PW_CLKDIS0_ADDR(CALC_REG_OFFSET), SOC_AO_SCTRL_SC_PW_CLKDIS0_pw_clkdis0_2codecisp_START, SOC_AO_SCTRL_SC_PW_CLKDIS0_pw_clkdis0_2codecisp_END, 0x1); /* AO_SC SC_PW_ISOEN0 [0x820] */ phy_reg_writel(SOC_AO_SCTRL_BASE_ADDR, SOC_AO_SCTRL_SC_PW_ISOEN0_ADDR(CALC_REG_OFFSET), SOC_AO_SCTRL_SC_PW_ISOEN0_pw_isoen0_2codecisp_START, SOC_AO_SCTRL_SC_PW_ISOEN0_pw_isoen0_2codecisp_END, 0x1); /* AO_SC SC_PW_RSTEN0 [0x810] */ phy_reg_writel(SOC_AO_SCTRL_BASE_ADDR, SOC_AO_SCTRL_SC_PW_RSTEN0_ADDR(CALC_REG_OFFSET), SOC_AO_SCTRL_SC_PW_RSTEN0_pw_rsten0_2codecisp_START, SOC_AO_SCTRL_SC_PW_RSTEN0_pw_rsten0_2codecisp_END, 0x1); printk(KERN_INFO "video harden clkdis_isoen_rsten is sucessful.\n"); } else { printk(KERN_INFO "video_harden_clkdis_isoen_rsten is already done!.\n"); } up(&video_harden_busy_lock); printk(KERN_INFO "video_harden_rst_iso_clk_vote is 0x%x.\n", *((unsigned int *)&video_harden_rst_iso_clk_vote)); return ret; }