Пример #1
0
/*----------------------------------------------------------------------------*/
static void hall_eint_work(struct work_struct *work)
{
	int err;
	
	HALL_LOG("hall_eint_work()\n");

		
	if((err = hall_read_status(&g_hall_ptr->hall_status)))
	{
		 HALL_ERR("hall_read_value: %d\n", err);
	}
	
	if (g_hall_ptr->hall_status == 1)
	{
		HALL_ERR("HALL OPEN!!! \n");
		mt_eint_set_polarity(CUST_EINT_HALL_COVER_NUM, MT_POLARITY_LOW);
	}
	else
	{
		HALL_ERR("HALL CLOSE!!! \n");
		mt_eint_set_polarity(CUST_EINT_HALL_COVER_NUM, MT_POLARITY_HIGH);
	}

	input_report_switch(g_hall_ptr->idev, g_hall_ptr->sw_code, g_hall_ptr->hall_status);
	input_sync(g_hall_ptr->idev);

	mt_eint_unmask(CUST_EINT_HALL_COVER_NUM);
}
static void swtp_eint_handler(void)
{
    unsigned int rfcable_enable;

    mt_eint_mask(SWTP_EINT_NUM);

    if(swtp_eint_state ==  EINT_PIN_PLUG_IN )
    {
	if (SWTP_EINT_TYPE == CUST_EINTF_TRIGGER_HIGH){
		mt_eint_set_polarity(SWTP_EINT_NUM, (1));
	}else{
		mt_eint_set_polarity(SWTP_EINT_NUM, (0));
	}
	swtp_eint_state = EINT_PIN_PLUG_OUT;
	rfcable_enable  = SWTP_MODE_OFF;
    } 
    else 
    {
	if (SWTP_EINT_TYPE == CUST_EINTF_TRIGGER_HIGH){
		mt_eint_set_polarity(SWTP_EINT_NUM, !(1));
	}else{
		mt_eint_set_polarity(SWTP_EINT_NUM, !(0));
	}
	swtp_eint_state = EINT_PIN_PLUG_IN;
        rfcable_enable  = SWTP_MODE_ON;
    }

    printk("[swtp]: rfcable_enable: %d\n", rfcable_enable);

    swtp_set_mode_unlocked(SWTP_CTRL_SUPER_SET,  rfcable_enable);
    mt_eint_unmask(SWTP_EINT_NUM);
}
/* switch touch panel back to normal mode */
 void _tpd_switch_normal_mode(void) {
    
    char wakeup[2] = {0x07,0x02};
    char threshold[2] = {0x09, 0x04};
    char gesture[2] = {0x08, 0x11};
    char sleeptime[2] = {0x0d, 0x01};
    char idletime[2] = {0x0c, 0xff};
    int i;
    
    if (tpd_status) {
        TPD_DMESG("do not need to switch tpd back to normal mode\n");
        return;
    }
    
    TPD_DMESG("switch tpd back to normal mode\n");
    
    for(i=0;i<TPD_WAKEUP_TRIAL;i++) {
        i2c_master_send(i2c_client,wakeup,2);
        if(i2c_master_send(i2c_client,wakeup,2)==2) break;
        msleep(TPD_WAKEUP_DELAY);
    }
    i2c_master_send(i2c_client,gesture,2);
    i2c_master_send(i2c_client,threshold,2);
    i2c_master_send(i2c_client,idletime,2);
    i2c_master_send(i2c_client,sleeptime,2);
    
    //MT6516_IRQUnmask(MT6516_TOUCH_IRQ_LINE);    
    mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM);
    
    tpd_status = 1; 
}
Пример #4
0
static void txc_set_enable(struct txc_data *txc, int enable)
{
    struct i2c_client *client = txc->client;
    int ret;
    
    mutex_lock(&txc->enable_lock);

    if (enable) {
	    mt_eint_mask(CUST_EINT_INTI_INT_NUM);
	    pa12201001_set_ps_mode(client);
#if defined(PA12_FAST_CAL)
	    pa122_run_fast_calibration(client);
#endif
        } else {
	    input_report_abs(txc->input_dev, ABS_DISTANCE, PS_UNKONW);
	    input_sync(txc->input_dev);
	}

	ret = pa12201001_enable_ps(client, enable);
	if (enable) {
		mdelay(50);
		mt_eint_unmask(CUST_EINT_INTI_INT_NUM);
	}
	    if (ret < 0) {
		    mutex_unlock(&txc->enable_lock);
		APS_ERR("pa12201001_enable_ps function err\n");
		return ret;
	    }
	mutex_unlock(&txc->enable_lock);
}
Пример #5
0
static void gpio_keys_gpio_report_event(struct gpio_button_data *bdata)
{
	unsigned char pressed = RELEASED, state_prev = RELEASED, input_value = 0xff;
	unsigned long flags;

	spin_lock_irqsave(&bdata->lock, flags);
	input_value = mt_get_gpio_in(bdata->button->gpio);
	pressed = (input_value ? 1 : 0) ^ bdata->button->active_low;

	state_prev = atomic_read(&bdata->key_pressed);

#ifdef KEYPAD_DEBUG
	if(pressed == state_prev) {
		printk("[Hall] %s: error, %s prev:%s gpio_in_now:%d\n",
				__func__,
				bdata->button->desc,
				(state_prev == PRESSED)?"Pressed":"Released",
				input_value);
	}
#endif
	atomic_set(&bdata->key_pressed, (pressed == PRESSED) ? PRESSED : RELEASED);
	input_report_key(bdata->input, bdata->button->code, pressed);
	input_sync(bdata->input);
	spin_unlock_irqrestore(&bdata->lock, flags);
	mt_eint_unmask(bdata->button->irq);
}
Пример #6
0
static int touch_event_handler(void *arg)
{       
 
	struct sched_param param = { .sched_priority = RTPM_PRIO_TPD };
	struct tp_driver_data * data = (struct tp_driver_data*) arg ;

	if(!data)
		return -ENODEV ;
	
	sched_setscheduler(current, SCHED_RR, &param);

	do
	{	
	
	set_current_state(TASK_INTERRUPTIBLE);
	wait_event_interruptible(waiter, tpd_flag != 0);
	tpd_flag = 0 ;
	set_current_state(TASK_RUNNING);
	if(data->out.report_func&& !exitThread){
		dbg_printk("++++:%pf\n",data->out.report_func);
		data->out.report_func(data->out.driver_data) ;
		dbg_printk("----\n");
	}
	mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM);
   }while (!exitThread);		
	
   dbg_printk("!!!!!!!!!!!!!!kthread exit!!!!!!!!!!!!\n"); 
  return 0;
}
Пример #7
0
static void gpio_keys_gpio_report_event(struct gpio_button_data *bdata)
{
	unsigned char input_value = 0xff;
	unsigned long flags;
	//unsigned int code;

	spin_lock_irqsave(&bdata->lock, flags);
	input_value = mt_get_gpio_in(bdata->button->gpio);

	if( bdata->irq != M7X_HALL_IRQ_NUM) {
		atomic_set(&bdata->key_pressed, (atomic_read(&bdata->key_pressed) == RELEASED)?PRESSED:RELEASED );

		input_report_key(bdata->input, bdata->button->code, atomic_read(&bdata->key_pressed));
		input_sync(bdata->input);
	} else {
		if( atomic_read(&bdata->key_pressed)==CLOSED ) {
			//code = 0x15;
			input_report_switch(bdata->input, bdata->button->code, RELEASED);
			input_sync(bdata->input);
			atomic_set(&bdata->key_pressed, REMOVED);

			#ifdef KEY_HALL_DEBUG
				key_hall_press = REMOVED;
			#endif
		} else {
			//code = 0x15;
			input_report_switch(bdata->input, bdata->button->code, PRESSED);
			input_sync(bdata->input);
			atomic_set(&bdata->key_pressed, CLOSED);

			#ifdef KEY_HALL_DEBUG
				key_hall_press = CLOSED;
			#endif
		}


	}
	spin_unlock_irqrestore(&bdata->lock, flags);

#ifdef MEIZU_TP_NOTIFIER
	if(bdata->irq == M7X_HALL_IRQ_NUM)
		gpio_key_notify(atomic_read(&bdata->key_pressed),NULL);
#endif
	if( atomic_read(&bdata->key_pressed)==PRESSED ) {
		schedule_delayed_work(&bdata->delayed_work, msecs_to_jiffies(bdata->timer_debounce));
	} else {
		/*
		* cant use cancel_delayed_work_sync() in the context
		*/
		cancel_delayed_work(&bdata->delayed_work);
	}
#ifdef KEYPAD_DEBUG
	printk("[Hall] %s: %s--%s gpio_in:%d\n",
			__func__,
			bdata->button->desc,
			(atomic_read(&bdata->key_pressed) == PRESSED)?"Pressed":"Released",
			input_value);
#endif
	mt_eint_unmask(bdata->button->irq);
}
Пример #8
0
void Unmask_MHL_Intr(void)
{
#ifdef 	CUST_EINT_MHL_NUM
	mt_eint_unmask(CUST_EINT_MHL_NUM);
#endif  

	return ;
}
Пример #9
0
//add by lihua BUG_ID:NULL Description: add node 2013-10-29 (end)
static int mhall_thread_kthread(void *x)
{
    while(1)
    {
	  s32	mhall_value;
        wait_event_interruptible(mhall_thread_wq, atomic_read(&mhall_wakeup_flag));
        atomic_set(&mhall_wakeup_flag, 0);
#if 0
        kpd_pwrkey_pmic_handler(1);
    	msleep(100);
    	kpd_pwrkey_pmic_handler(0);
#endif
//		mt_set_gpio_mode(GPIO_MHALL_EINT_PIN, GPIO_MHALL_EINT_PIN_M_GPIO);
//		mt_set_gpio_dir(GPIO_MHALL_EINT_PIN, GPIO_DIR_IN);
//		mt_set_gpio_pull_enable(GPIO_MHALL_EINT_PIN, GPIO_PULL_DISABLE);
		mhall_value = mt_get_gpio_in(GPIO_MHALL_EINT_PIN);
		MHALL_ERR("%s: fangxing  mhall_value = %d \n",__func__,mhall_value);
		if(mhall_value  == 1 ) {		
		   		input_report_key(mhall_input_dev, KEY_MHALL_UP, 1);
				input_sync(mhall_input_dev);
				msleep(10);
		   		input_report_key(mhall_input_dev, KEY_MHALL_UP, 0);
				input_sync(mhall_input_dev);
//				mt_eint_mask(CUST_EINT_MHALL_NUM);
//				och165twad_mhall_eint_config_polarity(CUST_EINT_POLARITY_LOW); 

                mt_eint_set_polarity(GPIO_MHALL_EINT_PIN,0);
                mt_eint_unmask(CUST_EINT_MHALL_NUM);
                mhall_flag = 1;//add by lihua BUG_ID:NULL Description: add node 2013-10-29

		} else {
		   		input_report_key(mhall_input_dev, KEY_MHALL_DOWN, 1);
				input_sync(mhall_input_dev);
				msleep(10);
		   		input_report_key(mhall_input_dev, KEY_MHALL_DOWN, 0);
				input_sync(mhall_input_dev);
//				mt_eint_mask(CUST_EINT_MHALL_NUM);
//				och165twad_mhall_eint_config_polarity(CUST_EINT_POLARITY_HIGH); 
                mt_eint_set_polarity(GPIO_MHALL_EINT_PIN,1);
                mt_eint_unmask(CUST_EINT_MHALL_NUM);
                mhall_flag = 0;//add by lihua BUG_ID:NULL Description: add node 2013-10-29
		}
    }
}
Пример #10
0
static void tpd_resume(struct early_suspend *h)
{
    char data;
    
#ifdef TPD_PROXIMITY	
	if (tpd_proximity_flag == 1)
	{
		if(tpd_proximity_flag_one == 1)
		{
			tpd_proximity_flag_one = 0;	
			TPD_DMESG(TPD_DEVICE " tpd_proximity_flag_one \n"); 
			return;
		}
	}
#endif	
    
	if ( g_pts ){
		CTP_DBG("TPD wake up\n");
		if (atomic_read(&g_pts->isp_opened)){
			CTP_DBG("isp is already opened.");
			return;
		}

#ifdef CONFIG_TOUCHSCREEN_POWER_DOWN_WHEN_SLEEP
		fts_6x06_hw_init();
#else //!CONFIG_TOUCHSCREEN_POWER_DOWN_WHEN_SLEEP
        //BEGIN <JIRA ID (KeyCode)> <DATE> <BUG INFO> zhangxiaofei
		//mt_set_gpio_mode(GPIO_CTP_WAKE_PIN, GPIO_CTP_WAKE_PIN_M_GPIO);
		//mt_set_gpio_dir(GPIO_CTP_WAKE_PIN, GPIO_DIR_OUT);
		//mt_set_gpio_out(GPIO_CTP_WAKE_PIN, GPIO_OUT_ZERO);
		//msleep(1);  
		//mt_set_gpio_mode(GPIO_CTP_WAKE_PIN, GPIO_CTP_WAKE_PIN_M_GPIO);
		//mt_set_gpio_dir(GPIO_CTP_WAKE_PIN, GPIO_DIR_OUT);
		//mt_set_gpio_out(GPIO_CTP_WAKE_PIN, GPIO_OUT_ONE);
		//END <JIRA ID (KeyCode)> <DATE> <BUG INFO> zhangxiaofei

//BEGIN <tp> <DATE20130507> <tp resume> zhangxiaofei
    // reset ctp
    mt_set_gpio_mode(GPIO_CTP_RST_PIN, GPIO_CTP_RST_PIN_M_GPIO);
    mt_set_gpio_dir(GPIO_CTP_RST_PIN, GPIO_DIR_OUT);
    mt_set_gpio_out(GPIO_CTP_RST_PIN, GPIO_OUT_ZERO);  
    msleep(10);  
    mt_set_gpio_mode(GPIO_CTP_RST_PIN, GPIO_CTP_RST_PIN_M_GPIO);
    mt_set_gpio_dir(GPIO_CTP_RST_PIN, GPIO_DIR_OUT);
    mt_set_gpio_out(GPIO_CTP_RST_PIN, GPIO_OUT_ONE);
	msleep(200);//add this line 
	CTP_DBG("TPD wake up done\n");
//END <tp> <DATE20130507> <tp resume> zhangxiaofei		
		
#endif//CONFIG_TOUCHSCREEN_POWER_DOWN_WHEN_SLEEP
	mutex_unlock(&g_pts->mutex);//Lock on suspend 	
		mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM);  
		atomic_set( &g_pts->ts_sleepState, 0 );
	}
 }
