Esempio n. 1
0
void acc_con_intr_handle(struct work_struct *_work)
{
	//ACC_CONDEV_DBG("");
	//check the flag MHL or keyboard
	int cur_state = gpio_get_value(GPIO_ACCESSORY_INT);

	if(cur_state !=DOCK_STATE)
	{
		if(1==cur_state)
		{
			ACC_CONDEV_DBG("docking station detatched!!!");
			DOCK_STATE = cur_state;
#if defined(CONFIG_KEYBOARD_P1)
			check_keyboard_dock();
#endif			
#ifdef CONFIG_MHL_SII9234		
			//call MHL deinit
			MHD_HW_Off();
			//msleep(120);
			//max8998_ldo3_8_control(0,LDO_TV_OUT);  //ldo 3,8 off
			//printk("%s: LDO3_8 is disabled by TV \n", __func__);
			TVout_LDO_ctrl(false);
			
#endif	
			acc_dock_check(CONNECTED_DOCK , DOCK_STATE);
			CONNECTED_DOCK = 0;
		}
		else if(0==cur_state)
		{
			ACC_CONDEV_DBG("docking station attatched!!!");
			DOCK_STATE = cur_state;
#if defined(CONFIG_KEYBOARD_P1)
        	if(check_keyboard_dock())
        	{
				CONNECTED_DOCK = DOCK_KEYBD;
			}
			else
#endif				
        	{				
#ifdef CONFIG_MHL_SII9234
				CONNECTED_DOCK = DOCK_DESK;
				//max8998_ldo3_8_control(1,LDO_TV_OUT); //ldo 3,8 on
				//printk("%s: LDO3_8 is enabled by TV \n", __func__);
				//msleep(120);
				TVout_LDO_ctrl(true);
				//call MHL init	
				sii9234_tpi_init();
#endif
         	}
			acc_dock_check(CONNECTED_DOCK , DOCK_STATE);
		}
	}
	else
	{
		ACC_CONDEV_DBG("Ignored");
	}
	enable_irq(IRQ_ACCESSORY_INT);
}
Esempio n. 2
0
static int acc_con_resume(struct platform_device *pdev)
{
	struct acc_con_info *acc = platform_get_drvdata(pdev);
	ACC_CONDEV_DBG("");
#ifdef CONFIG_MHL_SII9234
	if ((acc->current_dock == DOCK_DESK) || (acc->current_dock == DOCK_KEYBOARD))
		sii9234_tpi_init();  /* call MHL init */
#endif
	return 0;
}
static ssize_t MHD_check_read(struct device *dev,
                              struct device_attribute *attr, char *buf)
{
    int count;
    int res;
    /*TVout_LDO_ctrl(true);*/
    if (!MHD_HW_IsOn()) {
        sii9234_tpi_init();
        res = MHD_Read_deviceID();
        MHD_HW_Off();
    } else {
        sii9234_tpi_init();
        res = MHD_Read_deviceID();
    }

