int32_t vibe_set_pwm_freq(int nForce) { /* Put the MND counter in reset mode for programming */ HWIO_OUTM(GP1_CFG_RCGR, HWIO_GP_SRC_SEL_VAL_BMSK, 0 << HWIO_GP_SRC_SEL_VAL_SHFT); //SRC_SEL = 000(cxo) #if defined(CONFIG_SEC_BERLUTI_PROJECT) || defined(CONFIG_MACH_S3VE3G_EUR) HWIO_OUTM(GP1_CFG_RCGR, HWIO_GP_SRC_DIV_VAL_BMSK, 23 << HWIO_GP_SRC_DIV_VAL_SHFT); //SRC_DIV = 10111 (Div 12) #else HWIO_OUTM(GP1_CFG_RCGR, HWIO_GP_SRC_DIV_VAL_BMSK, 31 << HWIO_GP_SRC_DIV_VAL_SHFT); //SRC_DIV = 11111 (Div 16) #endif HWIO_OUTM(GP1_CFG_RCGR, HWIO_GP_MODE_VAL_BMSK, 2 << HWIO_GP_MODE_VAL_SHFT); //Mode Select 10 //M value HWIO_OUTM(GP_M_REG, HWIO_GP_MD_REG_M_VAL_BMSK, g_nlra_gp_clk_m << HWIO_GP_MD_REG_M_VAL_SHFT); #if defined(CONFIG_MACH_LT03EUR) || defined(CONFIG_MACH_LT03SKT)\ || defined(CONFIG_MACH_LT03KTT) || defined(CONFIG_MACH_LT03LGT) || defined(CONFIG_MACH_PICASSO_LTE) if (nForce > 0){ g_nforce_32 = g_nlra_gp_clk_n - (((nForce * g_nlra_gp_clk_pwm_mul) >> 8)); if(g_nforce_32 < motor_min_strength) g_nforce_32 = motor_min_strength; else g_nforce_32 = (g_nforce_32 - motor_min_strength) \ * (g_nlra_gp_clk_n * motor_strength / 100 - motor_min_strength) \ / (g_nlra_gp_clk_n - motor_min_strength) + motor_min_strength; }
static int vibe_set_pwm_freq(int nForce) { if(nForce == 0) //Generate Clock with appropriate frequency(around 22KHz) and 50% duty cycle. { /* Put the MND counter in reset mode for programming */ HWIO_OUTM(GP_NS_REG, HWIO_GP_NS_REG_MNCNTR_EN_BMSK, 0); HWIO_OUTM(GP_NS_REG, HWIO_GP_NS_REG_PRE_DIV_SEL_BMSK, 0 << HWIO_GP_NS_REG_PRE_DIV_SEL_SHFT); /* P: 0 => Freq/1, 1 => Freq/2, 4 => Freq/4 */ HWIO_OUTM(GP_NS_REG, HWIO_GP_NS_REG_SRC_SEL_BMSK, 0 << HWIO_GP_NS_REG_SRC_SEL_SHFT); /* S : 0 => TXCO(19.2MHz), 1 => Sleep XTAL(32kHz) */ HWIO_OUTM(GP_NS_REG, HWIO_GP_NS_REG_MNCNTR_MODE_BMSK, 2 << HWIO_GP_NS_REG_MNCNTR_MODE_SHFT); /* Dual-edge mode */ HWIO_OUTM(GP_MD_REG, HWIO_GP_MD_REG_M_VAL_BMSK, g_nLRA_GP_CLK_M << HWIO_GP_MD_REG_M_VAL_SHFT); //printk("%s, g_nForce_32 : %d\n",__FUNCTION__,g_nForce_32); HWIO_OUTM(GP_MD_REG, HWIO_GP_MD_REG_D_VAL_BMSK, ( ~((VibeInt16)g_nLRA_GP_CLK_D << 1) ) << HWIO_GP_MD_REG_D_VAL_SHFT); HWIO_OUTM(GP_NS_REG, HWIO_GP_NS_REG_GP_N_VAL_BMSK, ~(g_nLRA_GP_CLK_N - g_nLRA_GP_CLK_M) << HWIO_GP_NS_REG_GP_N_VAL_SHFT); HWIO_OUTM(GP_NS_REG, HWIO_GP_NS_REG_MNCNTR_EN_BMSK, 1 << HWIO_GP_NS_REG_MNCNTR_EN_SHFT); /* Enable M/N counter */ //printk("%x, %x, %x\n",g_nLRA_GP_CLK_M,~(g_nLRA_GP_CLK_N - g_nLRA_GP_CLK_M),g_nForce_32); } else //Clock is already running, so control only D register here. { g_nForce_32 = ((nForce * (g_nLRA_GP_CLK_D -2)) / 127 ) + g_nLRA_GP_CLK_D; //printk("%s, g_nForce_32 : %d\n",__FUNCTION__,g_nForce_32); HWIO_OUTM(GP_MD_REG, HWIO_GP_MD_REG_D_VAL_BMSK, ( ~((VibeInt16)g_nForce_32 << 1) ) << HWIO_GP_MD_REG_D_VAL_SHFT); } return VIBE_S_SUCCESS; }
void mdss_dsi_panel_bklt_pwm( int level) { /* Put the MND counter in reset mode for programming */ HWIO_OUTM(GP0_CFG_RCGR, HWIO_GP_SRC_SEL_VAL_BMSK, 0 << HWIO_GP_SRC_SEL_VAL_SHFT); //SRC_SEL = 000(cxo) HWIO_OUTM(GP0_CFG_RCGR, HWIO_GP_SRC_DIV_VAL_BMSK, 31 << HWIO_GP_SRC_DIV_VAL_SHFT); //SRC_DIV = 11111 (Div 16) HWIO_OUTM(GP0_CFG_RCGR, HWIO_GP_MODE_VAL_BMSK, 2 << HWIO_GP_MODE_VAL_SHFT); //Mode Select 10 //M value HWIO_OUTM(GP_M_REG, HWIO_GP_MD_REG_M_VAL_BMSK, GP_CLK_M_DEFAULT << HWIO_GP_MD_REG_M_VAL_SHFT); // D value HWIO_OUTM(GP_D_REG, HWIO_GP_MD_REG_D_VAL_BMSK, (~((int16_t)level << 1)) << HWIO_GP_MD_REG_D_VAL_SHFT); //N value HWIO_OUTM(GP_NS_REG, HWIO_GP_NS_REG_GP_N_VAL_BMSK, ~(GP_CLK_N_DEFAULT - GP_CLK_M_DEFAULT) << 0); HWIO_OUTM(GP0_CMD_RCGR,HWIO_UPDATE_VAL_BMSK, 1 << HWIO_UPDATE_VAL_SHFT);//UPDATE ACTIVE HWIO_OUTM(GP0_CMD_RCGR,HWIO_ROOT_EN_VAL_BMSK, 1 << HWIO_ROOT_EN_VAL_SHFT);//ROOT_EN HWIO_OUTM(CAMSS_GP0_CBCR, HWIO_CLK_ENABLE_VAL_BMSK, 1 << HWIO_CLK_ENABLE_VAL_SHFT); //CLK_ENABLE }
static int32_t vibe_set_pwm_freq(int nForce) { /* Put the MND counter in reset mode for programming */ HWIO_OUTM(GP_NS_REG, HWIO_GP_NS_REG_MNCNTR_EN_BMSK, 0); HWIO_OUTM(GP_NS_REG, HWIO_GP_NS_REG_PRE_DIV_SEL_BMSK, 2 << HWIO_GP_NS_REG_PRE_DIV_SEL_SHFT); HWIO_OUTM(GP_NS_REG, HWIO_GP_NS_REG_SRC_SEL_BMSK, 0 << HWIO_GP_NS_REG_SRC_SEL_SHFT); /* select clock source as pxo */ HWIO_OUTM(GP_NS_REG, HWIO_GP_NS_REG_MNCNTR_MODE_BMSK, 2 << HWIO_GP_NS_REG_MNCNTR_MODE_SHFT); HWIO_OUTM(GP_MD_REG, HWIO_GP_MD_REG_M_VAL_BMSK, g_nlra_gp_clk_m << HWIO_GP_MD_REG_M_VAL_SHFT); if (nForce > 0) g_nforce_32 = ((nForce * g_nlra_gp_clk_pwm_mul) >> 8) + 1; else
static int32_t vibe_set_pwm_freq(int nForce) { /* Put the MND counter in reset mode for programming */ HWIO_OUTM(GP1_CFG_RCGR, HWIO_GP_SRC_SEL_VAL_BMSK, 0 << HWIO_GP_SRC_SEL_VAL_SHFT); //SRC_SEL = 000(cxo) HWIO_OUTM(GP1_CFG_RCGR, HWIO_GP_SRC_DIV_VAL_BMSK, 31 << HWIO_GP_SRC_DIV_VAL_SHFT); //SRC_DIV = 11111 (Div 16) HWIO_OUTM(GP1_CFG_RCGR, HWIO_GP_MODE_VAL_BMSK, 2 << HWIO_GP_MODE_VAL_SHFT); //Mode Select 10 //M value HWIO_OUTM(GP_M_REG, HWIO_GP_MD_REG_M_VAL_BMSK, g_nlra_gp_clk_m << HWIO_GP_MD_REG_M_VAL_SHFT); if (nForce > 0){ g_nforce_32 = g_nlra_gp_clk_n - (((nForce * g_nlra_gp_clk_pwm_mul) >> 8)); g_nforce_32 = g_nforce_32 * motor_strength /100; if(g_nforce_32 < motor_min_strength) g_nforce_32 = motor_min_strength; }
static int32_t vibe_pwm_onoff(u8 onoff) { if (onoff) { HWIO_OUTM(GP_NS_REG, HWIO_GP_NS_REG_GP_CLK_BRANCH_ENA_BMSK, 1<<HWIO_GP_NS_REG_GP_CLK_BRANCH_ENA_SHFT); HWIO_OUTM(GP_NS_REG, HWIO_GP_NS_REG_GP_ROOT_ENA_BMSK, 1<<HWIO_GP_NS_REG_GP_ROOT_ENA_SHFT); } else { HWIO_OUTM(GP_NS_REG, HWIO_GP_NS_REG_GP_CLK_BRANCH_ENA_BMSK, 0<<HWIO_GP_NS_REG_GP_CLK_BRANCH_ENA_SHFT); HWIO_OUTM(GP_NS_REG, HWIO_GP_NS_REG_GP_ROOT_ENA_BMSK, 0<<HWIO_GP_NS_REG_GP_ROOT_ENA_SHFT); } return VIBE_S_SUCCESS; }
static int32_t vibe_set_pwm_freq(int percent) { /* Put the MND counter in reset mode for programming */ HWIO_OUTM(GP_NS_REG, HWIO_GP_NS_REG_MNCNTR_EN_BMSK, 0); /* P: 0 => Freq/1, 1 => Freq/2, 4 => Freq/4 */ HWIO_OUTM(GP_NS_REG, HWIO_GP_NS_REG_PRE_DIV_SEL_BMSK, g_nlra_gp_clk_PreDiv<<HWIO_GP_NS_REG_PRE_DIV_SEL_SHFT); /* S : 0 => TXCO(19.2MHz), 1 => Sleep XTAL(32kHz) */ HWIO_OUTM(GP_NS_REG, HWIO_GP_NS_REG_SRC_SEL_BMSK, 0 << HWIO_GP_NS_REG_SRC_SEL_SHFT); /* Dual-edge mode */ HWIO_OUTM(GP_NS_REG, HWIO_GP_NS_REG_MNCNTR_MODE_BMSK, 2 << HWIO_GP_NS_REG_MNCNTR_MODE_SHFT); /* Set : M value */ HWIO_OUTM(GP_MD_REG, HWIO_GP_MD_REG_M_VAL_BMSK, g_nlra_gp_clk_m << HWIO_GP_MD_REG_M_VAL_SHFT); g_nlra_gp_clk_d = percent * g_nlra_gp_clk_n / 100; /* Set : M value */ HWIO_OUTM(GP_MD_REG, HWIO_GP_MD_REG_D_VAL_BMSK, (~((int16_t)g_nlra_gp_clk_d << 1)) << HWIO_GP_MD_REG_D_VAL_SHFT); /* Set : N value */ HWIO_OUTM(GP_NS_REG, HWIO_GP_NS_REG_GP_N_VAL_BMSK, ~(g_nlra_gp_clk_n - g_nlra_gp_clk_m) << HWIO_GP_NS_REG_GP_N_VAL_SHFT); /* Enable M/N counter */ HWIO_OUTM(GP_NS_REG, HWIO_GP_NS_REG_MNCNTR_EN_BMSK, 1 << HWIO_GP_NS_REG_MNCNTR_EN_SHFT); printk(KERN_DEBUG "[VIB] %d, %d, %d(%d%%)\n", g_nlra_gp_clk_m, g_nlra_gp_clk_n, g_nlra_gp_clk_d, percent); return VIBE_S_SUCCESS; }