Пример #11
0
//static void fcover_key_handler(unsigned long data)
static void fcover_key_handler(struct work_struct *work)
{
//	int tmp;
//	fcover_close_flag=new_fcover;
	
	mt_set_gpio_mode(GPIO_FCOVER_EINT_PIN, GPIO_EINT_HALL_PIN_M_GPIO);
	mt_set_gpio_dir(GPIO_FCOVER_EINT_PIN, GPIO_DIR_IN);
	mt_set_gpio_pull_enable(GPIO_FCOVER_EINT_PIN, GPIO_PULL_DISABLE);

	mdelay(1);
	new_fcover = mt_get_gpio_in(GPIO_FCOVER_EINT_PIN);
		
	mt_set_gpio_mode(GPIO_FCOVER_EINT_PIN, GPIO_EINT_HALL_PIN_M_EINT);

	printk("fcover_key_handler new_fcover=%d\n",new_fcover);

	if(fcover_close_flag != new_fcover)
	{
		spin_lock(&fcover_lock);
		fcover_close_flag = new_fcover;
		spin_unlock(&fcover_lock);
		
		if(fcover_close_flag == 0) // close
		{
//	        	input_report_key(kpd_input_dev, KEY_FCOVER_1, 1);
				input_report_key(kpd_input_dev, KEY_F11, 1);
	        	input_sync(kpd_input_dev);
	        	mdelay(1);
//	            input_report_key(kpd_input_dev, KEY_FCOVER_1, 0); 
				input_report_key(kpd_input_dev, KEY_F11, 0);
	        	input_sync(kpd_input_dev);
				
//				tpd_fcover_setting(fcover_close_flag); 
		
		}
		else  // open
		{
//	        	input_report_key(kpd_input_dev, KEY_FCOVER_2, 1);
				input_report_key(kpd_input_dev, KEY_F12, 1);
	        	input_sync(kpd_input_dev);
	        	mdelay(1);
//	            input_report_key(kpd_input_dev, KEY_FCOVER_2, 0);
				input_report_key(kpd_input_dev, KEY_F12, 0);
	        	input_sync(kpd_input_dev);
				
//				tpd_fcover_setting(fcover_close_flag); 

		}
		
	}
	switch_set_state((struct switch_dev *)&fcover_data, fcover_close_flag);
	mt_eint_set_polarity(FCOVER_KEY_EINT, !fcover_close_flag);
	mt_eint_unmask(FCOVER_KEY_EINT);
}
Пример #12
0
void c2k_gpio_irq_unmask(int gpio)
{
    int irq;

    irq = c2k_gpio_to_irq(gpio);
    if(irq < 0){
        return ;
    }

    mt_eint_unmask(irq);
}
Пример #13
0
void switch_int_to_device(struct musb *musb)
{
#ifdef ID_PIN_USE_EX_EINT
    mt_eint_set_polarity(IDDIG_EINT_PIN, MT_EINT_POL_POS);
	mt_eint_unmask(IDDIG_EINT_PIN);
#else
	 musb_writel(musb->mregs,USB_L1INTP,0);
	 musb_writel(musb->mregs,USB_L1INTM,IDDIG_INT_STATUS|musb_readl(musb->mregs,USB_L1INTM));
#endif
	 DBG(0,"switch_int_to_device is done\n");
}
Пример #14
0
static void och165twad_mhall_eint_config_polarity(u8 polarity)
{
	MHALL_ERR("%s: penny   \n", __func__);
	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_eint_set_sens(CUST_EINT_MHALL_NUM, CUST_EINT_MHALL_SENSITIVE);
	mt_eint_set_hw_debounce(CUST_EINT_MHALL_NUM, CUST_EINT_MHALL_DEBOUNCE_CN);
	mt_eint_registration(CUST_EINT_MHALL_NUM, CUST_EINT_MHALL_TYPE, och165twad_mhall_eint_interrupt_handler, 0); 
	mt_eint_unmask(CUST_EINT_MHALL_NUM);
}
static int tpd_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id) {             
    int err = 0;// ret = -1;
    
    #ifdef TPD_NO_GPIO
    u16 temp;
    temp = *(volatile u16 *) TPD_RESET_PIN_ADDR;
    temp = temp | 0x40;
    *(volatile u16 *) TPD_RESET_PIN_ADDR = temp;
    #endif
    i2c_client = client;
    
    printk("MediaTek touch panel i2c probe\n");
    
    #ifndef TPD_NO_GPIO 

    mt_set_gpio_mode(GPIO_CTP_RST_PIN, GPIO_CTP_RST_PIN_M_GPIO);
    mt_set_gpio_dir(GPIO_CTP_RST_PIN, GPIO_DIR_OUT);
    mt_set_gpio_out(GPIO_CTP_RST_PIN, GPIO_OUT_ZERO);  
    msleep(10);  
    mt_set_gpio_out(GPIO_CTP_RST_PIN, GPIO_OUT_ONE);
   
    mt_set_gpio_mode(GPIO_CTP_EINT_PIN, GPIO_CTP_EINT_PIN_M_EINT);
    mt_set_gpio_dir(GPIO_CTP_EINT_PIN, GPIO_DIR_IN);
    mt_set_gpio_pull_enable(GPIO_CTP_EINT_PIN, GPIO_PULL_ENABLE);
    mt_set_gpio_pull_select(GPIO_CTP_EINT_PIN, GPIO_PULL_UP);
    #endif 

    msleep(50);

    I2CDMABuf_va = (u8 *)dma_alloc_coherent(NULL, 4096, &I2CDMABuf_pa, GFP_KERNEL);
    if(!I2CDMABuf_va)
    {
        printk("Allocate Touch DMA I2C Buffer failed!\n");
        return -1;
    }
	
    thread = kthread_run(touch_event_handler, 0, TPD_DEVICE);
    if (IS_ERR(thread)) { 
        err = PTR_ERR(thread);
        TPD_DMESG(TPD_DEVICE " failed to create kernel thread: %d\n", err);
    }
    
    tpd_load_status = 1;
    
    //mt65xx_eint_set_sens(CUST_EINT_TOUCH_PANEL_NUM, CUST_EINT_TOUCH_PANEL_SENSITIVE);
    //mt65xx_eint_set_hw_debounce(CUST_EINT_TOUCH_PANEL_NUM, CUST_EINT_TOUCH_PANEL_DEBOUNCE_CN);
    mt_eint_registration(CUST_EINT_TOUCH_PANEL_NUM, CUST_EINT_TOUCH_PANEL_TYPE, tpd_eint_interrupt_handler, 1);
    mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM);
    
    printk("MediaTek touch panel i2c probe success\n");
    
    return 0;
}
Пример #16
0
static int txc_irq_init(struct txc_data *txc)
{
	int ret;
	int irq;

	mt_set_gpio_dir(GPIO_IR_EINT_PIN, GPIO_DIR_IN);
	mt_set_gpio_mode(GPIO_IR_EINT_PIN, GPIO_MODE_00);
	mt_eint_set_sens(CUST_EINT_INTI_INT_NUM, MT_EDGE_SENSITIVE);
	mt_eint_registration(CUST_EINT_INTI_INT_NUM, EINTF_TRIGGER_FALLING, txc_irq_handler, 0);
	mt_eint_unmask(CUST_EINT_INTI_INT_NUM);

	return ret;
}
Пример #17
0
static void tpd_resume(struct early_suspend *h)
{
#ifdef CONFIG_TOUCHSCREEN_SWEEP2WAKE
printk("[SWEEP2WAKE]: resume\n");
	scr_suspended = false;
	if ((sweep2wake == 0 || sweep2wake == 3) && doubletap2wake == 0) {
#endif

	if ( g_pts ){
		CTP_DBG("TPD wake up\n");
		if (atomic_read(&g_pts->isp_opened)){
			CTP_DBG("isp is already opened.");
			return;
		}

#ifdef CONFIG_TOUCHSCREEN_POWER_DOWN_WHEN_SLEEP
		fts_5x06_hw_init();
#else //!CONFIG_TOUCHSCREEN_POWER_DOWN_WHEN_SLEEP
		mt_set_gpio_mode(GPIO_CTP_WAKE_PIN, GPIO_CTP_WAKE_PIN_M_GPIO);
		mt_set_gpio_dir(GPIO_CTP_WAKE_PIN, GPIO_DIR_OUT);
		mt_set_gpio_out(GPIO_CTP_WAKE_PIN, GPIO_OUT_ZERO);
		msleep(1);  
		mt_set_gpio_mode(GPIO_CTP_WAKE_PIN, GPIO_CTP_WAKE_PIN_M_GPIO);
		mt_set_gpio_dir(GPIO_CTP_WAKE_PIN, GPIO_DIR_OUT);
		mt_set_gpio_out(GPIO_CTP_WAKE_PIN, GPIO_OUT_ONE);
#endif//CONFIG_TOUCHSCREEN_POWER_DOWN_WHEN_SLEEP
		mutex_unlock(&g_pts->mutex);//Lock on suspend
		mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM);  

		atomic_set( &g_pts->ts_sleepState, 0 );

	}

#ifdef CONFIG_TOUCHSCREEN_SWEEP2WAKE
	} else if ((sweep2wake > 0 && sweep2wake < 3) || doubletap2wake > 0)
		mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM);
