Esempio n. 1
0
int init_module(void)
{
    int ret;

	printk("[## BT ##] init_module\n");
    ret = register_chrdev(BT_DEV_MAJOR_NUM, DEV_NAME, &tcc_bt_dev_ops);

	bt_dev_class = class_create(THIS_MODULE, DEV_NAME);
	device_create(bt_dev_class, NULL, MKDEV(BT_DEV_MAJOR_NUM, BT_DEV_MINOR_NUM), NULL, DEV_NAME);

#if 0  //  moved to arch/arm/mach-tcc8920/board-tcc-bluetooth.c
	if(machine_is_tcc8900()){
	    gpio_request(TCC_GPB(25), "bt_power");
	    gpio_request(TCC_GPEXT2(9), "bt_reset");
		gpio_direction_output(TCC_GPB(25), 0); // output
		gpio_direction_output(TCC_GPEXT2(9), 0);
	}else if(machine_is_tcc9300() || machine_is_tcc8800()|| machine_is_tcc8920()) {      // #elif defined (CONFIG_MACH_TCC9300)
			//gpio_set_value(TCC_GPEXT1(7), 0);   /* BT-ON Disable */
		gpio_request(TCC_GPEXT3(2), "bt_wake");
	    gpio_request(TCC_GPEXT2(4), "bt_reset");
		gpio_direction_output(TCC_GPEXT3(2), 0); // output
		gpio_direction_output(TCC_GPEXT2(4), 0);
#if defined(CONFIG_TCC_CSR_BC0406_MODULE_SUPPORT) && defined(CONFIG_TCC_CSR_HOST_WAKE_UP)
		tcc_gpio_config(TCC_GPB(31), GPIO_FN(0));
		gpio_request(TCC_GPEXT3(3), "bt_hwake");
		gpio_direction_input(TCC_GPEXT3(3));
#endif // for CSR Bluetooth host wake up
	}
	else if(machine_is_m801_88() || machine_is_m803())
	{
		#if defined(CONFIG_TCC_RDA_587X_MODULE_SUPPORT)
		gpio_request(TCC_GPA(13), "LDO_ON");
		tcc_gpio_config(TCC_GPA(13), GPIO_FN(0));
		gpio_direction_output(TCC_GPA(13), 0);
		#else
		gpio_request(TCC_GPA(13), "bt_reset");
		gpio_request(TCC_GPB(22), "BT WAKE");
		gpio_direction_output(TCC_GPA(13), 0); // output
		gpio_direction_output(TCC_GPB(22), 0); // output
		#endif

	}
	else if(machine_is_tcc8800st())
	{
		gpio_request(TCC_GPC(31), "bt_power");
		gpio_request(TCC_GPD(12), "bt_reset");
		gpio_direction_output(TCC_GPC(31), 0); // output
		gpio_direction_output(TCC_GPD(12), 0); // output
	}
#endif

    if(ret < 0){
        printk("[## BT ##] [%d]fail to register the character device\n", ret);
        return ret;
    }

    return 0;
}
Esempio n. 2
0
static int gpio_event_resume(struct platform_device *pdev)
{
#if 0	//Often does not wakeup in user mode. so, has commented. - 120303, hjbae
	int is_wakeup_by_powerkey = 0;
	PPMU pPMU = (PPMU)tcc_p2v(HwPMU_BASE);

#if defined(CONFIG_REGULATOR_AXP192_PEK) || defined(CONFIG_REGULATOR_AXP202_PEK)
	return 0;
#endif

	// WKUP from PowerKey & PowerKey is not pressed.
#if defined(CONFIG_MACH_M805_892X)
	if (system_rev == 0x2002 || system_rev == 0x2003 || system_rev == 0x2004 || system_rev == 0x2005)
	{
		if((pPMU->PMU_WKSTS1.bREG.GPIO_E15)&&(gpio_get_value(TCC_GPE(15))))
			is_wakeup_by_powerkey = 1;
	}
	else
	{
		if((pPMU->PMU_WKSTS0.bREG.GPIO_D09)&&(gpio_get_value(TCC_GPD(9))))
			is_wakeup_by_powerkey = 1;
	}
#elif defined(CONFIG_MACH_TCC8920ST)
	if((pPMU->PMU_WKSTS0.bREG.GPIO_D14)&&(gpio_get_value(TCC_GPD(14))))
		is_wakeup_by_powerkey = 1;
#elif defined(CONFIG_ARCH_TCC892X)
	if(system_rev == 0x1005 || system_rev == 0x1007 || system_rev == 0x1008)
	{
		if((pPMU->PMU_WKSTS1.bREG.GPIO_E30)&&(gpio_get_value(TCC_GPE(30))))
			is_wakeup_by_powerkey = 1;
	}
	else if(system_rev == 0x1006)
	{
		if((pPMU->PMU_WKSTS1.bREG.GPIO_E24)&&(gpio_get_value(TCC_GPE(24))))
			is_wakeup_by_powerkey = 1;
	}
	else
	{
		if((pPMU->PMU_WKSTS0.bREG.GPIO_G16)&&(gpio_get_value(TCC_GPG(16))))
			is_wakeup_by_powerkey = 1;
	}
#endif

	if (is_wakeup_by_powerkey == 1) {
		cancel_delayed_work(&work);
		if (event_dev)
			input_report_key(event_dev, KEY_POWER, 1);	//KEY_END
		queue_delayed_work(event_wq, &work, msecs_to_jiffies(100));

		printk("[Wakeup by Short PowerKey!!!]\n");
	}
#endif

	return 0;
}
Esempio n. 3
0
static int CardDetectPortForJM2(void)
{
#if defined(TCC892X_EMMC_BOOT)	//for TCC892x
	#if defined(TARGET_M805_892X_EVM) || defined(BOARD_TCC892X_STB_DEMO)
		return 0;	// 0: inserted,  1: removed
	#else
		#if (HW_REV == 0x1005)||(HW_REV == 0x1007)
		return (gpio_get(TCC_GPB(14)));
		#elif (HW_REV == 0x1006)
		return (gpio_get(TCC_GPE(26)));
		#elif (HW_REV == 0x1008)
		return (gpio_get(TCC_GPE(1)));
		#else	//(HW_REV >= 0x1000)&&(HW_REV <= 0x1004)
		return (gpio_get(TCC_GPD(12)));
		#endif
	#endif
#else	//for TCC880x

	PGPIO pGPIO = (PGPIO)(HwGPIO_BASE);

#if (HW_REV == 0x0614 || HW_REV == 0x0615 || HW_REV == 0x0621 || HW_REV == 0x0622 || HW_REV == 0x0623 || HW_REV == 0x0624)
	return (pGPIO->GPADAT&Hw13);
#else
	return (pGPIO->GPFDAT&Hw10);
#endif
#endif
}
Esempio n. 4
0
//  ************************************************************ //
//  Device Release : 
//  
//  
//  ************************************************************ //
static int gps_gpio_release (struct inode *inode, struct file *filp)  
{  
    gps_k_flag = 0;   
#if defined(CONFIG_MACH_TCC9300)||defined(CONFIG_MACH_TCC8800) || defined(CONFIG_MACH_TCC8920)
    if(machine_is_m801_88() || machine_is_m803()) // GPIOG[4]
    {
        gpio_set_value(TCC_GPG(4), 0);
    }
    else if(machine_is_tcc8800() || machine_is_tcc8920())
    {
        gpio_set_value(TCC_GPEXT1(6), 0);
    }
#elif defined(CONFIG_MACH_TCC8900)
    if(machine_is_tcc8900())
    {
        gpio_set_value(TCC_GPD(25), 0);    
    }
#elif defined(CONFIG_MACH_M805_892X)
    if(machine_is_m805_892x())
    {
    	if (system_rev == 0x2002 || system_rev == 0x2003 || system_rev == 0x2004 || system_rev == 0x2005)
    		gpio_set_value(TCC_GPC(14), 0);
    	else
        	gpio_set_value(TCC_GPC(6), 0);
    }    
#endif
    gps_dbg("tcc92xx : gps_gpio_close\n");
    return 0;  
}  
Esempio n. 5
0
static void spk_mute()
{
#if defined(CONFIG_ARCH_TCC92XX)
	if(machine_is_m57te())
#ifdef CONFIG_COBY_MID7025
		gpio_set_value(TCC_GPD(5), 0);
#else	
		gpio_set_value(TCC_GPA(11), 0);
#endif
	else if(machine_is_m801())
Esempio n. 6
0
static int WriteProtectPortJM2(void)
{
#if defined(TCC892X_EMMC_BOOT)	//for TCC892x
	#if defined(TARGET_M805_892X_EVM) || defined(BOARD_TCC892X_STB_DEMO)
		return 0;	// 0: Card is not write protected,  1: Card is write protected
	#else
		#if (HW_REV == 0x1005)||(HW_REV == 0x1007)||(HW_REV == 0x1008)
		return (gpio_get(TCC_GPD(10)));
		#elif (HW_REV == 0x1006)
		return (gpio_get(TCC_GPD(21)));
		#else	//(HW_REV >= 0x1000)&&(HW_REV <= 0x1004)
		return (gpio_get(TCC_GPF(29)));
		#endif
	#endif
#else	//for TCC880x

	PGPIO pGPIO = (PGPIO)(HwGPIO_BASE);

	return (pGPIO->GPFDAT&Hw11);
#endif
}
Esempio n. 7
0
/*****************************************************************************
 Function Name : tcc_composite_detect()
******************************************************************************/
int tcc_composite_detect(void)
{
	int detect = true;

	#if defined (CONFIG_MACH_TCC9300ST) || defined(CONFIG_MACH_TCC8800ST) || defined(CONFIG_MACH_TCC8920ST)
		#if defined(CONFIG_TCC_OUTPUT_AUTO_DETECTION) && defined(TCC_OUTPUT_AUTO_ALL)
			if(composite_plugout)
			{
				if(composite_ext_interrupt == 1)
					tcc_composite_ext_interrupt_set(FALSE);

				detect = false;
			}
			else
			{
				if(composite_ext_interrupt)
				{
					detect = true;
				}
				else
				{
					detect = gpio_get_value(COMPOSITE_DETECT_GPIO)? false : true;

					if(detect)
					{
						if(composite_ext_interrupt == 0)
							tcc_composite_ext_interrupt_set(TRUE);
			 		}

					dprintk("%s, detect=%d\n", __func__, detect);
				}
			}
		#elif (defined(CONFIG_TCC_OUTPUT_AUTO_DETECTION) && defined(TCC_OUTPUT_AUTO_HDMI_CVBS)) || (defined(CONFIG_TCC_OUTPUT_ATTACH) && defined(CONFIG_OUTPUT_ATTACH_HDMI_CVBS))
			/* Check the HDMI detection */
			#if defined(CONFIG_MACH_TCC9300ST)
				if(gpio_get_value(TCC_GPA(14)))
			#elif defined(CONFIG_MACH_TCC8800ST)
				if(gpio_get_value(TCC_GPD(25)))
			#elif defined(CONFIG_MACH_TCC8920ST)
				if(gpio_get_value(TCC_GPHDMI(1)))
			#endif
				{
					detect = false;
				}
 		#elif defined(CONFIG_TCC_OUTPUT_ATTACH) && defined(CONFIG_OUTPUT_ATTACH_DUAL_AUTO)
			detect = false;
		#endif
	#endif

	return detect;
}
static int rn5t614_port_init(int irq_num)
{
	if(system_rev == 0x1005 || system_rev == 0x1007)
	{
		tcc_gpio_config(TCC_GPE(29), GPIO_FN(0)|GPIO_PULL_DISABLE);  // GPIOE[31]: input mode, disable pull-up/down
		tcc_gpio_config_ext_intr(PMIC_IRQ, EXTINT_GPIOE_29);

		gpio_request(TCC_GPE(29), "PMIC_IRQ");
		gpio_direction_input(TCC_GPE(29));
	}
	else if(system_rev == 0x1006)
	{
		tcc_gpio_config(TCC_GPE(27), GPIO_FN(0)|GPIO_PULL_DISABLE);  // GPIOE[31]: input mode, disable pull-up/down
		tcc_gpio_config_ext_intr(PMIC_IRQ, EXTINT_GPIOE_27);

		gpio_request(TCC_GPE(27), "PMIC_IRQ");
		gpio_direction_input(TCC_GPE(27));
	}
	else if(system_rev == 0x1008)
	{
		tcc_gpio_config(TCC_GPD(9), GPIO_FN(0)|GPIO_PULL_DISABLE);  // GPIOE[31]: input mode, disable pull-up/down
		tcc_gpio_config_ext_intr(PMIC_IRQ, EXTINT_GPIOD_09);

		gpio_request(TCC_GPD(9), "PMIC_IRQ");
		gpio_direction_input(TCC_GPD(9));
	}
	else
	{
		tcc_gpio_config(TCC_GPE(31), GPIO_FN(0)|GPIO_PULL_DISABLE);  // GPIOE[31]: input mode, disable pull-up/down
		tcc_gpio_config_ext_intr(PMIC_IRQ, EXTINT_GPIOE_31);

		gpio_request(TCC_GPE(31), "PMIC_IRQ");
		gpio_direction_input(TCC_GPE(31));
	}

	return 0;
}
static void hp_un_mute(void)
{
#if defined(CONFIG_ARCH_TCC88XX)
	if(machine_is_m801_88())
		gpio_set_value(TCC_GPD(11), 1);
#elif defined(CONFIG_ARCH_TCC892X)
	if(machine_is_m805_892x())
	{
		if(system_rev == 0x2002 || system_rev == 0x2003 || system_rev == 0x2004 || system_rev == 0x2005)
			gpio_set_value(TCC_GPE(17), 1);
		else
			gpio_set_value(TCC_GPG(5), 1);
	}
#endif
}
Esempio n. 10
0
int tcc_hp_is_valid(void)
{
#if defined(CONFIG_ARCH_TCC88XX)
    if(machine_is_m801_88()) {
        // gpio_get_value is ==> 0: disconnect, 1: connect
        return gpio_get_value(TCC_GPD(10));
    }
#elif defined(CONFIG_ARCH_TCC892X)
	if(machine_is_m805_892x())
	{
		// gpio_get_value is ==> 0: disconnect, 1: connect
		if(system_rev == 0x2002 || system_rev == 0x2003 || system_rev == 0x2004 || system_rev == 0x2005)
			return gpio_get_value(TCC_GPE(16));
		else
			return gpio_get_value(TCC_GPE(5));
	}
#endif

    return 0;
}
Esempio n. 11
0
//  ************************************************************ //
//  Device Exit :
//
//  
//  ************************************************************ //
static void __exit gps_gpio_exit(void)  
{  

    gps_dbg("gps_gpio_exit");
	
    device_destroy(gps_class, MKDEV(gps_major, 0));
    class_destroy(gps_class);

    cdev_del(&gps_cdev);
    unregister_chrdev_region(dev, 1);

#if defined(CONFIG_MACH_TCC9300) || defined(CONFIG_MACH_TCC8800) || defined(CONFIG_MACH_TCC8920)
    // GPS Power off
    gps_dbg("GPS_PWREN off");
    if(machine_is_m801_88() || machine_is_m803()) // demo set
    {
        gpio_set_value(TCC_GPG(4), 0);
    }
    else if(machine_is_tcc8800() || machine_is_tcc8920())
    {
        gpio_direction_output(TCC_GPEXT1(6), 0);
    }
#elif defined(CONFIG_MACH_TCC8900)
    if(machine_is_tcc8900())    
    {
        gps_dbg("GPS_8900_PWREN off");
        gpio_set_value(TCC_GPD(25), 0);
    }
#elif defined(CONFIG_MACH_M805_892X)
    // GPS Power off
    gps_dbg("GPS_PWREN off");
    if(machine_is_m805_892x())
    {
		if (system_rev == 0x2002 || system_rev == 0x2003 || system_rev == 0x2004 || system_rev == 0x2005)
			gpio_set_value(TCC_GPE(14), 0);
		else
			gpio_set_value(TCC_GPC(6), 0);
    }
#endif
    gps_dbg("GPS driver unloaded");
}  
Esempio n. 12
0
//  ************************************************************ //
//  Device Open : 
//  when open, yet not ativity UART port
//  GPS device is yet disable status.
//  ************************************************************ //
static int gps_gpio_open (struct inode *inode, struct file *filp)  
{
    gps_k_flag = 0;   
    // Set the Port Configure for the UART5
    // GPIO SETTING
    gps_dbg("gps_gpio_open\n");
#if defined(CONFIG_MACH_TCC9300) || defined(CONFIG_MACH_TCC8800) || defined(CONFIG_MACH_TCC8920)
    if(machine_is_m801_88() || machine_is_m803()) // GPIOG[4]
    {
        gpio_set_value(TCC_GPG(4), 0);
    }
    else if(machine_is_tcc8800() || machine_is_tcc8920())
    {
        gps_dbg("gps_gpio_open -> set_velue");
        gpio_set_value(TCC_GPEXT1(6), 0);
    }
#elif defined(CONFIG_MACH_TCC8900)
    if(machine_is_tcc8900())
    {
        gps_dbg("machine_is_tcc8900 : gps_gpio_open\n\n");
        gpio_set_value(TCC_GPD(25), 0);    
    }
#elif defined(CONFIG_MACH_M805_892X)
    if(machine_is_m805_892x())
    {
		if (system_rev == 0x2002 || system_rev == 0x2003 || system_rev == 0x2004 || system_rev == 0x2005)
			gpio_set_value(TCC_GPE(14), 0);
		else
        	gpio_set_value(TCC_GPC(6), 0);
    }
#else

#endif


    gps_dbg("tcc92xx : gps_gpio_open\n\n");
    return 0;  
}
Esempio n. 13
0
/* default: Speaker output */
static int tcc_jack_func = TCC_SPK;
static int tcc_spk_func;

static void spk_mute()
{
#if defined(CONFIG_ARCH_TCC92XX)
	if(machine_is_m57te())
#ifdef CONFIG_COBY_MID7025
		gpio_set_value(TCC_GPD(5), 0);
#else	
		gpio_set_value(TCC_GPA(11), 0);
#endif
	else if(machine_is_m801())
		gpio_set_value(TCC_GPD(5), 0);
#elif defined(CONFIG_ARCH_TCC88XX)
	if(machine_is_m801_88())
		gpio_set_value(TCC_GPG(6), 0);
#endif

}

static void spk_un_mute()
{
#if defined(CONFIG_ARCH_TCC92XX)
	if(machine_is_m57te())
#ifdef CONFIG_COBY_MID7025
{
	 gpio_set_value(TCC_GPE(2), 1);
	 gpio_set_value(TCC_GPD(5), 1);
Esempio n. 14
0
static void SD_HW_InitializePort(void)
{
#if defined(TCC892X_EMMC_BOOT)
#else
	PGPIO pGPIO = (PGPIO)(HwGPIO_BASE);
#endif

#if defined(FEATURE_TCC8803F_2CS_V6_JM5_SLOT)
	//========================================================
	// SD/MMC: JM5, SD Port 1 Power ON (GPIO_F13)
	//========================================================
	BITCLR(pGPIO->GPFFN1, 0x00F00000);
	BITSET(pGPIO->GPFEN, Hw13);
	BITSET(pGPIO->GPFDAT, Hw13);

	//========================================================
	// SD/MMC: JM5(GPIO_F18~23=SD1, GPIO_F13=CD), SD Port 1
	//========================================================
	BITCSET(pGPIO->GPFFN2, 0xFFFFFF00, 0x22222200);	// SD1_D0 ~ SD1_D3, SD1_CLK, SD1_CMD
	BITCLR(pGPIO->GPAEN, Hw15);
	BITCLR(pGPIO->GPFEN, Hw12);
	BITCSET(pGPIO->GPFFN1, 0x000F0000, 0x00000000);	// GPIO_F12 --> SD1_WP
	BITCSET(pGPIO->GPAFN1, 0xF0000000, 0x00000000);	// GPIO_A15 --> SD1_CD
	BITCSET(pGPIO->GPFCD1, 0x0000FFF0, 0x0000D550);	// SD1_CLK(GPIO_F23) Strength: 3, Others:1
#endif

#if defined(FEATURE_TCC8803F_2CS_V6_JM2_SLOT)
	//========================================================
	// SD/MMC: JM2, SD Port 3 Power ON (GPIO_F10)
	//========================================================
	BITCLR(pGPIO->GPFFN1, 0x00000F00);
	BITSET(pGPIO->GPFEN, Hw10);
	BITSET(pGPIO->GPFDAT, Hw10);

	//========================================================
	// SD/MMC: JM2(GPIO_F0~9=SD3, GPIO_F10=CD), SD Port 3
	//========================================================
	BITCSET(pGPIO->GPFFN0, 0xFFFFFFFF, 0x22222222);	// SD3_D0 ~ SD3_D7
	BITCSET(pGPIO->GPFFN1, 0x000000FF, 0x00000022);	// SD3_CLK, SD3_CMD
	BITCLR(pGPIO->GPAEN, Hw13);
	BITCLR(pGPIO->GPFEN, Hw11);
	BITCSET(pGPIO->GPAFN1, 0x00F00000, 0x00000000);	// GPIO_A13 --> SD3_CD
	BITCSET(pGPIO->GPFFN1, 0x0000F000, 0x00000000);	// GPIO_F11 --> SD3_WP
	BITCSET(pGPIO->GPFCD0, 0x000FFFFF, 0x000D5555);	// SD3_CLK(GPIO_F9) Strength: 3, Others:1
#endif

#if defined(FEATURE_TCC93_88_8910_DEMO_JM5_SLOT)
	//========================================================
	// SD/MMC: JM5(GPIO_F18~23=SD1, GPIO_F13=CD), SD Port 1
	//========================================================
	BITCSET(pGPIO->GPFFN2, 0xFFFFFF00, 0x22222200);	// SD1_D0 ~ SD1_D3, SD1_CLK, SD1_CMD
	BITCLR(pGPIO->GPFEN, Hw13|Hw12);
	BITCSET(pGPIO->GPFFN1, 0x00FF0000, 0x00000000);	// GPIO_F13 --> SD1_CD, GPIO_F12 --> SD1_WP
	BITCSET(pGPIO->GPFCD1, 0x0000FFF0, 0x0000D550);	// SD1_CLK(GPIO_F23) Strength: 3, Others:1
#endif //defined(FEATURE_TCC93_88_8910_DEMO_JM5_SLOT)

#if defined(FEATURE_TCC93_88_8910_DEMO_JM2_SLOT)
#if defined(TCC88XX_EMMC_BOOT)
	//=====================================================
	// SD/MMC: JM2(GPIO_F0~9=SD3, GPIO_F10=CD), SD Port 3
	//=====================================================
	BITCSET(pGPIO->GPFFN0, 0xFFFFFFFF, 0x22222222);	// SD3_D0 ~ SD3_D3
	BITCSET(pGPIO->GPFFN1, 0x0000FFFF, 0x00000022);	// SD3_CLK, SD3_CMD
	#if (HW_REV == 0x0614 || HW_REV == 0x0615 || HW_REV == 0x0621 || HW_REV == 0x0622 || HW_REV == 0x0623 || HW_REV == 0x0624)
	BITCLR(pGPIO->GPAEN, Hw13);
	BITCSET(pGPIO->GPAFN1, 0x00F00000, 0x00000000);	// SD3_CD(GPIO_A13)
	#else
	BITCLR(pGPIO->GPFEN, Hw10);
	BITCSET(pGPIO->GPFFN1, 0x00000F00, 0x00000000);	// SD3_CD(GPIO_F10)
	#endif
	BITSCLR(pGPIO->GPFEN, Hw10|Hw11, Hw10|Hw11);
	BITCSET(pGPIO->GPFCD0, 0x000FFFFF, 0x000D5555);	// SD3_CLK(GPIOF9) Strength: 3, Others:1

#elif defined(TCC892X_EMMC_BOOT)	//for TCC892x
#if defined(BOARD_TCC892X_STB_DEMO)
	#if defined(TARGET_TCC8925_STB_DONGLE)
		//=====================================================
		// SD/MMC: JM2(GPIO_D15~20=SD0), SD Port 4
		//=====================================================
		gpio_config(TCC_GPD(18) , GPIO_FN2);	// SD0_D0
		gpio_config(TCC_GPD(17) , GPIO_FN2);	// SD0_D1
		gpio_config(TCC_GPD(16) , GPIO_FN2);	// SD0_D2
		gpio_config(TCC_GPD(15) , GPIO_FN2);	// SD0_D3

		gpio_config(TCC_GPD(20) , GPIO_FN2);	// SD0_CLK
		gpio_config(TCC_GPD(19) , GPIO_FN2);	// SD0_CMD
	#else
		//=====================================================
		// SD/MMC: JM2(GPIO_D15~20=SD0), SD Port 4
		//=====================================================
		gpio_config(TCC_GPF(19) , GPIO_FN2);	// SD0_D0
		gpio_config(TCC_GPF(20) , GPIO_FN2);	// SD0_D1
		gpio_config(TCC_GPF(21) , GPIO_FN2);	// SD0_D2
		gpio_config(TCC_GPF(22) , GPIO_FN2);	// SD0_D3

		gpio_config(TCC_GPF(17) , GPIO_FN2);	// SD0_CLK
		gpio_config(TCC_GPF(18) , GPIO_FN2);	// SD0_CMD
	#endif
#else
#if (HW_REV >= 0x1005)	//||(HW_REV == 0x1006)||(HW_REV == 0x1007)||(HW_REV == 0x1008)
	#if (HW_REV == 0x1008)
	//========================================================
	// SD_CARD0 Power ON (GPIO_C20)
	//========================================================
	gpio_config(TCC_GPC(20) , GPIO_FN0);
	gpio_set(TCC_GPC(20) , 1);
	#endif

	//=====================================================
	// SD/MMC: JM2(GPIO_D11~20=SD0, GPIO_B14=CD), SD Port 4
	//=====================================================
	gpio_config(TCC_GPD(18) , GPIO_FN2);	// SD0_D0
	gpio_config(TCC_GPD(17) , GPIO_FN2);	// SD0_D1
	gpio_config(TCC_GPD(16) , GPIO_FN2);	// SD0_D2
	gpio_config(TCC_GPD(15) , GPIO_FN2);	// SD0_D3
	gpio_config(TCC_GPD(14) , GPIO_FN2);	// SD0_D4
	gpio_config(TCC_GPD(13) , GPIO_FN2);	// SD0_D5
	gpio_config(TCC_GPD(12) , GPIO_FN2);	// SD0_D6
	gpio_config(TCC_GPD(11) , GPIO_FN2);	// SD0_D7

	gpio_config(TCC_GPD(20) , GPIO_FN2);	// SD0_CLK
	gpio_config(TCC_GPD(19) , GPIO_FN2);	// SD0_CMD
#else	//(HW_REV >= 0x1000)&&(HW_REV <= 0x1004)
	#if defined(TARGET_M805_892X_EVM)
		//=====================================================
		// SD/MMC: JM2(GPIO_D15~20=SD0), SD Port 4
		//=====================================================
		gpio_config(TCC_GPD(18) , GPIO_FN2);	// SD0_D0
		gpio_config(TCC_GPD(17) , GPIO_FN2);	// SD0_D1
		gpio_config(TCC_GPD(16) , GPIO_FN2);	// SD0_D2
		gpio_config(TCC_GPD(15) , GPIO_FN2);	// SD0_D3

		gpio_config(TCC_GPD(20) , GPIO_FN2);	// SD0_CLK
		gpio_config(TCC_GPD(19) , GPIO_FN2);	// SD0_CMD
	#else
		//=====================================================
		// SD/MMC: JM2(GPIO_F17~26=SD1, GPIO_D12=CD), SD Port 5
		//=====================================================
		gpio_config(TCC_GPF(19) , GPIO_FN2);	// SD1_D0
		gpio_config(TCC_GPF(20) , GPIO_FN2);	// SD1_D1
		gpio_config(TCC_GPF(21) , GPIO_FN2);	// SD1_D2
		gpio_config(TCC_GPF(22) , GPIO_FN2);	// SD1_D3
		gpio_config(TCC_GPF(23) , GPIO_FN2);	// SD1_D4
		gpio_config(TCC_GPF(24) , GPIO_FN2);	// SD1_D5
		gpio_config(TCC_GPF(25) , GPIO_FN2);	// SD1_D6
		gpio_config(TCC_GPF(26) , GPIO_FN2);	// SD1_D7

		gpio_config(TCC_GPF(17) , GPIO_FN2);	// SD1_CLK
		gpio_config(TCC_GPF(18) , GPIO_FN2);	// SD1_CMD
	#endif
#endif
#endif

#endif

#endif	//#if defined(FEATURE_TCC93_88_8910_DEMO_JM2_SLOT)
}
Esempio n. 15
0
static int __init tcc_init_es8388(void)
{

	int ret;

    printk("%s() \n", __func__);

    if( !(machine_is_m801_88() || machine_is_m805_892x() || machine_is_tcc8920()) ) {
        alsa_dbg("\n\n\n\n%s() do not execution....\n\n", __func__);
        return 0;
    }

#if defined(CONFIG_ARCH_TCC88XX)
    alsa_dbg("TCC Board probe [%s]\n", __FUNCTION__);

    /* h/w mute control */
    if(machine_is_m801_88()) {
        tcc_gpio_config(TCC_GPG(6), GPIO_FN(0));
        tcc_gpio_config(TCC_GPD(11), GPIO_FN(0));
        gpio_request(TCC_GPG(6), "SPK_MUTE_CTL");
        gpio_request(TCC_GPD(11), "HP_MUTE_CTL");
        
        gpio_direction_output(TCC_GPG(6), 0);    // Speaker mute
        gpio_direction_output(TCC_GPD(11), 1);   // HeadPhone mute
        tcc_hp_hw_mute(false);
        tcc_spk_hw_mute(false);

        tcc_soc_card.name = "M801";
    }

#elif defined(CONFIG_ARCH_TCC892X)
	alsa_dbg("TCC Board probe [%s]\n", __FUNCTION__);

	/* h/w mute control */
	if(machine_is_m805_892x())
	{
		if(system_rev == 0x2002 || system_rev == 0x2003 || system_rev == 0x2004 || system_rev == 0x2005) {
			tcc_gpio_config(TCC_GPE(18), GPIO_FN(0));
			gpio_request(TCC_GPE(18), "SPK_MUTE_CTL");
			gpio_direction_output(TCC_GPE(18), 0);	 // Speaker mute
			
			tcc_gpio_config(TCC_GPE(17), GPIO_FN(0));
			gpio_request(TCC_GPE(17), "HP_MUTE_CTL");
			gpio_direction_output(TCC_GPE(17), 1);	 // HeadPhone mute
		}
		else {
			#if defined(CONFIG_M805S_8923_0XA)
			tcc_gpio_config(TCC_GPG(11), GPIO_FN(0));
			gpio_request(TCC_GPG(11), "SPK_MUTE_CTL");
			gpio_direction_output(TCC_GPG(11), 0);	 // Speaker mute
			#else
			tcc_gpio_config(TCC_GPF(27), GPIO_FN(0));
			gpio_request(TCC_GPF(27), "SPK_MUTE_CTL");
			gpio_direction_output(TCC_GPF(27), 0);	 // Speaker mute
			#endif

			tcc_gpio_config(TCC_GPG(5), GPIO_FN(0));
			gpio_request(TCC_GPG(5), "HP_MUTE_CTL");
			gpio_direction_output(TCC_GPG(5), 1);	 // HeadPhone mute
		}

		tcc_hp_hw_mute(false);
		tcc_spk_hw_mute(false);

        tcc_soc_card.name = "M805";
	}

#else
    alsa_dbg("TCC Board probe [%s]\n [Error] Don't support architecture..\n", __FUNCTION__);
	return 0;
#endif


    tcc_hp_hw_mute(true);
    tcc_spk_hw_mute(true);

    tca_tcc_initport();

    ret = es8388_i2c_register();

	tcc_snd_device = platform_device_alloc("soc-audio", -1);
	if (!tcc_snd_device)
		return -ENOMEM;

	platform_set_drvdata(tcc_snd_device, &tcc_soc_card);

	ret = platform_device_add(tcc_snd_device);
	if (ret) {
        printk(KERN_ERR "Unable to add platform device\n");\
		platform_device_put(tcc_snd_device);
	}

	return ret;
}
Esempio n. 16
0
static void tcc_dxb_init(void)
{
	if(machine_is_tcc8920st())
	{
		/*PULL_UP is disabled to save current.*/
		
		//TCC_GPE(2)
		tcc_gpio_config(GPIO_DXB0_SFRM, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(GPIO_DXB0_SFRM, NULL);
		gpio_direction_output(GPIO_DXB0_SFRM, 0);
	
		//TCC_GPE(3)
		tcc_gpio_config(GPIO_DXB0_SCLK, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(GPIO_DXB0_SCLK, NULL);
		gpio_direction_output(GPIO_DXB0_SCLK, 0);
	
		//TCC_GPE(4)
		tcc_gpio_config(GPIO_DXB0_RST, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(GPIO_DXB0_RST, NULL);
		gpio_direction_output(GPIO_DXB0_RST, 0);
	
		//TCC_GPE(5)
		tcc_gpio_config(INT_DXB0_IRQ, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(INT_DXB0_IRQ, NULL);
		gpio_direction_output(INT_DXB0_IRQ, 0);
	
		//TCC_GPE(6)
		tcc_gpio_config(GPIO_DXB0_SDI, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(GPIO_DXB0_SDI, NULL);
		gpio_direction_output(GPIO_DXB0_SDI, 0);
	
		//TCC_GPE(7)
		tcc_gpio_config(GPIO_DXB0_SDO, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(GPIO_DXB0_SDO, NULL);
		gpio_direction_output(GPIO_DXB0_SDO, 0);
	
		//TCC_GPD(5)
		tcc_gpio_config(GPIO_DXB1_SFRM, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(GPIO_DXB1_SFRM, NULL);
		gpio_direction_output(GPIO_DXB1_SFRM, 0);
	
		//TCC_GPD(6)
		tcc_gpio_config(GPIO_DXB1_SCLK, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(GPIO_DXB1_SCLK, NULL);
		gpio_direction_output(GPIO_DXB1_SCLK, 0);
	
		//TCC_GPD(7)
		tcc_gpio_config(GPIO_DXB1_SDI, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(GPIO_DXB1_SDI, NULL);
		gpio_direction_output(GPIO_DXB1_SDI, 0);
	
		//TCC_GPD(8)
		tcc_gpio_config(GPIO_DXB1_SDO, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(GPIO_DXB1_SDO, NULL);
		gpio_direction_output(GPIO_DXB1_SDO, 0);
	
		//TCC_GPD(9)
		tcc_gpio_config(GPIO_DXB1_RST, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(GPIO_DXB1_RST, NULL);
		gpio_direction_output(GPIO_DXB1_RST, 0);
	
		//TCC_GPD(10)
		tcc_gpio_config(INT_DXB1_IRQ, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(INT_DXB1_IRQ, NULL);
		gpio_direction_output(INT_DXB1_IRQ, 0);
	
#if 0	
		//smart Card Interface for CAS
		tcc_gpio_config(TCC_GPD(13), GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(TCC_GPD(13), NULL);
		gpio_direction_output(TCC_GPD(13), 0);
	
		//smart Card Interface for CAS
		tcc_gpio_config(TCC_GPD(14), GPIO_FN(0)|GPIO_PULL_DISABLE);//
		gpio_request(TCC_GPD(14), NULL);
		gpio_direction_output(TCC_GPD(14), 0);
#endif /* 0 */

//////////////////////////////////////////////////////////////////////////////////////////////////////

		tcc_gpio_config(GPIO_DXB0_PD, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(GPIO_DXB0_PD, NULL);
		gpio_direction_output(GPIO_DXB0_PD, 0);

		tcc_gpio_config(GPIO_DXB_ON, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(GPIO_DXB_ON, NULL);
		gpio_direction_output(GPIO_DXB_ON, 0);
		
#if 0
		tcc_gpio_config(GPIO_DXB_UARTTX, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(GPIO_DXB_UARTTX, NULL);
		gpio_direction_output(GPIO_DXB_UARTTX, 0);

		//TCC_GPE(5)
		tcc_gpio_config(GPIO_DXB_UARTRX, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(GPIO_DXB_UARTRX, NULL);
		gpio_direction_output(GPIO_DXB_UARTRX, 0);
#endif
	}
}
Esempio n. 17
0
//  ************************************************************ //
//  Device Init :
//  
//  
//
//  ************************************************************ //
static int __init gps_gpio_init(void)  
{  
    int result;  
        gps_dbg("gps_gpio_init\n"); 

  
	if (0 == gps_major)
	{
		/* auto select a major */
		result = alloc_chrdev_region(&dev, 0, 1, GPS_GPIO_DEV_NAME);
		gps_major = MAJOR(dev);
	}
	else
	{
		/* use load time defined major number */
		dev = MKDEV(gps_major, 0);
		result = register_chrdev_region(dev, 1, GPS_GPIO_DEV_NAME);
	}

	memset(&gps_cdev, 0, sizeof(gps_cdev));

	/* initialize our char dev data */
	cdev_init(&gps_cdev, &gps_gpio_fops);

	/* register char dev with the kernel */
	result = cdev_add(&gps_cdev, dev, 1);
    
	if (0 != result)
	{
		unregister_chrdev_region(dev, 1);
		gps_dbg("Error registrating mali device object with the kernel\n");
	}

    gps_class = class_create(THIS_MODULE, GPS_GPIO_DEV_NAME);
    device_create(gps_class, NULL, MKDEV(gps_major, MINOR(dev)), NULL,
                  GPS_GPIO_DEV_NAME);

    if (result < 0)
        return result;  

#if defined(CONFIG_MACH_TCC9300) || defined(CONFIG_MACH_TCC8800) || defined(CONFIG_MACH_TCC8920)
    if(machine_is_m801_88() || machine_is_m803()) // GPIOG[4]
    {
        gps_dbg("GPS_PWREN on\n");
        tcc_gpio_config(TCC_GPG(4), GPIO_FN(0));
        gpio_request(TCC_GPG(4), "GPIO_PWREN");
        gpio_direction_output(TCC_GPG(4), 0);
    }
    else if(machine_is_tcc8800() || machine_is_tcc8920()) 
    {
        gps_dbg("gpio_direction_output__gps\n");
        gpio_direction_output(TCC_GPEXT1(6), 0);    // GPS Power On
    }
#elif defined(CONFIG_MACH_TCC8900)
    if(machine_is_tcc8900())
    {
        gps_dbg("GPS_8900_PWREN on\n");
        tcc_gpio_config(TCC_GPD(25), GPIO_FN(0));
        gpio_request(TCC_GPD(25), "GPIO_PWREN");
        gpio_set_value(TCC_GPD(25), 0);
    }
#elif defined(CONFIG_MACH_M805_892X)
    if(machine_is_m805_892x())
    {
        gps_dbg("GPS_PWREN on\n");
		if (system_rev == 0x2002 || system_rev == 0x2003 || system_rev == 0x2004 || system_rev == 0x2005) {
			tcc_gpio_config(TCC_GPE(14), GPIO_FN(0));
			gpio_request(TCC_GPE(14), "GPIO_PWREN");
			gpio_direction_output(TCC_GPE(14), 0);

		} else {
			tcc_gpio_config(TCC_GPC(6), GPIO_FN(0));
			gpio_request(TCC_GPC(6), "GPIO_PWREN");
			gpio_direction_output(TCC_GPC(6), 0);
        }
    }
#endif

    gps_dbg("GPS driver loaded\n");

    return 0;  
}  
Esempio n. 18
0
static void tcc_tsif_release_port(struct tcc_tsif_handle *h)
{
	volatile unsigned long* TSIFPORT = (volatile unsigned long *)tcc_p2v(HwTSIF_TSCHS_BASE);

	switch (h->gpio_port) {
		case 0:
				tcc_gpio_config(TCC_GPD(8), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);		//clk
				tcc_gpio_config(TCC_GPD(9), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);		//valid
				tcc_gpio_config(TCC_GPD(10), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);		//sync
				tcc_gpio_config(TCC_GPD(0), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);		//d0

				if(!(h->serial_mode)) {
					tcc_gpio_config(TCC_GPD(1), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d1
					tcc_gpio_config(TCC_GPD(2), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d2
					tcc_gpio_config(TCC_GPD(3), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d3
					tcc_gpio_config(TCC_GPD(4), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d4
					tcc_gpio_config(TCC_GPD(5), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d5
					tcc_gpio_config(TCC_GPD(6), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d6
					tcc_gpio_config(TCC_GPD(7), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d7
				}
			break;
		case 1:
				tcc_gpio_config(TCC_GPB(0), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);		//clk
				tcc_gpio_config(TCC_GPB(2), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);		//valid
				tcc_gpio_config(TCC_GPB(1), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);		//sync
				tcc_gpio_config(TCC_GPB(3), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);		//d0

				if(!(h->serial_mode)) {
					tcc_gpio_config(TCC_GPB(4), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d1
					tcc_gpio_config(TCC_GPB(5), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d2
					tcc_gpio_config(TCC_GPB(6), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d3
					tcc_gpio_config(TCC_GPB(7), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d4
					tcc_gpio_config(TCC_GPB(8), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d5
					tcc_gpio_config(TCC_GPB(9), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d6
					tcc_gpio_config(TCC_GPB(10), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d7
				}
			break;
		case 2:
				tcc_gpio_config(TCC_GPB(28), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);		//clk
				tcc_gpio_config(TCC_GPB(26), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);		//valid
				tcc_gpio_config(TCC_GPB(27), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);		//sync
				tcc_gpio_config(TCC_GPB(25), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);		//d0

				if(!(h->serial_mode)) {
					tcc_gpio_config(TCC_GPB(24), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d1
					tcc_gpio_config(TCC_GPB(23), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d2
					tcc_gpio_config(TCC_GPB(22), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d3
					tcc_gpio_config(TCC_GPB(21), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d4
					tcc_gpio_config(TCC_GPB(20), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d5
					tcc_gpio_config(TCC_GPB(19), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d6
					tcc_gpio_config(TCC_GPB(18), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d7
				}
			break;
		case 3:
				tcc_gpio_config(TCC_GPC(26), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);		//clk
				tcc_gpio_config(TCC_GPC(24), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);		//valid
				tcc_gpio_config(TCC_GPC(25), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);		//sync
				tcc_gpio_config(TCC_GPC(23), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);		//d0

				if(!(h->serial_mode)) {
					tcc_gpio_config(TCC_GPC(22), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d1
					tcc_gpio_config(TCC_GPC(21), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d2
					tcc_gpio_config(TCC_GPC(20), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d3
					tcc_gpio_config(TCC_GPC(19), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d4
					tcc_gpio_config(TCC_GPC(18), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d5
					tcc_gpio_config(TCC_GPC(17), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d6
					tcc_gpio_config(TCC_GPC(16), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d7
				}
			break;
		case 4:
				tcc_gpio_config(TCC_GPE(26), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);		//clk
				tcc_gpio_config(TCC_GPE(24), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);		//valid
				tcc_gpio_config(TCC_GPE(25), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);		//sync
				tcc_gpio_config(TCC_GPE(23), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);		//d0

				if(!(h->serial_mode)) {
					tcc_gpio_config(TCC_GPE(22), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d1
					tcc_gpio_config(TCC_GPE(21), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d2
					tcc_gpio_config(TCC_GPE(20), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d3
					tcc_gpio_config(TCC_GPE(19), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d4
					tcc_gpio_config(TCC_GPE(18), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d5
					tcc_gpio_config(TCC_GPE(17), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d6
					tcc_gpio_config(TCC_GPE(16), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);	//d7
				}
			break;
		case 5:
				tcc_gpio_config(TCC_GPF(0), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);		//clk
				tcc_gpio_config(TCC_GPF(2), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);		//valid
				tcc_gpio_config(TCC_GPF(1), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);		//sync
				tcc_gpio_config(TCC_GPF(3), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW);		//d0

				if(!(h->serial_mode)) {
					tcc_gpio_config(TCC_GPF(4), GPIO_FN(2)|GPIO_OUTPUT|GPIO_LOW);	//d1
					tcc_gpio_config(TCC_GPF(5), GPIO_FN(2)|GPIO_OUTPUT|GPIO_LOW);	//d2
					tcc_gpio_config(TCC_GPF(6), GPIO_FN(2)|GPIO_OUTPUT|GPIO_LOW);	//d3
					tcc_gpio_config(TCC_GPF(7), GPIO_FN(2)|GPIO_OUTPUT|GPIO_LOW);	//d4
					tcc_gpio_config(TCC_GPF(8), GPIO_FN(2)|GPIO_OUTPUT|GPIO_LOW);	//d5
					tcc_gpio_config(TCC_GPF(9), GPIO_FN(2)|GPIO_OUTPUT|GPIO_LOW);	//d6
					tcc_gpio_config(TCC_GPF(10), GPIO_FN(2)|GPIO_OUTPUT|GPIO_LOW);	//d7
				}
			break;		
		default:
				printk("%s : select wrong port => %d\n", __func__, h->gpio_port);
			break;
	}

	{
		unsigned int clr = (0x3 << (12 + (2 * h->gpio_port))) | (0xf << (4 * h->id));

		BITCLR(*TSIFPORT, clr);
	}
}
Esempio n. 19
0
static int __init tcc_init_wm8524(void)
{
	volatile PGPIO pGpio = (volatile PGPIO)tcc_p2v(HwGPIO_BASE);
	int ret;

    if( !(machine_is_tcc8800st() || machine_is_tcc9300st() || machine_is_tcc8920st()) ) {
        alsa_dbg("\n\n\n\n%s() do not execution....\n\n", __func__);
        return 0;
    }

    alsa_dbg("TCC Board probe [%s]\n", __FUNCTION__);

	#if defined(CONFIG_ARCH_TCC93XX)
		if(machine_is_tcc9300st()) {
	        gpio_request(TCC_GPF(4), "AIF_MODE");
	        gpio_request(TCC_GPF(3), "MUTE_ANG");
	        gpio_request(TCC_GPF(2), "MUTE_CTL");
	 
	        BITCLR(pGpio->GPFFN0, Hw20-Hw8);	    /* GPIOF[4:2]: AIFMode, MUTE_ANG, MUTE_CTL */
	        gpio_direction_output(TCC_GPF(4), 1);   /* AIFMode: 0(24-bit LJ), 1(24bit I2S), Z(24bit RJ) */
	        gpio_direction_output(TCC_GPF(3), 0);   /* MUT_ANG: h/w mute */
	        gpio_direction_output(TCC_GPF(2), 0);   /* MUTE_CTL of WM8524 */

	        tcc_soc_card.name = "tcc9300st";
	    }
	#elif defined(CONFIG_ARCH_TCC88XX)
	    if(machine_is_tcc8800st()) {
	        gpio_request(TCC_GPD(20), "AIF_MODE");
	        gpio_request(TCC_GPD(19), "MUTE_ANG");
	        gpio_request(TCC_GPD(18), "MUTE_CTL");

	        BITCLR(pGpio->GPDFN2, Hw20-Hw8);	    /* GPIOD[20:18]: AIFMode, MUTE_ANG, MUTE_CTL */
	        gpio_direction_output(TCC_GPD(20), 1);   /* AIFMode: 0(24-bit LJ), 1(24bit I2S), Z(24bit RJ) */
	        gpio_direction_output(TCC_GPD(19), 0);   /* MUT_ANG: h/w mute */
	        gpio_direction_output(TCC_GPD(18), 0);   /* MUTE_CTL of WM8524 */

	        tcc_soc_card.name = "tcc8800st";
	    }
	#elif defined(CONFIG_ARCH_TCC892X)
		if(machine_is_tcc8920st()) {
	        gpio_request(TCC_GPF(24), "AIF_MODE");
	        gpio_request(TCC_GPB(7), "MUTE_ANG");
	        gpio_request(TCC_GPB(6), "MUTE_CTL");
	 
	        //BITCLR(pGpio->GPFFN0, Hw20-Hw8);	    /* GPIOF[4:2]: AIFMode, MUTE_ANG, MUTE_CTL */
	        gpio_direction_output(TCC_GPF(24), 1);  /* AIFMode: 0(24-bit LJ), 1(24bit I2S), Z(24bit RJ) */
	        gpio_direction_output(TCC_GPB(7), 0);   /* MUT_ANG: h/w mute */
	        gpio_direction_output(TCC_GPB(6), 0);   /* MUTE_CTL of WM8524 */

	        tcc_soc_card.name = "tcc8920st";
		}
    #endif

    tca_tcc_initport();

    tcc_snd_device = platform_device_alloc("soc-audio", -1);
    if (!tcc_snd_device)
        return -ENOMEM;

	platform_set_drvdata(tcc_snd_device, &tcc_soc_card);

	ret = platform_device_add(tcc_snd_device);
	if (ret) {
        printk(KERN_ERR "Unable to add platform device\n");\
		platform_device_put(tcc_snd_device);
	}

	return ret;
}
Esempio n. 20
0
static void tcc_dxb_init(void)
{
	if(machine_is_tcc8920())
	{
		/*PULL_UP is disabled to save current.*/
        if(system_rev == 0x1005 || system_rev == 0x1007)
        {
            gGPIO_DXB0_SCLK = GPIO_DXB0_SCLK_REV1005;
            gGPIO_DXB0_SFRM = GPIO_DXB0_SFRM_REV1005;
            gGPIO_DXB0_SDI = GPIO_DXB0_SDI_REV1005;
            gGPIO_DXB0_SDO = GPIO_DXB0_SDO_REV1005;
            gGPIO_DXB0_RST = GPIO_DXB0_RST_REV1005;
            gGPIO_DXB1_SCLK = GPIO_DXB1_SCLK_REV1005;
            gGPIO_DXB1_SFRM = GPIO_DXB1_SFRM_REV1005;
            gGPIO_DXB1_SDI = GPIO_DXB1_SDI_REV1005;
            gGPIO_DXB1_SDO = GPIO_DXB1_SDO_REV1005;
            gGPIO_DXB1_RST = GPIO_DXB1_RST_REV1005;
			gINT_DXB1_IRQ = INT_DXB1_IRQ_REV1005;
            gINT_DXB0_IRQ = INT_DXB0_IRQ_REV1005;
        }      
        else if(system_rev == 0x1006)
        {
            gGPIO_DXB0_SCLK = GPIO_DXB0_SCLK_REV1006;
            gGPIO_DXB0_SFRM = GPIO_DXB0_SFRM_REV1006;
            gGPIO_DXB0_SDI = GPIO_DXB0_SDI_REV1006;
            gGPIO_DXB0_SDO = GPIO_DXB0_SDO_REV1006;
            gGPIO_DXB0_RST = GPIO_DXB0_RST_REV1006;
            gGPIO_DXB1_SCLK = GPIO_DXB1_SCLK_REV1006;
            gGPIO_DXB1_SFRM = GPIO_DXB1_SFRM_REV1006;
            gGPIO_DXB1_SDI = GPIO_DXB1_SDI_REV1006;
            gGPIO_DXB1_SDO = GPIO_DXB1_SDO_REV1006;
            gGPIO_DXB1_RST = GPIO_DXB1_RST_REV1006;
			gINT_DXB1_IRQ = INT_DXB1_IRQ_REV1006;
            gINT_DXB0_IRQ = INT_DXB0_IRQ_REV1006;
        }        
        else if(system_rev == 0x1008)
        {
            gGPIO_DXB0_SCLK = GPIO_DXB0_SCLK_REV1008;
            gGPIO_DXB0_SFRM = GPIO_DXB0_SFRM_REV1008;
            gGPIO_DXB0_SDI = GPIO_DXB0_SDI_REV1008;
            gGPIO_DXB0_SDO = GPIO_DXB0_SDO_REV1008;
            gGPIO_DXB0_RST = GPIO_DXB0_RST_REV1008;
            gGPIO_DXB1_SCLK = GPIO_DXB1_SCLK_REV1008;
            gGPIO_DXB1_SFRM = GPIO_DXB1_SFRM_REV1008;
            gGPIO_DXB1_SDI = GPIO_DXB1_SDI_REV1008;
            gGPIO_DXB1_SDO = GPIO_DXB1_SDO_REV1008;
            gGPIO_DXB1_RST = GPIO_DXB1_RST_REV1008;
			gINT_DXB1_IRQ = INT_DXB1_IRQ_REV1008;
            gINT_DXB0_IRQ = INT_DXB0_IRQ_REV1008;
        }        
		//TCC_GPE(2)
		tcc_gpio_config(gGPIO_DXB0_SFRM, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(gGPIO_DXB0_SFRM, NULL);
		gpio_direction_output(gGPIO_DXB0_SFRM, 0);
	
		//TCC_GPE(3)
		tcc_gpio_config(gGPIO_DXB0_SCLK, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(gGPIO_DXB0_SCLK, NULL);
		gpio_direction_output(gGPIO_DXB0_SCLK, 0);
	
		//TCC_GPE(4)
		tcc_gpio_config(gGPIO_DXB0_RST, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(gGPIO_DXB0_RST, NULL);
		gpio_direction_output(gGPIO_DXB0_RST, 0);
	
		//TCC_GPE(5)
		tcc_gpio_config(gINT_DXB0_IRQ, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(gINT_DXB0_IRQ, NULL);
		gpio_direction_output(gINT_DXB0_IRQ, 0);
	
		//TCC_GPE(6)
		tcc_gpio_config(gGPIO_DXB0_SDI, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(gGPIO_DXB0_SDI, NULL);
		gpio_direction_output(gGPIO_DXB0_SDI, 0);
	
		//TCC_GPE(7)
		tcc_gpio_config(gGPIO_DXB0_SDO, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(gGPIO_DXB0_SDO, NULL);
		gpio_direction_output(gGPIO_DXB0_SDO, 0);
	
		//TCC_GPD(5)
		tcc_gpio_config(gGPIO_DXB1_SFRM, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(gGPIO_DXB1_SFRM, NULL);
		gpio_direction_output(gGPIO_DXB1_SFRM, 0);
	
		//TCC_GPD(6)
		tcc_gpio_config(gGPIO_DXB1_SCLK, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(gGPIO_DXB1_SCLK, NULL);
		gpio_direction_output(gGPIO_DXB1_SCLK, 0);
	
		//TCC_GPD(7)
		tcc_gpio_config(gGPIO_DXB1_SDI, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(gGPIO_DXB1_SDI, NULL);
		gpio_direction_output(gGPIO_DXB1_SDI, 0);
	
		//TCC_GPD(8)
		tcc_gpio_config(gGPIO_DXB1_SDO, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(gGPIO_DXB1_SDO, NULL);
		gpio_direction_output(gGPIO_DXB1_SDO, 0);
	
		//TCC_GPD(9)
		tcc_gpio_config(gGPIO_DXB1_RST, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(gGPIO_DXB1_RST, NULL);
		gpio_direction_output(gGPIO_DXB1_RST, 0);
	
		//TCC_GPD(10)
		tcc_gpio_config(gINT_DXB1_IRQ, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(gINT_DXB1_IRQ, NULL);
		gpio_direction_output(gINT_DXB1_IRQ, 0);
	
		//smart Card Interface for CAS
		tcc_gpio_config(TCC_GPD(13), GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(TCC_GPD(13), NULL);
		gpio_direction_output(TCC_GPD(13), 0);
	
		//smart Card Interface for CAS
		tcc_gpio_config(TCC_GPD(14), GPIO_FN(0)|GPIO_PULL_DISABLE);//
		gpio_request(TCC_GPD(14), NULL);
		gpio_direction_output(TCC_GPD(14), 0);

//////////////////////////////////////////////////////////////////////////////////////////////////////
		tcc_gpio_config(GPIO_DXB_ON, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(GPIO_DXB_ON, NULL);
		gpio_direction_output(GPIO_DXB_ON, 0);

		tcc_gpio_config(GPIO_DXB1_PD, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(GPIO_DXB1_PD, NULL);
		gpio_direction_output(GPIO_DXB1_PD, 0);		
#if 0
		tcc_gpio_config(GPIO_DXB_UARTTX, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(GPIO_DXB_UARTTX, NULL);
		gpio_direction_output(GPIO_DXB_UARTTX, 0);

		//TCC_GPE(5)
		tcc_gpio_config(GPIO_DXB_UARTRX, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(GPIO_DXB_UARTRX, NULL);
		gpio_direction_output(GPIO_DXB_UARTRX, 0);
#endif
	}
}
#define EMMC_PERI_SDMMC		PERI_SDMMC0
#define EMMC_RB_SDMMC		RB_SDMMC0CONTROLLER
#define EMMC_HwINT1_SD		HwINT1_SD0

typedef enum {
	#if defined(CONFIG_MMC_TCC_SUPPORT_EMMC)
	TCC_MMC_TYPE_EMMC,
	#endif
	TCC_MMC_TYPE_WIFI,
	TCC_MMC_TYPE_MAX
} tcc_mmc_type;

static struct mmc_port_config mmc_ports[] = {
	#if defined(CONFIG_MMC_TCC_SUPPORT_EMMC)
		[TCC_MMC_TYPE_EMMC] = {
			.data0	= TCC_GPD(18),
			.data1	= TCC_GPD(17),
			.data2	= TCC_GPD(16),
			.data3	= TCC_GPD(15),
			.data4	= TCC_MMC_PORT_NULL,
			.data5	= TCC_MMC_PORT_NULL,
			.data6	= TCC_MMC_PORT_NULL,
			.data7	= TCC_MMC_PORT_NULL,
			.cmd	= TCC_GPD(19),
			.clk	= TCC_GPD(20),
			.func	= GPIO_FN(2),
			.width	= TCC_MMC_BUS_WIDTH_4,

			.cd		= TCC_MMC_PORT_NULL,
			.pwr	= TCC_MMC_PORT_NULL,
		},
Esempio n. 22
0
unsigned IO_TCO_GetGpioFunc(unsigned uCH, unsigned uGPIO)
{
#ifdef TCC892X
	switch(uGPIO)
	{
		case TCC_GPB(9): 	// TCO0
		case TCC_GPB(10):	// TCO1
		case TCC_GPB(11):	// TCO2
		case TCC_GPB(12):	// TCO3
		case TCC_GPB(13):	// TCO4
		case TCC_GPB(14):	// TCO5
			return GPIO_FN12;

		case TCC_GPC(0): 	// TCO0
		case TCC_GPC(1):	// TCO1
		case TCC_GPC(2):	// TCO2
		case TCC_GPC(3):	// TCO3
		case TCC_GPC(4):	// TCO4
		case TCC_GPC(5):	// TCO5
			return GPIO_FN9;

		case TCC_GPD(9): 	// TCO0
		case TCC_GPD(10):	// TCO1
		case TCC_GPD(11):	// TCO2
		case TCC_GPD(12):	// TCO3
		case TCC_GPD(13):	// TCO4
		case TCC_GPD(14):	// TCO5
			return GPIO_FN9;

		case TCC_GPE(12): 	// TCO0
		case TCC_GPE(13):	// TCO1
		case TCC_GPE(14):	// TCO2
		case TCC_GPE(15):	// TCO3
		case TCC_GPE(16):	// TCO4
		case TCC_GPE(17):	// TCO5
			return GPIO_FN7;
			
		case TCC_GPF(16): 	// TCO0
		case TCC_GPF(17):	// TCO1
		case TCC_GPF(18):	// TCO2
		case TCC_GPF(19):	// TCO3
		case TCC_GPF(20):	// TCO4
		case TCC_GPF(21):	// TCO5
			return GPIO_FN11;	
			
		case TCC_GPG(5): 	// TCO0
		case TCC_GPG(6):	// TCO1
		case TCC_GPG(7):	// TCO2
		case TCC_GPG(8):	// TCO3
		case TCC_GPG(9):	// TCO4
		case TCC_GPG(10):	// TCO5
			return GPIO_FN7;				

		default:
			break;
	}
#elif defined(TCC88XX)
	switch(uGPIO)
	{
		case TCC_GPA(4): 	// TCO0
		case TCC_GPB(5):	// TCO1
		case TCC_GPB(6):	// TCO2
		case TCC_GPB(7):	// TCO3
		case TCC_GPB(14):	// TCO4
		case TCC_GPB(15):	// TCO5
			return GPIO_FN2;

		default:
			break;
	}
#else
#error code : not define TCO gpio functional setting at chipset
#endif//
	return 0;
}
Esempio n. 23
0
//  ************************************************************ //
//  Device Release : 
//  
//  
//  ************************************************************ //
//static int gps_gpio_ioctl (struct inode *inode, struct file *filp,
//                           unsigned int cmd, unsigned long arg)  
static long gps_gpio_ioctl (struct file *filp, unsigned int cmd, void *arg)  
{
    gps_dbg("gps_gpio_ioctl\n");
    switch( cmd )  
    {  
#if defined(CONFIG_MACH_TCC9300)||defined(CONFIG_MACH_TCC8800) || defined(CONFIG_MACH_TCC8920)
        case 0 : // GPS_On
            gps_k_flag = 1;   
            if(machine_is_m801_88() || machine_is_m803()) // GPIOG[4]
            {
                gpio_set_value(TCC_GPG(4), 1);
            }
            else if(machine_is_tcc8800() || machine_is_tcc8920())
            {
                gpio_set_value(TCC_GPEXT1(6), 1);
            }
            gps_dbg("tccxxxx : gps_gpio_on\n");
            break;   
        case 1 : // GPS_Off
            gps_k_flag = 0;   
            if(machine_is_m801_88() || machine_is_m803()) // GPIOG[4]
            {
                gpio_set_value(TCC_GPG(4), 0);
            }
            else if(machine_is_tcc8800() || machine_is_tcc8920()) 
            {
                gpio_set_value(TCC_GPEXT1(6), 0);
            }
            gps_dbg("tccxxxx : gps_gpio_off\n");
            break;
#elif defined(CONFIG_MACH_TCC8900)
 
        case 0 : // GPS_On
            gps_k_flag = 1;   
            if(machine_is_tcc8900())
            {
                gpio_set_value(TCC_GPD(25), 1);   
            }
            break;   
        case 1 : // GPS_Off
            gps_k_flag = 0;   
            if(machine_is_tcc8900())
            {
                gpio_set_value(TCC_GPD(25), 0);   
            }
            break;            
#elif defined(CONFIG_MACH_M805_892X)
        case 0 : // GPS_On
            gps_k_flag = 1;
            if(machine_is_m805_892x())
            {
            	if (system_rev == 0x2002 || system_rev == 0x2003 || system_rev == 0x2004 || system_rev == 0x2005)
                	gpio_set_value(TCC_GPE(14), 1);
                else
                	gpio_set_value(TCC_GPC(6), 1);
            }
            gps_dbg("tccxxxx : gps_gpio_on\n");
            break;	 
        case 1 : // GPS_Off
            gps_k_flag = 0;
            if(machine_is_m805_892x())
            {
				if (system_rev == 0x2002 || system_rev == 0x2003 || system_rev == 0x2004 || system_rev == 0x2005)
                	gpio_set_value(TCC_GPE(14), 0);
                else
                	gpio_set_value(TCC_GPC(6), 0);
            }
            gps_dbg("tccxxxx : gps_gpio_off\n");
            break;
#else
        case 0 : // GPS_On
            gps_k_flag = 1;   

            break;   
        case 1 : // GPS_Off
            gps_k_flag = 0;   

            break;
#endif  // #if defined(CONFIG_MACH_TCC9300)
        default :
            break;
    };
    return 0;  
}  
static int tcc_bluetooth_probe(struct platform_device *pdev)
{
	int rc = 0;
	int ret = 0;

	printk("[## BT ##] tcc_bluetooth_probe\n");
	if( machine_is_tcc8800()|| machine_is_tcc8920()) {      // #elif defined (CONFIG_MACH_TCC9300)
			//gpio_set_value(TCC_GPEXT1(7), 0);   /* BT-ON Disable */
		gpio_request(TCC_GPEXT3(2), "bt_wake");
	       gpio_request(TCC_GPEXT2(4), "bt_reset");
		gpio_direction_output(TCC_GPEXT3(2), 0); // output
		gpio_direction_output(TCC_GPEXT2(4), 0);
#if defined(CONFIG_TCC_CSR_BC0406_MODULE_SUPPORT) && defined(CONFIG_TCC_CSR_HOST_WAKE_UP)
		tcc_gpio_config(TCC_GPB(31), GPIO_FN(0));
		gpio_request(TCC_GPEXT3(3), "bt_hwake");
		gpio_direction_input(TCC_GPEXT3(3));
#endif // for CSR Bluetooth host wake up
	}
	else if(machine_is_m801_88() || machine_is_m803())
	{
		#if defined(CONFIG_TCC_RDA_587X_MODULE_SUPPORT)
		gpio_request(TCC_GPA(13), "LDO_ON");
		tcc_gpio_config(TCC_GPA(13), GPIO_FN(0));
		gpio_direction_output(TCC_GPA(13), 0);
		#else
		gpio_request(TCC_GPA(13), "bt_reset");
		gpio_request(TCC_GPB(22), "BT WAKE");
		gpio_direction_output(TCC_GPA(13), 0); // output
		gpio_direction_output(TCC_GPB(22), 0); // output
		#endif

	}
	else if(machine_is_tcc8800st())
	{
		gpio_request(TCC_GPC(31), "bt_power");
		gpio_request(TCC_GPD(12), "bt_reset");
		gpio_direction_output(TCC_GPC(31), 0); // output
		gpio_direction_output(TCC_GPD(12), 0); // output
	}
/*
	rc = gpio_request(BT_RESET_GPIO, "bcm4330_nreset_gpip");
	if (unlikely(rc)) {
		return rc;
	}

	rc = gpio_request(BT_REG_GPIO, "bcm4330_nshutdown_gpio");
	if (unlikely(rc)) {
		gpio_free(BT_RESET_GPIO);
		return rc;
	}
*/
	bt_rfkill = rfkill_alloc("Telechips Bluetooth", &pdev->dev,
				RFKILL_TYPE_BLUETOOTH, &tcc_bt_rfkill_ops,
				NULL);

	if (unlikely(!bt_rfkill)) {
		//gpio_free(BT_RESET_GPIO);
		//gpio_free(BT_REG_GPIO);
		printk("[## BT ##] rfkill_alloc failed \n");
		return -ENOMEM;
	}

	rc = rfkill_register(bt_rfkill);

	if (unlikely(rc)) {
		printk("[## BT ##] rfkill_register failed \n");
		rfkill_destroy(bt_rfkill);
		//gpio_free(BT_RESET_GPIO);
		//gpio_free(BT_REG_GPIO);
		return -1;
	}

	printk("[## BT ##] rfkill_register Telechips Bluetooth \n");

	rfkill_set_states(bt_rfkill, true, false);
	tcc_bt_rfkill_set_power(NULL, true);

#if defined (CONFIG_TCC_BRCM_BCM4330_MODULE_SUPPORT)
	ret = bcm_bt_lpm_init(pdev);
	if (ret) {
		rfkill_unregister(bt_rfkill);
		rfkill_destroy(bt_rfkill);

		//gpio_free(BT_RESET_GPIO);
		//gpio_free(BT_REG_GPIO);
	}
#endif

	return ret;
}
Esempio n. 25
0
static void tcc_dxb_init(void)
{
	if(machine_is_m805_892x())
	{
		if (system_rev == 0x2008) {
			gpio_dxb1_sfrm = TCC_GPD(12);
			gpio_dxb1_sclk = TCC_GPD(11);
			gpio_dxb1_sdi = TCC_GPD(13);
			gpio_dxb1_sdo = TCC_GPD(14);
		} else {
			gpio_dxb1_sfrm = TCC_GPG(1);
			gpio_dxb1_sclk = TCC_GPG(0);
			gpio_dxb1_sdi = TCC_GPG(2);
			gpio_dxb1_sdo = TCC_GPG(3);
		}
		/*PULL_UP is disabled to save current.*/
	
		//TCC_GPE(2)
		tcc_gpio_config(GPIO_DXB0_SFRM, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(GPIO_DXB0_SFRM, NULL);
		gpio_direction_output(GPIO_DXB0_SFRM, 0);
	
		//TCC_GPE(3)
		tcc_gpio_config(GPIO_DXB0_SCLK, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(GPIO_DXB0_SCLK, NULL);
		gpio_direction_output(GPIO_DXB0_SCLK, 0);
	
		//TCC_GPE(9)
		tcc_gpio_config(GPIO_DXB0_RST, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(GPIO_DXB0_RST, NULL);
		gpio_direction_output(GPIO_DXB0_RST, 0);
	
		//TCC_GPE(5)
		tcc_gpio_config(INT_DXB0_IRQ, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(INT_DXB0_IRQ, NULL);
		gpio_direction_output(INT_DXB0_IRQ, 0);
	
		//TCC_GPE(6)
		tcc_gpio_config(GPIO_DXB0_SDI, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(GPIO_DXB0_SDI, NULL);
		gpio_direction_output(GPIO_DXB0_SDI, 0);
	
		//TCC_GPE(7)
		tcc_gpio_config(GPIO_DXB0_SDO, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(GPIO_DXB0_SDO, NULL);
		gpio_direction_output(GPIO_DXB0_SDO, 0);
	
		if (system_rev==0x2006 || system_rev==0x2007 || system_rev==0x2008) {
			tcc_gpio_config(gpio_dxb1_sfrm, GPIO_FN(0)|GPIO_PULL_DISABLE);
			gpio_request(gpio_dxb1_sfrm, NULL);
			gpio_direction_input(gpio_dxb1_sfrm);
	
			tcc_gpio_config(gpio_dxb1_sclk, GPIO_FN(0)|GPIO_PULL_DISABLE);
			gpio_request(gpio_dxb1_sclk, NULL);
			gpio_direction_input(gpio_dxb1_sclk);
	
			tcc_gpio_config(gpio_dxb1_sdi, GPIO_FN(0)|GPIO_PULL_DISABLE);
			gpio_request(gpio_dxb1_sdi, NULL);
			gpio_direction_input(gpio_dxb1_sdi);
	
			tcc_gpio_config(gpio_dxb1_sdo, GPIO_FN(0)|GPIO_PULL_DISABLE);
			gpio_request(gpio_dxb1_sdo, NULL);
			gpio_direction_input(gpio_dxb1_sdo);
		} else {
			tcc_gpio_config(gpio_dxb1_sfrm, GPIO_FN(0)|GPIO_PULL_DISABLE);
			gpio_request(gpio_dxb1_sfrm, NULL);
			gpio_direction_output(gpio_dxb1_sfrm, 0);
	
			tcc_gpio_config(gpio_dxb1_sclk, GPIO_FN(0)|GPIO_PULL_DISABLE);
			gpio_request(gpio_dxb1_sclk, NULL);
			gpio_direction_output(gpio_dxb1_sclk, 0);
	
			tcc_gpio_config(gpio_dxb1_sdi, GPIO_FN(0)|GPIO_PULL_DISABLE);
			gpio_request(gpio_dxb1_sdi, NULL);
			gpio_direction_output(gpio_dxb1_sdi, 0);
	
			tcc_gpio_config(gpio_dxb1_sdo, GPIO_FN(0)|GPIO_PULL_DISABLE);
			gpio_request(gpio_dxb1_sdo, NULL);
			gpio_direction_output(gpio_dxb1_sdo, 0);
		}
	
		//TCC_GPE(8)
		tcc_gpio_config(GPIO_DXB_PWDN, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(GPIO_DXB_PWDN, NULL);
		gpio_direction_output(GPIO_DXB_PWDN, 0);
	
		//TCC_GPG(5)
		tcc_gpio_config(GPIO_DXB_PWREN, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(GPIO_DXB_PWREN, NULL);
		gpio_direction_output(GPIO_DXB_PWREN, 0);	//DXB_PWREN //power off
	
		//TCC_GPE(1)
		tcc_gpio_config(GPIO_RFSW_CTL0, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(GPIO_RFSW_CTL0, NULL);
		gpio_direction_output(GPIO_RFSW_CTL0, 0);
	
		//TCC_GPE(1)
		tcc_gpio_config(GPIO_RFSW_CTL1, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(GPIO_RFSW_CTL1, NULL);
		gpio_direction_output(GPIO_RFSW_CTL1, 0);
	
		//TCC_GPE(1)
		tcc_gpio_config(GPIO_RFSW_CTL2, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(GPIO_RFSW_CTL2, NULL);
		gpio_direction_output(GPIO_RFSW_CTL2, 0);
	
		//TCC_GPE(1)
		tcc_gpio_config(GPIO_RFSW_CTL3, GPIO_FN(0)|GPIO_PULL_DISABLE);
		gpio_request(GPIO_RFSW_CTL3, NULL);
		gpio_direction_output(GPIO_RFSW_CTL3, 0);
		
		#if defined(CONFIG_REGULATOR) && defined(CONFIG_M805S_8925_0XX)
		if (vdd_dxb == NULL)
		{
			vdd_dxb = regulator_get(NULL, "vdd_dxb");
			if (IS_ERR(vdd_dxb)) {
				printk("Failed to obtain vdd_dxb\n");
				vdd_dxb = NULL;
			}
		}
		#endif
	}
}
Esempio n. 26
0
static int tca_tsif_set_port(struct tcc_tsif_handle *h)
{
	volatile unsigned long* TSIFPORT = (volatile unsigned long *)tcc_p2v(HwTSIF_TSCHS_BASE);
	int ret = 0;
    printk("%s : select port => %d, serial_mode => %d\n", __func__, h->gpio_port, h->serial_mode);

	switch (h->gpio_port) {
		case 0:
				tcc_gpio_config(TCC_GPD(8), GPIO_FN(2)|GPIO_SCHMITT_INPUT);		//clk
				tcc_gpio_config(TCC_GPD(9), GPIO_FN(2));		//valid
				tcc_gpio_config(TCC_GPD(10), GPIO_FN(2));		//sync
				tcc_gpio_config(TCC_GPD(7), GPIO_FN(2));		//d0

				if(!(h->serial_mode)) {
					tcc_gpio_config(TCC_GPD(6), GPIO_FN(2));	//d1
					tcc_gpio_config(TCC_GPD(5), GPIO_FN(2));	//d2
					tcc_gpio_config(TCC_GPD(4), GPIO_FN(2));	//d3
					tcc_gpio_config(TCC_GPD(3), GPIO_FN(2));	//d4
					tcc_gpio_config(TCC_GPD(2), GPIO_FN(2));	//d5
					tcc_gpio_config(TCC_GPD(1), GPIO_FN(2));	//d6
					tcc_gpio_config(TCC_GPD(0), GPIO_FN(2));	//d7
				}
			break;
		case 1:
				tcc_gpio_config(TCC_GPB(0), GPIO_FN(7)|GPIO_SCHMITT_INPUT);		//clk
				tcc_gpio_config(TCC_GPB(2), GPIO_FN(7));		//valid
				tcc_gpio_config(TCC_GPB(1), GPIO_FN(7));		//sync
				tcc_gpio_config(TCC_GPB(3), GPIO_FN(7));		//d0

				if(!(h->serial_mode)) {
					tcc_gpio_config(TCC_GPB(4), GPIO_FN(7));	//d1
					tcc_gpio_config(TCC_GPB(5), GPIO_FN(7));	//d2
					tcc_gpio_config(TCC_GPB(6), GPIO_FN(7));	//d3
					tcc_gpio_config(TCC_GPB(7), GPIO_FN(7));	//d4
					tcc_gpio_config(TCC_GPB(8), GPIO_FN(7));	//d5
					tcc_gpio_config(TCC_GPB(9), GPIO_FN(7));	//d6
					tcc_gpio_config(TCC_GPB(10), GPIO_FN(7));	//d7
				}
			break;
		case 2:
				tcc_gpio_config(TCC_GPB(28), GPIO_FN(7)|GPIO_SCHMITT_INPUT);		//clk
				tcc_gpio_config(TCC_GPB(26), GPIO_FN(7));		//valid
				tcc_gpio_config(TCC_GPB(27), GPIO_FN(7));		//sync
				tcc_gpio_config(TCC_GPB(25), GPIO_FN(7));		//d0

				if(!(h->serial_mode)) {
					tcc_gpio_config(TCC_GPB(24), GPIO_FN(7));	//d1
					tcc_gpio_config(TCC_GPB(23), GPIO_FN(7));	//d2
					tcc_gpio_config(TCC_GPB(22), GPIO_FN(7));	//d3
					tcc_gpio_config(TCC_GPB(21), GPIO_FN(7));	//d4
					tcc_gpio_config(TCC_GPB(20), GPIO_FN(7));	//d5
					tcc_gpio_config(TCC_GPB(19), GPIO_FN(7));	//d6
					tcc_gpio_config(TCC_GPB(18), GPIO_FN(7));	//d7
				}
			break;
		case 3:
				tcc_gpio_config(TCC_GPC(26), GPIO_FN(3)|GPIO_SCHMITT_INPUT);		//clk
				tcc_gpio_config(TCC_GPC(24), GPIO_FN(3));		//valid
				tcc_gpio_config(TCC_GPC(25), GPIO_FN(3));		//sync
				tcc_gpio_config(TCC_GPC(23), GPIO_FN(3));		//d0

				if(!(h->serial_mode)) {
					tcc_gpio_config(TCC_GPC(22), GPIO_FN(3));	//d1
					tcc_gpio_config(TCC_GPC(21), GPIO_FN(3));	//d2
					tcc_gpio_config(TCC_GPC(20), GPIO_FN(3));	//d3
					tcc_gpio_config(TCC_GPC(19), GPIO_FN(3));	//d4
					tcc_gpio_config(TCC_GPC(18), GPIO_FN(3));	//d5
					tcc_gpio_config(TCC_GPC(17), GPIO_FN(3));	//d6
					tcc_gpio_config(TCC_GPC(16), GPIO_FN(3));	//d7
				}
			break;
		case 4:
				tcc_gpio_config(TCC_GPE(26), GPIO_FN(4)|GPIO_SCHMITT_INPUT);		//clk
				tcc_gpio_config(TCC_GPE(24), GPIO_FN(4));		//valid
				tcc_gpio_config(TCC_GPE(25), GPIO_FN(4));		//sync
				tcc_gpio_config(TCC_GPE(23), GPIO_FN(4));		//d0

				if(!(h->serial_mode)) {
					tcc_gpio_config(TCC_GPE(22), GPIO_FN(4));	//d1
					tcc_gpio_config(TCC_GPE(21), GPIO_FN(4));	//d2
					tcc_gpio_config(TCC_GPE(20), GPIO_FN(4));	//d3
					tcc_gpio_config(TCC_GPE(19), GPIO_FN(4));	//d4
					tcc_gpio_config(TCC_GPE(18), GPIO_FN(4));	//d5
					tcc_gpio_config(TCC_GPE(17), GPIO_FN(4));	//d6
					tcc_gpio_config(TCC_GPE(16), GPIO_FN(4));	//d7
				}
			break;
		case 5:
				tcc_gpio_config(TCC_GPF(0), GPIO_FN(2)|GPIO_SCHMITT_INPUT);		//clk
				tcc_gpio_config(TCC_GPF(2), GPIO_FN(2));		//valid
				tcc_gpio_config(TCC_GPF(1), GPIO_FN(2));		//sync
				tcc_gpio_config(TCC_GPF(3), GPIO_FN(2));		//d0

				if(!(h->serial_mode)) {
					tcc_gpio_config(TCC_GPF(4), GPIO_FN(2));	//d1
					tcc_gpio_config(TCC_GPF(5), GPIO_FN(2));	//d2
					tcc_gpio_config(TCC_GPF(6), GPIO_FN(2));	//d3
					tcc_gpio_config(TCC_GPF(7), GPIO_FN(2));	//d4
					tcc_gpio_config(TCC_GPF(8), GPIO_FN(2));	//d5
					tcc_gpio_config(TCC_GPF(9), GPIO_FN(2));	//d6
					tcc_gpio_config(TCC_GPF(10), GPIO_FN(2));	//d7
				}
			break;		
		default:
				printk("%s : select wrong port => %d\n", __func__, h->gpio_port);
				ret = -1;
			break;
	}

	if(ret != -1) {
		unsigned int direction = 1 << (24 + h->gpio_port);
		unsigned int channel = (h->id & 0x3) << (12 + (2 * h->gpio_port));
		unsigned int port = (h->gpio_port & 0xf) << (4 * h->id);
		unsigned int clr = (0x3 << (12 + (2 * h->gpio_port))) | (0xf << (4 * h->id));

		BITCLR(*TSIFPORT, 0xffffffff);
		BITCLR(*TSIFPORT, direction);			//clk, sync, valid, data input direction select
		BITCSET(*TSIFPORT, clr, (channel | port));	//tsif channel & port number select
	}

	return ret;
}
static int tcc_bt_rfkill_set_power(void *data, bool blocked)
{
	// rfkill_ops callback. Turn transmitter on when blocked is false

	printk("[## BT ##] tcc_bt_rfkill_set_power [%d]\n", blocked);
	
	if (!blocked && (bt_enable_flag == 0)) {
	      bt_enable_flag = 1;
              if (machine_is_tcc8800() || machine_is_tcc8920()) {      // #elif defined (CONFIG_MACH_TCC9300)
			#if defined (CONFIG_TCC_CSR_BC0406_MODULE_SUPPORT)|| defined(CONFIG_TCC_ATHEROS_AR3002_MODULE_SUPPORT)
			//gpio_set_value(TCC_GPEXT1(7), 1);   /* BT-ON Enable */
			gpio_set_value(TCC_GPEXT3(2), 1);   /* BT_WAKE Enable , pwr_ctrl*/
			gpio_set_value(TCC_GPEXT2(4), 0);   /* reset */
			msleep(500);
			gpio_set_value(TCC_GPEXT2(4), 1);   /* reset */
			#elif defined (CONFIG_TCC_RDA_587X_MODULE_SUPPORT)
			RDA_bt_Power_On();
			#endif	
		}
		else if (machine_is_m801_88() || machine_is_m803())
		{
			#if defined (CONFIG_TCC_CSR_BC0406_MODULE_SUPPORT)
			gpio_set_value(TCC_GPB(22),1); // BT WAKE
			gpio_set_value(TCC_GPA(13),0); // reset
			msleep(500);
			gpio_set_value(TCC_GPA(13),1); // reset
			#elif defined (CONFIG_TCC_RDA_587X_MODULE_SUPPORT)
			RDA_bt_Power_On();
			#endif	
		}
		else if(machine_is_tcc8800st())
		{
			gpio_set_value(TCC_GPC(31), 1); 		// BT pwr enable
			gpio_set_value(TCC_GPD(12), 0);			// BT rst 0
			msleep(500);
			gpio_set_value(TCC_GPD(12), 1);
		}
	} else if(blocked && (bt_enable_flag == 1)) {
		bt_enable_flag = 0;
		if (machine_is_tcc8800() || machine_is_tcc8920()) {      // #elif defined (CONFIG_MACH_TCC9300)
			#if defined (CONFIG_TCC_CSR_BC0406_MODULE_SUPPORT)|| defined(CONFIG_TCC_ATHEROS_AR3002_MODULE_SUPPORT)
			//gpio_set_value(TCC_GPEXT1(7), 0);   /* BT-ON Disable */
			gpio_set_value(TCC_GPEXT3(2), 0);   /* BT_WAKE Disable */
			gpio_set_value(TCC_GPEXT2(4), 0);   /* reset */
			#elif defined (CONFIG_TCC_RDA_587X_MODULE_SUPPORT)
			RDA_bt_Power_Off();
			#endif			
		}
		else if (machine_is_m801_88() || machine_is_m803())
		{
			#if defined (CONFIG_TCC_CSR_BC0406_MODULE_SUPPORT)
			gpio_set_value(TCC_GPB(22), 0); // BT WAKE
			gpio_set_value(TCC_GPA(13), 0); // reset
			#elif defined (CONFIG_TCC_RDA_587X_MODULE_SUPPORT)
			RDA_bt_Power_Off();
			#endif			
		}
		else if(machine_is_tcc8800st())
		{
			gpio_set_value(TCC_GPC(31), 0); 		// BT pwr enable
			gpio_set_value(TCC_GPD(12), 0);			// BT rst 0
		}

	}

	bt_enabled = !blocked;

	return 0;
}
Esempio n. 28
0
int tcc_bt_power_control(int on_off)
{
	volatile PGPIO pGPIO = (volatile PGPIO)tcc_p2v(HwGPIO_BASE);
    
	printk("[## BT ##] tcc_bt_power_control input[%d]\n", on_off);
	
	if(on_off == BT_DEV_ON)
	{	    
  	      if (machine_is_tcc8900()) {
            // power on
			gpio_set_value(TCC_GPB(25), 1);			/* bt_power, mapped on BT_WAKE */
			msleep(500);

            // reset
			gpio_set_value(TCC_GPEXT2(9), 0); /* /reset, mapped on BT_HWAKE */
			msleep(500);
			gpio_set_value(TCC_GPEXT2(9), 1);

			msleep(300);
		}
		else if (machine_is_tcc9300() || machine_is_tcc8800() || machine_is_tcc8920()) {      // #elif defined (CONFIG_MACH_TCC9300)
			#if defined (CONFIG_TCC_CSR_BC0406_MODULE_SUPPORT)|| defined(CONFIG_TCC_ATHEROS_AR3002_MODULE_SUPPORT)
			//gpio_set_value(TCC_GPEXT1(7), 1);   /* BT-ON Enable */
			gpio_set_value(TCC_GPEXT3(2), 1);   /* BT_WAKE Enable , pwr_ctrl*/
			gpio_set_value(TCC_GPEXT2(4), 0);   /* reset */
			msleep(500);
			gpio_set_value(TCC_GPEXT2(4), 1);   /* reset */
			#elif defined (CONFIG_TCC_RDA_587X_MODULE_SUPPORT)
			RDA_bt_Power_On();
			#endif	
		}
		else if (machine_is_m801_88() || machine_is_m803())
		{
			#if defined (CONFIG_TCC_CSR_BC0406_MODULE_SUPPORT)
			gpio_set_value(TCC_GPB(22),1); // BT WAKE
			gpio_set_value(TCC_GPA(13),0); // reset
			msleep(500);
			gpio_set_value(TCC_GPA(13),1); // reset
			#elif defined (CONFIG_TCC_RDA_587X_MODULE_SUPPORT)
			RDA_bt_Power_On();
			#endif	
		}
		else if(machine_is_tcc8800st())
		{
			gpio_set_value(TCC_GPC(31), 1); 		// BT pwr enable
			gpio_set_value(TCC_GPD(12), 0);			// BT rst 0
			msleep(500);
			gpio_set_value(TCC_GPD(12), 1);
		}
		else if (0/*machine_is_tcc9300ST()*/) {//#elif defined (CONFIG_MACH_TCC9300ST)
#if 0
			pGPIO->GPFEN	|= Hw1|Hw0;		   
			pGPIO->GPFDAT	|= Hw0;			/* BT-On Enbale */
			pGPIO->GPFDAT	&= ~Hw1;		/* BT_HWAKE Enable, reset */
			msleep(500);
			pGPIO->GPFDAT	|= Hw1;			/* BT_HWAKE Enable, reset */	
#endif
		}

	}
	else if(on_off == BT_DEV_OFF)
	{

  	      if (machine_is_tcc8900()) {
			// power off
			gpio_set_value(TCC_GPB(25), 0);			/* bt_power, mapped on BT_WAKE */
			msleep(500);

            // reset
			//gpio_direction_output(TCC_GPEXT2(9), 0);
		}else if (machine_is_tcc9300() || machine_is_tcc8800() || machine_is_tcc8920()) {      // #elif defined (CONFIG_MACH_TCC9300)
			#if defined (CONFIG_TCC_CSR_BC0406_MODULE_SUPPORT)|| defined(CONFIG_TCC_ATHEROS_AR3002_MODULE_SUPPORT)
			//gpio_set_value(TCC_GPEXT1(7), 0);   /* BT-ON Disable */
			gpio_set_value(TCC_GPEXT3(2), 0);   /* BT_WAKE Disable */
			gpio_set_value(TCC_GPEXT2(4), 0);   /* reset */
			#elif defined (CONFIG_TCC_RDA_587X_MODULE_SUPPORT)
			RDA_bt_Power_Off();
			#endif			
		}
		else if (machine_is_m801_88() || machine_is_m803())
		{
			#if defined (CONFIG_TCC_CSR_BC0406_MODULE_SUPPORT)
			gpio_set_value(TCC_GPB(22), 0); // BT WAKE
			gpio_set_value(TCC_GPA(13), 0); // reset
			#elif defined (CONFIG_TCC_RDA_587X_MODULE_SUPPORT)
			RDA_bt_Power_Off();
			#endif			
		}
		else if(machine_is_tcc8800st())
		{
			gpio_set_value(TCC_GPC(31), 0); 		// BT pwr enable
			gpio_set_value(TCC_GPD(12), 0);			// BT rst 0
		}
		else if (0/*machine_is_tcc9300ST()*/) {      // #elif defined (CONFIG_MACH_TCC9300ST)
#if 0
			pGPIO->GPFEN    |= Hw1|Hw0;
			pGPIO->GPFDAT   &= ~Hw0;                /* BT-On Enbale */
			pGPIO->GPFDAT   &= ~Hw1;                /* BT_HWAKE Enable, reset */
#endif
		}

	}
	else
	{
		printk("[## BT_ERR ##] input_error On[%d] Off[%d]\n", BT_DEV_ON, BT_DEV_OFF);
	}

	return 0;
}