static void hall_init_hw(void) { mt_set_gpio_mode(GPIO_MHALL_EINT_PIN, GPIO_MHALL_EINT_PIN_M_EINT); mt_set_gpio_dir(GPIO_MHALL_EINT_PIN, GPIO_DIR_IN); mt_set_gpio_pull_enable(GPIO_MHALL_EINT_PIN, GPIO_PULL_DISABLE); mt_set_gpio_ies(GPIO_MHALL_EINT_PIN, GPIO_IES_ENABLE); mt65xx_eint_set_sens(CUST_EINT_MHALL_NUM, CUST_EINT_MHALL_SENSITIVE); mt65xx_eint_set_polarity(CUST_EINT_MHALL_NUM, CUST_EINT_MHALL_POLARITY); mt65xx_eint_set_hw_debounce(CUST_EINT_MHALL_NUM, CUST_EINT_MHALL_DEBOUNCE_CN); mt65xx_eint_registration(CUST_EINT_MHALL_NUM, CUST_EINT_MHALL_DEBOUNCE_EN, CUST_EINT_MHALL_POLARITY, hall_cover_eint_handler, 0); mt65xx_eint_unmask(CUST_EINT_MHALL_NUM); }
static kal_uint32 mt_get_board_type(void) { /* * Note: Don't use it in IRQ context */ #if 1 static int board_type = MT_BOARD_NONE; if (board_type != MT_BOARD_NONE) return board_type; spin_lock(&mt_board_lock); /* Enable AUX_IN0 as GPI */ mt_set_gpio_ies(GPIO_PHONE_EVB_DETECT, GPIO_IES_ENABLE); /* Set internal pull-down for AUX_IN0 */ mt_set_gpio_pull_select(GPIO_PHONE_EVB_DETECT, GPIO_PULL_DOWN); mt_set_gpio_pull_enable(GPIO_PHONE_EVB_DETECT, GPIO_PULL_ENABLE); /* Wait 20us */ udelay(20); /* Read AUX_INO's GPI value*/ mt_set_gpio_mode(GPIO_PHONE_EVB_DETECT, GPIO_MODE_00); mt_set_gpio_dir(GPIO_PHONE_EVB_DETECT, GPIO_DIR_IN); if (mt_get_gpio_in(GPIO_PHONE_EVB_DETECT) == 1) { /* Disable internal pull-down if external pull-up on PCB(leakage) */ mt_set_gpio_pull_enable(GPIO_PHONE_EVB_DETECT, GPIO_PULL_DISABLE); board_type = MT_BOARD_EVB; } else { /* Disable internal pull-down if external pull-up on PCB(leakage) */ mt_set_gpio_pull_enable(GPIO_PHONE_EVB_DETECT, GPIO_PULL_DISABLE); board_type = MT_BOARD_PHONE; } spin_unlock(&mt_board_lock); battery_xlog_printk(BAT_LOG_CRTI, "[Kernel] Board type is %s\n", (board_type == MT_BOARD_EVB) ? "EVB" : "PHONE"); return board_type; #else return MT_BOARD_EVB; #endif }