#endif
}
Пример #18
0
static void bq24196_irq_init(void)
{
	int ret;

	/*unmask CHRG_FAULT and BAT_FAULT */
	ret = bq24196_i2c_update_reg(bq_data, BQ24196_REG_MISC_CONTROL, 0x3, 0x3);

        mt_set_gpio_dir(GPIO_BQ_INT_PIN, GPIO_DIR_IN);
        mt_set_gpio_mode(GPIO_BQ_INT_PIN, GPIO_MODE_00);
        mt_eint_set_sens(GPIO_BQ_INT_NUM, MT_LEVEL_SENSITIVE);

        mt_eint_registration(GPIO_BQ_INT_NUM, EINTF_TRIGGER_LOW, bq24196_irq_handler, 0);
        mt_eint_unmask(GPIO_BQ_INT_NUM);
}
Пример #19
0
void c2k_gpio_irq_unmask(int gpio)
{
	int irq;

	irq = c2k_gpio_to_irq(gpio);
	if (irq < 0)
		return;

#if defined(CONFIG_MTK_LEGACY)
	mt_eint_unmask(irq);
#else
	enable_irq(irq);
#endif
}
Пример #20
0
static void fcover_key_handler(unsigned long data)
{
	bool pressed;
	u8 old_state = fcover_key_state;
      
	fcover_key_state = !fcover_key_state;
	pressed = (fcover_key_state == !!FCOVER_KEY_POLARITY);
	printk("\r\n leanda fcover_key_eint_handler in pressed=%d, fcover_key_state=%d,old_state=%d \r\n", pressed, fcover_key_state, old_state);
	if(pressed) // close
	{
			fcover_close_flag = 0;
        	input_report_key(kpd_input_dev, KEY_FCOVER_1, 1);
        	input_sync(kpd_input_dev);
        	mdelay(1);
            input_report_key(kpd_input_dev, KEY_FCOVER_1, 0);
        	input_sync(kpd_input_dev);
        	printk("report Linux keycode = %u\n", KEY_FCOVER_1);
			
//======================test=========================
#ifdef KERNEL_OPEN_FCOVER
			if(lcm_backlight_flag == 1)
			{
				kpd_backlight_handler(1, KPD_PWRKEY_MAP);
				input_report_key(kpd_input_dev, KPD_PWRKEY_MAP, 1);
				input_sync(kpd_input_dev);
				printk("report Linux keycode = %u\n", KPD_PWRKEY_MAP);
				mdelay(1);
				kpd_backlight_handler(0, KPD_PWRKEY_MAP);
				input_report_key(kpd_input_dev, KPD_PWRKEY_MAP, 0);
				input_sync(kpd_input_dev);
				printk("report Linux keycode = %u\n", KPD_PWRKEY_MAP);
			}
#endif
//======================end===========================			
	}
	else  // open
	{
			fcover_close_flag = 1;
        	input_report_key(kpd_input_dev, KEY_FCOVER_2, 1);
        	input_sync(kpd_input_dev);
        	mdelay(1);
             input_report_key(kpd_input_dev, KEY_FCOVER_2, 0);
        	input_sync(kpd_input_dev);
        	printk("report Linux keycode = %u\n", KEY_FCOVER_2);
	}

	/* for detecting the return to old_state */
	mt_eint_set_polarity(FCOVER_KEY_EINT, old_state);
	mt_eint_unmask(FCOVER_KEY_EINT);
}
//void tpd_resume(struct i2c_client *client)
static void tpd_resume( struct early_suspend *h )
{   
    int ret = 0;
    unsigned char Wrbuf[2] = {0x14, 0x00};
    
    i2c_client->addr = ( i2c_client->addr & I2C_MASK_FLAG ) | I2C_ENEXT_FLAG;
    ret = i2c_master_send(i2c_client, Wrbuf, 2);
    if(ret != sizeof(Wrbuf))
    {
        TPD_DEBUG("[mtk-tpd] i2c write communcate error during resume: 0x%x\n", ret);
    }
    mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM); 
    tpd_halt = 0;
}
Пример #22
0
  static int  hw_irq_enable(void)
 {
	int retval = -1 ;
	/* Recovery EINT Mode */
	retval = mt_set_gpio_mode(GPIO_CTP_EINT_PIN, GPIO_CTP_EINT_PIN_M_EINT);
	retval |=mt_set_gpio_dir(GPIO_CTP_EINT_PIN, GPIO_DIR_IN);
	retval |=mt_set_gpio_pull_enable(GPIO_CTP_EINT_PIN, GPIO_PULL_ENABLE);
	retval |=mt_set_gpio_pull_select(GPIO_CTP_EINT_PIN, GPIO_PULL_UP);
	
	mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM);	
	
    info_printk("TPD wake up\n"); 	
    return retval;

 }
