static void __cpuxgpt_set_init_cnt(unsigned int countH, unsigned int countL) { spin_lock(&cpuxgpt_reg_lock); __write_cpuxgpt(INDEX_CNT_H_INIT, countH); __write_cpuxgpt(INDEX_CNT_L_INIT, countL); spin_unlock(&cpuxgpt_reg_lock); }
static unsigned int __cpuxgpt_set_cmp(CPUXGPT_NUM cpuxgpt_num, int countH, int countL) { spin_lock(&cpuxgpt_reg_lock); __write_cpuxgpt(INDEX_CMP_BASE+(cpuxgpt_num*0x8)+0x4, countH); __write_cpuxgpt(INDEX_CMP_BASE+(cpuxgpt_num*0x8), countL); spin_unlock(&cpuxgpt_reg_lock); return 0; }
static void __cpuxgpt_disable(void) { unsigned int tmp = 0; spin_lock(&cpuxgpt_reg_lock); tmp = __read_cpuxgpt(INDEX_CTL_REG); tmp &= (~EN_CPUXGPT); __write_cpuxgpt(INDEX_CTL_REG, tmp); spin_unlock(&cpuxgpt_reg_lock); }
static unsigned int __cpuxgpt_irq_dis(int cpuxgpt_num) { unsigned int tmp = 0; spin_lock(&cpuxgpt_reg_lock); tmp = __read_cpuxgpt(INDEX_IRQ_MASK); tmp &= (~(1<<cpuxgpt_num)); __write_cpuxgpt(INDEX_IRQ_MASK, tmp); spin_unlock(&cpuxgpt_reg_lock); return 0; }
static void __cpuxgpt_halt_on_debug_en(int en) { unsigned int tmp = 0; spin_lock(&cpuxgpt_reg_lock); tmp = __read_cpuxgpt(INDEX_CTL_REG); if (1 == en) tmp |= EN_AHLT_DEBUG; if (0 == en) tmp &= (~EN_AHLT_DEBUG); __write_cpuxgpt(INDEX_CTL_REG, tmp); spin_unlock(&cpuxgpt_reg_lock); }
static void __cpuxgpt_set_clk(unsigned int div) { unsigned int tmp = 0; /* printk("%s fwq div is 0x%x\n",__func__, div); */ if (div != CLK_DIV1 && div != CLK_DIV2 && div != CLK_DIV4) pr_err("%s error: div is not right\n", __func__); spin_lock(&cpuxgpt_reg_lock); tmp = __read_cpuxgpt(INDEX_CTL_REG); tmp &= CLK_DIV_MASK; tmp |= div; __write_cpuxgpt(INDEX_CTL_REG, tmp); spin_unlock(&cpuxgpt_reg_lock); }
void restore_cpuxgpt(void) { __write_cpuxgpt(INDEX_CTL_REG, g_ctl); pr_debug("g_ctl:0x%x, %s\n", __read_cpuxgpt(INDEX_CTL_REG), __func__); }
static void __cpuxgpt_set_init_cnt(unsigned int countH,unsigned int countL) { __write_cpuxgpt(INDEX_CNT_H_INIT,countH); __write_cpuxgpt(INDEX_CNT_L_INIT,countL); // update count when countL programmed }