예제 #1
0
static INT32  pan_direct_gpio_open(struct pan_device *dev)
{
    struct pan_hw_info *tp = (struct pan_hw_info *)dev->priv;
    
#if (SYS_IRP_MOUDLE != SYS_DEFINE_NULL)
	if (tp->type_irp != 0)
		irc_m6303irc_init(tp);
#endif

#ifdef SUPPORT_FIRMWARE_CONFIG
    pan_set_gpio(POS_GPIO_STANDBY_KEY, !POS_GPIO_STANDBY_KEY_POLAR);
    pan_set_gpio(POS_GPIO_CHANNEL_UP_KEY, !POS_GPIO_CHANNEL_UP_KEY_POLAR);
    pan_set_gpio(POS_GPIO_CHANNEL_DOWN_KEY, !POS_GPIO_CHANNEL_DOWN_KEY_POLAR);
    
    pan_get_gpio(POS_GPIO_STANDBY_KEY);
    pan_get_gpio(POS_GPIO_CHANNEL_UP_KEY);
    pan_get_gpio(POS_GPIO_CHANNEL_DOWN_KEY);
#endif

	/* Register an 1mS cycle interrupt ISR */
	osal_interrupt_register_lsr(7, pan_direct_gpio_interrupt, (UINT32)dev);
#if 0
	HAL_GPIO_BIT_DIR_SET(POS_GPIO_STANDBY_KEY, HAL_GPIO_I_DIR);
	HAL_GPIO_BIT_DIR_SET(POS_GPIO_CHANNEL_UP_KEY, HAL_GPIO_I_DIR);
	HAL_GPIO_BIT_DIR_SET(POS_GPIO_CHANNEL_DOWN_KEY, HAL_GPIO_I_DIR);
	HAL_GPIO_BIT_DIR_SET(POS_GPIO_POWER_LED, HAL_GPIO_O_DIR);
	HAL_GPIO_BIT_DIR_SET(POS_GPIO_STANDBY_LED, HAL_GPIO_O_DIR);
#endif
	pan_set_gpio(POS_GPIO_POWER_LED, POS_GPIO_POWER_LED_POLAR); //turn on power led
	pan_set_gpio(POS_GPIO_STANDBY_LED, !POS_GPIO_STANDBY_LED_POLAR); //turn off standby led

    

//	soc_printf("sta:%08x\n", *(UINT32*)0xb8000058);
	
	return SUCCESS;
}
예제 #2
0
static INT32  pan_ch455_open(struct pan_device *dev)
{
	struct pan_ch455_private *tp = (struct pan_ch455_private *)dev->priv;
	struct pan_hw_info *hp = tp->hw_info;
	UINT32 re;
	UINT8 i;
	
	tp->task_id = OSAL_INVALID_ID;
	
	//Set i2c type id.
	//tp->i2c_id = I2C_TYPE_SCB1;
	
	//Config CH455 working mode.
	tp->mode = CH455_MODE;

	//Set bit mask for keyboard scan.
	tp->mask_status = CH455_KEY_STATUS_MASK;
	tp->mask_row = CH455_KEY_ROW_MASK;
	tp->mask_column = CH455_KEY_COLUMN_MASK;

	tp->key_cnt = 1;
	tp->keypress_cnt = 0;
	
	//Set repeat key interval to 300 ms.
	tp->keypress_intv = 3;
	
	tp->keypress_bak = PAN_KEY_INVALID;
	
	//Set back status to up.
 	tp->bak_status = CH455_STATUS_UP; 
	
	re = pan_ch455_mode_set(dev);
	
	if (tp->is_local == 1)
		irc_m6303irc_init(tp->hw_info);

	if (re)
		return ERR_FAILUE;

	// set the default display string.
	for(i = 0; i < 8; i++)
	{
		tp->lock[i] = 0;
		tp->disp_buff[i] = 0;
	}
	
#ifdef _DEBUG_VERSION_
	OSAL_T_CTSK task_param;
	//creat ch455 task for keyboard scan.
	task_param.task   =  (FP)panel_ch455_task;
	task_param.stksz  =  0x1000; 
	task_param.quantum = 10;
	task_param.itskpri = OSAL_PRI_NORMAL;
	task_param.para1= (UINT32)dev;
	task_param.para2 = 0;

	tp->task_id = osal_task_create(&task_param);
	if(OSAL_INVALID_ID == tp->task_id)
	{
		PAN_CH455_PRINTF("%s()=>Create panel_ch455_task FAILED!\n", __FUNCTION__);
		return ERR_FAILUE;
	}
#endif

	return SUCCESS;
}