    count = sprintf(buf, "%d\n", res);
    /*TVout_LDO_ctrl(false);*/
    return count;
}
static void acc_check_dock_detection(struct acc_con_info *acc)
{
    if (NULL == acc->pdata->get_dock_state) {
        ACC_CONDEV_DBG("[30PIN] failed to get acc state!!!");
        return;
    }

    if (!acc->pdata->get_dock_state()) {
#ifdef CONFIG_SEC_KEYBOARD_DOCK
        if (acc->pdata->check_keyboard &&
                acc->pdata->check_keyboard(true)) {
            acc->current_dock = DOCK_KEYBOARD;
            ACC_CONDEV_DBG
            ("[30PIN] keyboard dock station attached!!!");
            switch_set_state(&acc->dock_switch,
                             UEVENT_DOCK_KEYBOARD);
        } else
#endif
        {
            ACC_CONDEV_DBG
            ("[30PIN] desktop dock station attached!!!");
            switch_set_state(&acc->dock_switch, UEVENT_DOCK_DESK);
            acc->current_dock = DOCK_DESK;

#ifdef CONFIG_MHL_SII9234
            mutex_lock(&acc->lock);
            if (!acc->mhl_pwr_state) {
                sii9234_tpi_init();
                acc->mhl_pwr_state = true;
            }
            mutex_unlock(&acc->lock);
#endif
        }
        acc_dock_uevent(acc, true);
    } else {

        ACC_CONDEV_DBG("[30PIN] dock station detached!!!");

        switch_set_state(&acc->dock_switch, UEVENT_DOCK_NONE);
#ifdef CONFIG_SEC_KEYBOARD_DOCK
        if (acc->pdata->check_keyboard)
            acc->pdata->check_keyboard(false);
#endif
#ifdef CONFIG_MHL_SII9234
        /*call MHL deinit */
        if (acc->mhl_pwr_state) {
            MHD_HW_Off();
            acc->mhl_pwr_state = false;
        }
#endif
        /*TVout_LDO_ctrl(false); */
        acc_dock_uevent(acc, false);

    }
}
Esempio n. 5
0
static void acc_check_dock_detection(struct acc_con_info *acc)
{
	if (!acc->pdata->get_dock_state()) {
//		ACC_CONDEV_DBG("[30PIN] failed to get acc state!!!");

		wake_lock(&acc->wake_lock);

#ifdef CONFIG_SEC_KEYBOARD_DOCK
		if (acc->pdata->check_keyboard &&
			acc->pdata->check_keyboard(true)) {
			acc->current_dock = DOCK_KEYBOARD;
			ACC_CONDEV_DBG
			("[30PIN] keyboard dock station attached!!!");
			switch_set_state(&acc->dock_switch, 
				UEVENT_DOCK_KEYBOARD);
		} else
#endif
		{
			ACC_CONDEV_DBG
				("[30PIN] desktop dock station attached!!!");
			switch_set_state(&acc->dock_switch, UEVENT_DOCK_DESK);
			acc->current_dock = DOCK_DESK;
		}

#ifdef CONFIG_MHL_SII9234
		mutex_lock(&acc->lock);
		sii9234_tpi_init();
		hdmi_msm_hpd_switch(true);
		mutex_unlock(&acc->lock);
#endif
		acc_dock_uevent(acc, true);

		wake_unlock(&acc->wake_lock);

	} else {
		if (acc->current_dock == DOCK_NONE)
			return;
		ACC_CONDEV_DBG("docking station detached!!!");
		switch_set_state(&acc->dock_switch, UEVENT_DOCK_NONE);
		acc_dock_uevent(acc, false);
		
#ifdef CONFIG_SEC_KEYBOARD_DOCK
		if (acc->pdata->check_keyboard)
			acc->pdata->check_keyboard(false);
#endif
#ifdef CONFIG_MHL_SII9234
		/*call MHL deinit */
		MHD_HW_Off();
		hdmi_msm_hpd_switch(false);
		/*TVout_LDO_ctrl(false); */
#endif

	}
}
Esempio n. 6
0
void acc_TA_check(int On)
{
	if(!gpio_get_value(GPIO_ACCESSORY_INT))
	{
		if(On == FALSE)
			MHD_HW_Off();
		else if((On == TRUE) && (CONNECTED_DOCK == DOCK_DESK) )
			sii9234_tpi_init();
	}

}
static int acc_con_resume(struct platform_device *pdev)
{
	struct acc_con_info *acc = platform_get_drvdata(pdev);
	ACC_CONDEV_DBG("");
#ifdef CONFIG_MHL_SII9234
	if (acc->current_dock != DOCK_NONE) {
		sii9234_tpi_init();  /* call MHL init */
		acc->mhl_pwr_state = true;
	}
#endif
	return 0;
}
Esempio n. 8
0
void acc_con_late_resume_work(struct work_struct *_work)
{
	struct acc_con_info *acc;
	acc = container_of(_work, struct acc_con_info, acc_con_work.work);

	printk(KERN_ERR "%s\n", __func__);
#ifdef CONFIG_MHL_SII9234
	mutex_lock(&acc->lock);
	if (acc->current_dock != DOCK_NONE && !acc->mhl_pwr_state) {
		printk(KERN_ERR "%s2\n", __func__);
		sii9234_tpi_init();  /* call MHL init */
		acc->mhl_pwr_state = true;
	}
	mutex_unlock(&acc->lock);
#endif
}
static int acc_con_resume(struct platform_device *pdev)
{
    struct acc_con_info *acc = platform_get_drvdata(pdev);
    ACC_CONDEV_DBG("");

    mutex_lock(&acc->lock);
#ifdef CONFIG_MHL_SII9234
    if (acc->current_dock == DOCK_DESK && !acc->mhl_pwr_state) {
        pr_err("%s::MHL init\n", __func__);
        sii9234_tpi_init();  /* call MHL init */
        acc->mhl_pwr_state = true;
    }
#endif
    mutex_unlock(&acc->lock);

    return 0;
}
Esempio n. 10
0
static void check_HDMI_signal(unsigned long arg)
{
	SII_DEV_DBG("");
	//u8 data;

	//MHL_HW_Reset();
  	//sii9234_initial_registers_set();
	//startTPI();
  	//mhl_output_enable();
	sii9234_tpi_init();
	
	MHL_reg_check.function = sii_9234_monitor;
	MHL_reg_check.expires = get_jiffies_64() + (HZ*3);
	add_timer(&MHL_reg_check);
	
	//data=ReadIndexedRegister(INDEXED_PAGE_0, 0x81);
	//printk("SII9234_i2c_read  INDEXED_PAGE_0: 0x%02x\n", data);
}
Esempio n. 11
0
static int acc_con_resume(struct platform_device *pdev)
{
	ACC_CONDEV_DBG("");
	if(0 == gpio_get_value(GPIO_ACCESSORY_INT))
	{
		if(CONNECTED_DOCK == DOCK_KEYBD)
		{
			check_keyboard_dock();
		}
		else if(CONNECTED_DOCK == DOCK_DESK)
		{
#ifdef CONFIG_MHL_SII9234		
			//max8998_ldo3_8_control(1,LDO_TV_OUT); //ldo 3,8 on
			//printk("%s: LDO3_8 is enabled by TV \n", __func__);
			//msleep(120);
			
			//call MHL init 
		sii9234_tpi_init();
#endif
		}

	}
	return 0;
}
Esempio n. 12
0
static void WakeUpFromD3 (void)
{

    TPI_DEBUG_PRINT(("[SIMG] Waking up...\n"));
    sii9234_tpi_init();
}
Esempio n. 13
0
static ssize_t MHD_check_read(struct device *dev, struct device_attribute *attr, char *buf)
{
	int count;
	int res;
	#if 0

	s3c_gpio_setpull(GPIO_MHL_SEL, S3C_GPIO_PULL_UP);	//MHL_SEL

	gpio_set_value(GPIO_MHL_SEL, 1);
	

	//TVout_LDO_ctrl(true);
	
	if(!MHD_HW_IsOn())
	{
		sii9234_tpi_init();
		res = MHD_Read_deviceID();
		MHD_HW_Off();		
	}
	else
	{
		sii9234_tpi_init();
		res = MHD_Read_deviceID();
	}

	I2C_WriteByte(0x72, 0xA5, 0xE1);
	res = 0;
	res = I2C_ReadByte(0x72, 0xA5);

	printk("A5 res %x",res);

	res = 0;
	res = I2C_ReadByte(0x72, 0x1B);

	printk("Device ID res %x",res);

	res = 0;
	res = I2C_ReadByte(0x72, 0x1C);

	printk("Device Rev ID res %x",res);

	res = 0;
	res = I2C_ReadByte(0x72, 0x1D);

	printk("Device Reserved ID res %x",res);

	printk("\n####HDMI_EN1 %x MHL_RST %x GPIO_MHL_SEL %x\n",gpio_get_value(GPIO_HDMI_EN1),gpio_get_value(GPIO_MHL_RST),gpio_get_value(GPIO_MHL_SEL));

	res = I2C_ReadByte(0x7A, 0x3D);

	res = I2C_ReadByte(0x7A, 0xFF);
		
	s3c_gpio_setpull(GPIO_MHL_SEL, S3C_GPIO_PULL_NONE);	//MHL_SEL

	gpio_set_value(GPIO_MHL_SEL, 0);

#endif
	count = sprintf(buf,"%d\n", res );
	//TVout_LDO_ctrl(false);
	return count;
}
irqreturn_t acc_con_interrupt(int irq, void *ptr)
{
	struct acc_con_info *acc = ptr;
	int cur_state;

	ACC_CONDEV_DBG("");

	/* check the flag MHL or keyboard */
	cur_state = gpio_get_value(acc->pdata->accessory_irq_gpio);
	if (cur_state == 1) {
		if (acc->current_dock == DOCK_NONE) {
			return;
		}

		ACC_CONDEV_DBG("[30PIN] dock station detached!!!");
		switch_set_state(&acc->dock_switch, UEVENT_DOCK_NONE);
#ifdef CONFIG_SEC_KEYBOARD_DOCK
		check_keyboard_dock(false);
#endif
#ifdef CONFIG_MHL_SII9234
		/*call MHL deinit */
		if (acc->mhl_pwr_state) {
			MHD_HW_Off();
#if defined(CONFIG_MACH_SAMSUNG_P5) || (CONFIG_MACH_SAMSUNG_P5WIFI)
			hpd_force_low();
#endif
			acc->mhl_pwr_state = false;
		}
		/*TVout_LDO_ctrl(false); */
#endif
		acc_dock_check(acc, false);
		set_irq_type(irq,
			IRQF_TRIGGER_LOW | IRQF_ONESHOT);
	} else if (0 == cur_state) {

#ifdef CONFIG_SEC_KEYBOARD_DOCK
		if (check_keyboard_dock(true)) {
			acc->current_dock = DOCK_KEYBOARD;
			ACC_CONDEV_DBG("[30PIN] keyboard dock station attached!!!");
			switch_set_state(&acc->dock_switch, UEVENT_DOCK_KEYBOARD);
		}
		else
#endif
		{
#ifdef CONFIG_MHL_SII9234
			ACC_CONDEV_DBG("[30PIN] desktop dock station attached!!!");
			switch_set_state(&acc->dock_switch, UEVENT_DOCK_DESK);
			acc->current_dock = DOCK_DESK;
#endif
			if(acc->pdata->acc_power) {
				ACC_CONDEV_DBG("[30PIN] otg 5v up!!!");
				acc->pdata->acc_power(2, true);
			} else
				printk(KERN_ERR"[30PIN][ERROR] acc_power is null !!!");
		}
		if (!acc->mhl_pwr_state) {
			sii9234_tpi_init();
			acc->mhl_pwr_state = true;
		}
		acc_dock_check(acc, true);
		set_irq_type(irq,
			IRQF_TRIGGER_HIGH | IRQF_ONESHOT);
	}

	return IRQ_HANDLED;
}
Esempio n. 15
0
irqreturn_t acc_con_interrupt(int irq, void *ptr)
{
	struct acc_con_info *acc = ptr;
	int cur_state;

	ACC_CONDEV_DBG("");

	/* check the flag MHL or keyboard */
	cur_state = gpio_get_value(acc->pdata->accessory_irq_gpio);
	if (cur_state == 1) {
		if (acc->current_dock == DOCK_NONE) {
			return IRQ_HANDLED;
		}
		irq_set_irq_type(irq,
			IRQF_TRIGGER_LOW | IRQF_ONESHOT);

		ACC_CONDEV_DBG("[30PIN] dock station detached!!!");

		switch_set_state(&acc->dock_switch, UEVENT_DOCK_NONE);
#ifdef CONFIG_SEC_KEYBOARD_DOCK
		if (acc->pdata->check_keyboard)
			acc->pdata->check_keyboard(false);
#endif
#ifndef CONFIG_MACH_SAMSUNG_P3
#ifdef CONFIG_MHL_SII9234
		/*call MHL deinit */
		if (acc->mhl_pwr_state) {
			MHD_HW_Off();
#if defined(CONFIG_MACH_SAMSUNG_P5) || defined(CONFIG_MACH_SAMSUNG_P5WIFI)
			hpd_force_low();
#endif
			acc->mhl_pwr_state = false;
			wake_unlock(&acc->mhl_wake_lock);
		}
#endif
#endif
		/*TVout_LDO_ctrl(false); */
		acc_dock_check(acc, false);

	} else if (0 == cur_state) {
		irq_set_irq_type(irq,
			IRQF_TRIGGER_HIGH | IRQF_ONESHOT);

#ifdef CONFIG_SEC_KEYBOARD_DOCK
		if (acc->pdata->check_keyboard &&
			acc->pdata->check_keyboard(true)) {
			acc->current_dock = DOCK_KEYBOARD;
			ACC_CONDEV_DBG("[30PIN] keyboard dock is attached");
			switch_set_state(&acc->dock_switch,
				UEVENT_DOCK_KEYBOARD);
		} else
#endif
		{
			ACC_CONDEV_DBG("[30PIN] desktop dock station attached!!!");
			switch_set_state(&acc->dock_switch, UEVENT_DOCK_DESK);
			acc->current_dock = DOCK_DESK;
#ifndef CONFIG_MACH_SAMSUNG_P3
#ifdef CONFIG_MHL_SII9234
			mutex_lock(&acc->lock);
			if (!acc->mhl_pwr_state) {
#ifdef	__SAMSUNG_HDMI_FLAG_WORKAROUND__
				tegra_dc_set_hdmi_flag(1);
#endif
				sii9234_tpi_init();
				acc->mhl_pwr_state = true;
				wake_lock(&acc->mhl_wake_lock);
			}
			mutex_unlock(&acc->lock);
#endif
#endif
		}
		acc_dock_check(acc, true);
	}

	return IRQ_HANDLED;
}