Пример #23
0
/*
 * register irq handler
 * parmaters pass by inno_core
 * @handler		-	if101 irq handler function pointer
 * @irq_type	-	if101 irq type (falling edge detect or rising)
 */
int inno_irq_setup(void (*interrupthandler)(void ))
{
	mt_set_gpio_mode(GPIO_CMMB_EINT_PIN, GPIO_CMMB_EINT_PIN_M_EINT);                 //set to eint MODE for enable eint function
	mt_set_gpio_dir(GPIO_CMMB_EINT_PIN, GPIO_DIR_IN); 
#if 1
	mt_set_gpio_pull_enable(GPIO_CMMB_EINT_PIN, 1);
	mt_set_gpio_pull_select(GPIO_CMMB_EINT_PIN,  1);
#endif
	inno_msg("CMMB GPIO EINT PIN mode:num:%d, %d, dir:%d,pullen:%d,pullup%d",GPIO_CMMB_EINT_PIN,mt_get_gpio_mode(GPIO_CMMB_EINT_PIN),
			mt_get_gpio_dir(GPIO_CMMB_EINT_PIN),mt_get_gpio_pull_enable(GPIO_CMMB_EINT_PIN),mt_get_gpio_pull_select(GPIO_CMMB_EINT_PIN));    
	// rename the functions mt65xx_eint_xx by mt_eint_xx   rui
	mt_eint_registration(CUST_EINT_CMMB_NUM, EINTF_TRIGGER_FALLING, interrupthandler, 0);         // 0:auto mask is no
	mt_eint_unmask(CUST_EINT_CMMB_NUM);   
	//    mt_eint_mask(CUST_EINT_CMMB_NUM);   
	return 0;
}
Пример #24
0
static void mtk_wcn_cmb_sdio_enable_eirq(void)
{
#if CONFIG_EINT_DEVICE_TREE
	if(!atomic_read(&wifi_irq_flag))
	{
		printk(KERN_DEBUG "wifi eint has been enabled\n");;
	}
	else
	{
		enable_irq(wifi_irq);
		atomic_dec(&wifi_irq_flag);
		//printk(KERN_DEBUG " enable WIFI EINT irq %d !!\n",wifi_irq);
	}
#else
    mt_eint_unmask(mtk_wcn_cmb_sdio_eint_num);/* CUST_EINT_WIFI_NUM */
#endif
}
Пример #25
0
int hall_setup_eint(void)
{
	/*configure to GPIO function, external interrupt*/
	mt_set_gpio_mode(GPIO_HALL_COVER_PIN, GPIO_HALL_COVER_PIN_M_EINT);
	mt_set_gpio_dir(GPIO_HALL_COVER_PIN, GPIO_DIR_IN);
	mt_set_gpio_pull_enable(GPIO_HALL_COVER_PIN, GPIO_PULL_ENABLE);
	mt_set_gpio_pull_select(GPIO_HALL_COVER_PIN, GPIO_PULL_UP);
	
	HALL_LOG("hall_setup_eint 111\n");
	
	mt_eint_set_hw_debounce(CUST_EINT_HALL_COVER_NUM , CUST_EINT_HALL_COVER_DEBOUNCE_CN);
	mt_eint_registration(CUST_EINT_HALL_COVER_NUM , CUST_EINT_HALL_COVER_TYPE, hall_eint_func, 0);
	mt_eint_unmask(CUST_EINT_HALL_COVER_NUM );  

  HALL_LOG("hall_setup_eint 222\n");

  return 0;
}
static void tpd_resume(struct early_suspend *h) {
    char wakeup[2] = {0x07,0x02};
    char threshold[2] = {0x09, 0x04};
    char gesture[2]   = {0x08, 0x11};
    char sleeptime[2]   = {0x0d, 0x01};
    char idletime[2]  = {0x0c, 0xff};
    int i;
    for(i=0;i<TPD_WAKEUP_TRIAL;i++) {
        i2c_master_send(i2c_client,wakeup,2);
        if(i2c_master_send(i2c_client,wakeup,2)==2) break;
        msleep(TPD_WAKEUP_DELAY);
    }
    i2c_master_send(i2c_client,gesture,2);
    i2c_master_send(i2c_client,threshold,2);
    i2c_master_send(i2c_client,idletime,2);
    i2c_master_send(i2c_client,sleeptime,2);
    
    mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM);
    //MT6516_EINTIRQUnmask(CUST_EINT_TOUCH_PANEL_NUM);    
}
Пример #27
0
INT32 wmt_plat_wifi_eint_ctrl(ENUM_PIN_STATE state)
{
#if 0 /*def GPIO_WIFI_EINT_PIN*/
    switch(state)
    {
        case PIN_STA_INIT:
            mt_set_gpio_pull_enable(GPIO_WIFI_EINT_PIN, GPIO_PULL_DISABLE);
            mt_set_gpio_dir(GPIO_WIFI_EINT_PIN, GPIO_DIR_OUT);
            mt_set_gpio_mode(GPIO_WIFI_EINT_PIN, GPIO_MODE_GPIO);
            mt_set_gpio_out(GPIO_WIFI_EINT_PIN, GPIO_OUT_ONE);
            break;
        case PIN_STA_MUX:
            mt_set_gpio_mode(GPIO_WIFI_EINT_PIN, GPIO_WIFI_EINT_PIN_M_GPIO);
            mt_set_gpio_pull_enable(GPIO_WIFI_EINT_PIN, GPIO_PULL_ENABLE);
            mt_set_gpio_pull_select(GPIO_WIFI_EINT_PIN, GPIO_PULL_UP);
            mt_set_gpio_mode(GPIO_WIFI_EINT_PIN, GPIO_WIFI_EINT_PIN_M_EINT);

            break;
        case PIN_STA_EINT_EN:
            mt_eint_unmask(CUST_EINT_WIFI_NUM);
            break;
        case PIN_STA_EINT_DIS:
            mt_eint_mask(CUST_EINT_WIFI_NUM);
            break;
        case PIN_STA_IN_L:
        case PIN_STA_DEINIT:
            /*set to gpio input low, pull down enable*/
            mt_set_gpio_mode(GPIO_WIFI_EINT_PIN, GPIO_COMBO_BGF_EINT_PIN_M_GPIO);
            mt_set_gpio_dir(GPIO_WIFI_EINT_PIN, GPIO_DIR_IN);
            mt_set_gpio_pull_select(GPIO_WIFI_EINT_PIN, GPIO_PULL_DOWN);
            mt_set_gpio_pull_enable(GPIO_WIFI_EINT_PIN, GPIO_PULL_ENABLE);
            break;
        default:
            WMT_WARN_FUNC("WMT-PLAT:Warnning, invalid state(%d) on WIFI EINT\n", state);
            break;
    }
#else
    WMT_INFO_FUNC("WMT-PLAT:WIFI EINT is controlled by MSDC driver \n");
#endif
    return 0;
}
Пример #28
0
void cm_enable_ext_md_exp_irq(void)
{
    #ifdef CONFIG_OF
    unsigned long flags;
    #endif

    EMD_MSG_INF("chr","cm_enable_ext_md_exp_irq,CUST_EINT_DT_EXT_MD_EXP_NUM(%d)\n",ext_md_exp_eint.irq_id);

    #ifdef CONFIG_OF
    spin_lock_irqsave(&ext_md_exp_eint.lock, flags);
    if(ext_md_exp_eint.irq_reg) {
        if(ext_md_exp_eint.irq_en_cnt==0) {
            enable_irq(ext_md_exp_eint.irq_id);
            ext_md_exp_eint.irq_en_cnt = 1;
        }
    }
    spin_unlock_irqrestore(&ext_md_exp_eint.lock, flags);
    #else
    mt_eint_unmask(ext_md_exp_eint.irq_id);
    #endif
}
Пример #29
0
static void gpio_keys_gpio_delayed_work_func(struct work_struct *work)
{
	struct gpio_button_data *bdata =
		container_of(work, struct gpio_button_data, delayed_work.work);

	unsigned char gpio_in = 0, pol = FALLING;

	mutex_lock(&bdata->key_mutex);
	gpio_in = mt_get_gpio_in(bdata->button->gpio);
	pol = mt_eint_get_polarity(bdata->button->irq);

#ifdef KEYPAD_DEBUG
	printk("[Hall] %s: %s %s, gpio_in:%d pol:%s\n",
			__func__,
			bdata->button->desc,
			(atomic_read(&bdata->key_pressed) == PRESSED) ? "Press" : "Release",
			gpio_in,
			pol == RISING ? "Rise" : "Fall");
#endif
	if((atomic_read(&bdata->key_pressed) == PRESSED) && (gpio_in == 1) && (pol == RISING)) {
		mt_eint_mask(bdata->button->irq);
		mt_eint_set_polarity(bdata->button->irq, FALLING);

		atomic_set(&bdata->key_pressed, RELEASED);
		input_report_key(bdata->input, bdata->button->code, RELEASED);
		input_sync(bdata->input);
		mt_eint_unmask(bdata->button->irq);

#ifdef MEIZU_TP_NOTIFIER
		if(bdata->irq == M7X_HALL_IRQ_NUM)
		     gpio_key_notify(atomic_read(&bdata->key_pressed),NULL);
#endif

#ifdef KEYPAD_DEBUG
		printk("[Hall] %s: Force Release!!\n", __func__);
#endif
	}
	mutex_unlock(&bdata->key_mutex);
}
static int mhl_irq_kthread(void *data)
{
	struct sched_param param = { .sched_priority = RTPM_PRIO_SCRN_UPDATE };
	sched_setscheduler(current, SCHED_RR, &param);
    
    for( ;; ) {
        set_current_state(TASK_INTERRUPTIBLE);
        wait_event_interruptible(mhl_irq_wq, atomic_read(&mhl_irq_event));
        set_current_state(TASK_RUNNING);
		printk("mhl_irq_kthread, mhl irq received\n");
        //hdmi_update_impl();

		atomic_set(&mhl_irq_event, 0);
        SiiMhlTxDeviceIsr();
        if (kthread_should_stop())
            break;
#ifdef CUST_EINT_MHL_NUM
		mt_eint_unmask(CUST_EINT_MHL_NUM);
#endif
    }

    return 0;
}