예제 #1
0
static int wmt_kpad_resume(struct platform_device *pdev)
{
	DPRINTK("Start\n");
	wmt_kpad_hw_init();
	DPRINTK("End\n");
	return 0;
}
예제 #2
0
static int wmt_kpad_resume(struct platform_device *pdev)
{  
	DPRINTK("Start\n");
	wmt_kpad_hw_init();
#ifdef USE_HOME
	wmt_gpio_home_key_hw_init();
#endif
	DPRINTK("End\n");
	return 0;
}
예제 #3
0
static int kpad_open(struct input_dev *dev)
{
	int ret = 0;
	unsigned int i;
	DPRINTK("Start\n");
    
	if (kpad.ref++) {
		/* Return success, but not initialize again. */
		DPRINTK("End 1\n");
		return 0;
	}

	ret = request_irq(kpad.irq, kpad_interrupt, IRQF_DISABLED, "keypad", dev);

	if (ret) {
		printk(KERN_ERR "%s: Can't allocate irq %d\n", __func__, IRQ_KPAD);
		kpad.ref--;
		goto kpad_open_out;
	}
	
	/*Home key*/
#ifdef USE_HOME
	ret = request_irq(IRQ_GPIO, wmt_home_key_interrupt, IRQF_SHARED, "home-key", dev);
	if (ret) {
		printk(KERN_ERR "%s: Can't allocate irq %d ret = %d\n", __func__, IRQ_GPIO,ret);
		free_irq(kpad.irq, dev);
		goto kpad_open_out;
	}
#endif

	/*init timer*/
	init_timer(&wmt_kpad_timer_row0);
	wmt_kpad_timer_row0.function = wmt_kpad_timeout_row0;
	wmt_kpad_timer_row0.data = (unsigned long)dev;

	init_timer(&wmt_kpad_timer_row1);
	wmt_kpad_timer_row1.function = wmt_kpad_timeout_row1;
	wmt_kpad_timer_row1.data = (unsigned long)dev;

	init_timer(&wmt_kpad_timer_row2);
	wmt_kpad_timer_row2.function = wmt_kpad_timeout_row2;
	wmt_kpad_timer_row2.data = (unsigned long)dev;

	init_timer(&wmt_kpad_timer_row3);
	wmt_kpad_timer_row3.function = wmt_kpad_timeout_row3;
	wmt_kpad_timer_row3.data = (unsigned long)dev;

#ifdef USE_HOME
	init_timer(&wmt_kpad_timer_row4);
	wmt_kpad_timer_row4.function = wmt_kpad_timeout_kpadrow4;
	wmt_kpad_timer_row4.data = (unsigned long)dev;
#endif

#if 0    
	init_timer(&wmt_kpad_timer_row4);
	wmt_kpad_timer_row4.function = wmt_kpad_timeout_row4;
	wmt_kpad_timer_row4.data = (unsigned long)dev;

	init_timer(&wmt_kpad_timer_row5);
	wmt_kpad_timer_row5.function = wmt_kpad_timeout_row5;
	wmt_kpad_timer_row5.data = (unsigned long)dev;

	init_timer(&wmt_kpad_timer_row6);
	wmt_kpad_timer_row6.function = wmt_kpad_timeout_row6;
	wmt_kpad_timer_row6.data = (unsigned long)dev;

	init_timer(&wmt_kpad_timer_row7);
	wmt_kpad_timer_row7.function = wmt_kpad_timeout_row7;
	wmt_kpad_timer_row7.data = (unsigned long)dev;
#endif    
    
	/* Register an input event device. */
	dev->name = "keypad",
	dev->phys = "keypad",

	/*
	 *  Let kpad to implement key repeat.
	 */

	set_bit(EV_KEY, dev->evbit);

	for (i = 0; i < WMT_KPAD_FUNCTION_NUM; i++)
		set_bit(wmt_kpad_codes[i], dev->keybit);


	dev->keycode = wmt_kpad_codes;
	dev->keycodesize = sizeof(unsigned int);
	dev->keycodemax = WMT_KPAD_FUNCTION_NUM;

	/*
	 * For better view of /proc/bus/input/devices
	 */
	dev->id.bustype = 0;
	dev->id.vendor  = 0;
	dev->id.product = 0;
	dev->id.version = 0;

	input_register_device(dev);
	
#ifdef USE_HOME	
	wmt_gpio_home_key_hw_init();
#endif

	wmt_kpad_hw_init();
	DPRINTK("End2\n");
kpad_open_out:
	DPRINTK("End3\n");
	return ret;
}
예제 #4
0
static int kpad_open(struct input_dev *dev)
{
	int ret = 0;
	unsigned int i;
	DPRINTK("Start\n");
	if (kpad.ref++) {
		/* Return success, but not initialize again. */
		DPRINTK("End 1\n");
		return 0;
	}

	
	
	/*
	 * Clean all previous keypad status. (Previous bug fixed.)
	 */


	ret = request_irq(kpad.irq, kpad_interrupt, IRQF_SHARED, "keypad", dev);

	if (ret) {
		printk(KERN_ERR "%s: Can't allocate irq %d\n", __func__, IRQ_GPIO);
		kpad.ref--;
		goto kpad_open_out;
	}

	/*init timer*/
	init_timer(&wmt_kpad_timer_col0);
    wmt_kpad_timer_col0.function = wmt_kpad_timeout_col0;
    wmt_kpad_timer_col0.data = (unsigned long)dev;

	init_timer(&wmt_kpad_timer_col1);
    wmt_kpad_timer_col1.function = wmt_kpad_timeout_col1;
    wmt_kpad_timer_col1.data = (unsigned long)dev;

	init_timer(&wmt_kpad_timer_row0);
    wmt_kpad_timer_row0.function = wmt_kpad_timeout_row0;
    wmt_kpad_timer_row0.data = (unsigned long)dev;

	init_timer(&wmt_kpad_timer_row1);
    wmt_kpad_timer_row1.function = wmt_kpad_timeout_row1;
    wmt_kpad_timer_row1.data = (unsigned long)dev;
	/* Register an input event device. */


	dev->name = "keypad",
	dev->phys = "keypad",

	/*
	 *  Let kpad to implement key repeat.
	 */

	set_bit(EV_KEY, dev->evbit);

	for (i = 0; i < WMT_KPAD_FUNCTION_NUM; i++)
		set_bit(wmt_kpad_codes[i], dev->keybit);


	dev->keycode = wmt_kpad_codes;
	dev->keycodesize = sizeof(unsigned int);
	dev->keycodemax = WMT_KPAD_FUNCTION_NUM;

	/*
	 * For better view of /proc/bus/input/devices
	 */
	dev->id.bustype = 0;
	dev->id.vendor  = 0;
	dev->id.product = 0;
	dev->id.version = 0;

	input_register_device(dev);
	
	wmt_kpad_hw_init();
	DPRINTK("End2\n");
kpad_open_out:
	DPRINTK("End3\n");
	return ret;
}