Example #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;
}
Example #2
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
}
static void sitronix_ts_port_init(void)
{
	volatile PGPIO pGPIO = (volatile PGPIO)tcc_p2v(HwGPIO_BASE);
	//int gp_penirq;

#if defined(CONFIG_ARCH_TCC88XX)
	if (machine_is_tcc8800()) {
		gp_penirq = TCC_GPA(6);
	}
#elif defined(CONFIG_ARCH_TCC892X)
	if (machine_is_tcc8920()) {
		if(system_rev == 0x1005 || system_rev == 0x1007)
			gp_penirq = TCC_GPB(11);
		else if(system_rev == 0x1006)
			gp_penirq = TCC_GPE(17);
		else if(system_rev == 0x1008)
			gp_penirq = TCC_GPE(5);
		else
			gp_penirq = TCC_GPG(18);
	}
#endif

      gpio_request(gp_penirq, "tsc_int");
      tcc_gpio_config(gp_penirq, GPIO_FN(0));
      gpio_direction_input(gp_penirq);

#if defined(CONFIG_ARCH_TCC88XX)
      if (machine_is_tcc8800()) {
		BITCSET(pGPIO->EINTSEL0 , HwEINTSEL0_EINT2_MASK, HwEINTSEL0_EINT2(SEL_GPIOA6));

		HwPIC->INTMSK0	|= Hw5;
		HwPIC->IEN0	&= ~Hw5;	/* disable Isr */
		HwPIC->MODEA0	&= ~Hw5; 	/* single edge */
		HwPIC->MODE0	&= ~Hw5;	/* set edge trigger mode */
		HwPIC->POL0	|= Hw5;		/* active-low */
		HwPIC->CLR0	|= Hw5;		/* clear pending status */
		HwPIC->SEL0	|= Hw5;		/* IRQ Select */
		HwPIC->IEN0	|= Hw5;
	}
#elif defined(CONFIG_ARCH_TCC892X)
	if (machine_is_tcc8920()) {
		if(system_rev == 0x1005 || system_rev == 0x1007)
			tcc_gpio_config_ext_intr(INT_EI2, EXTINT_GPIOB_11);
		else if(system_rev == 0x1006)
			tcc_gpio_config_ext_intr(INT_EI2, EXTINT_GPIOE_17);
		else if(system_rev == 0x1008)
			tcc_gpio_config_ext_intr(INT_EI2, EXTINT_GPIOE_05);
		else
			tcc_gpio_config_ext_intr(INT_EI2, EXTINT_GPIOG_18);
	}
#endif
}
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;
}
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;
}
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;
}
			.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,
		},
	#endif
	
	#if defined(CONFIG_HDMI_DONGLE_WIFI_REALTEK) || defined(CONFIG_HDMI_DONGLE_WIFI_BROADCOM)
		[TCC_MMC_TYPE_WIFI] = {
			.data0	= TCC_GPB(20),
			.data1	= TCC_GPB(21),
			.data2	= TCC_GPB(22),
			.data3	= TCC_GPB(23),
			.data4	= TCC_MMC_PORT_NULL,
			.data5	= TCC_MMC_PORT_NULL,
			.data6	= TCC_MMC_PORT_NULL,
			.data7	= TCC_MMC_PORT_NULL,
			.cmd	= TCC_GPB(19),
			.clk	= TCC_GPB(28),
			.func	= GPIO_FN(3),
			.width	= TCC_MMC_BUS_WIDTH_4,

			.cd	= TCC_MMC_PORT_NULL,
			.pwr	= TCC_GPD(21),
		},
Example #8
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;
}
Example #9
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);
	}
}
Example #10
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;
}
Example #11
0
/*****************************************************************************
* Function Name : tca_i2c_setgpio(int ch)
* Description: I2C port configuration
* input parameter:
* 		int core; 	// I2C Core
*       int ch;   	// I2C master channel
******************************************************************************/
void tca_i2c_setgpio(int core, int ch)
{
	//PI2CPORTCFG i2c_portcfg = (PI2CPORTCFG)tcc_p2v(HwI2C_PORTCFG_BASE);

	switch (core)
	{
		case 0:
			#if defined(CONFIG_MACH_TCC8920ST)
				#if defined(CONFIG_STB_BOARD_DONGLE)
					//I2C[16] - GPIOE[14][15]
					//i2c_portcfg->PCFG0.bREG.MASTER0 = 16;
					BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x000000FF, 16);
					tcc_gpio_config(TCC_GPE(14), GPIO_FN6|GPIO_OUTPUT|GPIO_LOW);
					tcc_gpio_config(TCC_GPE(15), GPIO_FN6|GPIO_OUTPUT|GPIO_LOW);
				#elif defined(CONFIG_STB_BOARD_HDB892F)
					#if defined(CONFIG_HDB892F_BOARD_YJ8925T)
					#else
						//I2C[16] - GPIOE[14][15]
						//i2c_portcfg->PCFG0.bREG.MASTER0 = 16;
						BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x000000FF, 16);
						tcc_gpio_config(TCC_GPE(14), GPIO_FN6|GPIO_OUTPUT|GPIO_LOW);
						tcc_gpio_config(TCC_GPE(15), GPIO_FN6|GPIO_OUTPUT|GPIO_LOW);
					#endif
				#elif defined(CONFIG_STB_BOARD_ISDBT_MODULE)
					//I2C[22] - GPIOG[2][3]
					//i2c_portcfg->PCFG0.bREG.MASTER0 = 22;
					BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x000000FF, 22);
					tcc_gpio_config(TCC_GPG(2), GPIO_FN4|GPIO_OUTPUT|GPIO_LOW);
					tcc_gpio_config(TCC_GPG(3), GPIO_FN4|GPIO_OUTPUT|GPIO_LOW);
				#elif defined(CONFIG_STB_BOARD_UPC)
				#else
					//I2C[26] - GPIOG[18][19]
					//i2c_portcfg->PCFG0.bREG.MASTER0 = 26;
					BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x000000FF, 26);
					tcc_gpio_config(TCC_GPG(18), GPIO_FN4|GPIO_OUTPUT|GPIO_LOW);
					tcc_gpio_config(TCC_GPG(19), GPIO_FN4|GPIO_OUTPUT|GPIO_LOW);
				#endif
			#elif defined(CONFIG_MACH_M805_892X)
				if (system_rev == 0x2002 || system_rev == 0x2003 || system_rev == 0x2004 || system_rev == 0x2005 || system_rev == 0x2006 || system_rev == 0x2007 || system_rev == 0x2008)
				{
					//I2C[12] - GPIOC[2][3]
					//i2c_portcfg->PCFG0.bREG.MASTER0 = 12;
					BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x000000FF, 12);
					tcc_gpio_config(TCC_GPC(2), GPIO_FN7|GPIO_OUTPUT|GPIO_LOW);
					tcc_gpio_config(TCC_GPC(3), GPIO_FN7|GPIO_OUTPUT|GPIO_LOW);
				}
				else
				{
					#if defined(CONFIG_M805S_8923_0XA)
					//I2C[22] - GPIOG[2][3]
					//i2c_portcfg->PCFG0.bREG.MASTER0 = 22;
					BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x000000FF, 22);
					tcc_gpio_config(TCC_GPG(2), GPIO_FN4|GPIO_OUTPUT|GPIO_LOW);
					tcc_gpio_config(TCC_GPG(3), GPIO_FN4|GPIO_OUTPUT|GPIO_LOW);
					#else
					//I2C[23] - GPIOG[6][7]
					//i2c_portcfg->PCFG0.bREG.MASTER0 = 23;
					BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x000000FF, 23);
					tcc_gpio_config(TCC_GPG(6), GPIO_FN4|GPIO_OUTPUT|GPIO_LOW);
					tcc_gpio_config(TCC_GPG(7), GPIO_FN4|GPIO_OUTPUT|GPIO_LOW);
					#endif
				}
			#else
				if(system_rev == 0x1006)
				{
					//I2C[18] - GPIOF[13][14]
					//((PI2CPORTCFG)HwI2C_PORTCFG_BASE)->PCFG0.bREG.MASTER0 = 18;
					BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x000000FF, 18);
					tcc_gpio_config(TCC_GPF(13), GPIO_FN10|GPIO_OUTPUT|GPIO_LOW);
					tcc_gpio_config(TCC_GPF(14), GPIO_FN10|GPIO_OUTPUT|GPIO_LOW);
				}
				else if(system_rev == 0x1008)
				{
					//I2C[22] - GPIOG[2][3]
					//((PI2CPORTCFG)HwI2C_PORTCFG_BASE)->PCFG0.bREG.MASTER0 = 22;
					BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x000000FF, 22);
					tcc_gpio_config(TCC_GPG(2), GPIO_FN4|GPIO_OUTPUT|GPIO_LOW);
					tcc_gpio_config(TCC_GPG(3), GPIO_FN4|GPIO_OUTPUT|GPIO_LOW);
				}
				else
				{
					//I2C[8] - GPIOB[9][10]
					//i2c_portcfg->PCFG0.bREG.MASTER0 = 8;
					BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x000000FF, 8);
					tcc_gpio_config(TCC_GPB(9), GPIO_FN11|GPIO_OUTPUT|GPIO_LOW);
					tcc_gpio_config(TCC_GPB(10), GPIO_FN11|GPIO_OUTPUT|GPIO_LOW);
				}
			#endif
			break;
		case 1:
			#if defined(CONFIG_MACH_M805_892X)
			if (system_rev == 0x2002 || system_rev == 0x2003 || system_rev == 0x2004 || system_rev == 0x2005 || system_rev == 0x2006 || system_rev == 0x2007 || system_rev == 0x2008)
			{
				//I2C[25] - GPIOG[12][13]
				//i2c_portcfg->PCFG0.bREG.MASTER1 = 25;
				BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x0000FF00, 25<<8);
				tcc_gpio_config(TCC_GPG(12), GPIO_FN4|GPIO_OUTPUT|GPIO_LOW);
				tcc_gpio_config(TCC_GPG(13), GPIO_FN4|GPIO_OUTPUT|GPIO_LOW);
			}
			else
			{
				#if defined(CONFIG_M805S_8923_0XA)
				//I2C[21] - GPIOF[27][28]
				//i2c_portcfg->PCFG0.bREG.MASTER1 = 21;
				BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x0000FF00, 21<<8);
				tcc_gpio_config(TCC_GPF(27), GPIO_FN10|GPIO_OUTPUT|GPIO_LOW);
				tcc_gpio_config(TCC_GPF(28), GPIO_FN10|GPIO_OUTPUT|GPIO_LOW);
				#else
				//I2C[24] - GPIOG[10][11]
				//i2c_portcfg->PCFG0.bREG.MASTER1 = 24;
				BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x0000FF00, 24<<8);
				tcc_gpio_config(TCC_GPG(10), GPIO_FN4|GPIO_OUTPUT|GPIO_LOW);
				tcc_gpio_config(TCC_GPG(11), GPIO_FN4|GPIO_OUTPUT|GPIO_LOW);
				#endif
			}
			#else
			if(system_rev == 0x1005 || system_rev == 0x1007)
			{
				//I2C[21] - GPIOF[27][28]
				//i2c_portcfg->PCFG0.bREG.MASTER1 = 21;
				BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x0000FF00, 21<<8);
				tcc_gpio_config(TCC_GPF(27), GPIO_FN10|GPIO_OUTPUT|GPIO_LOW);
				tcc_gpio_config(TCC_GPF(28), GPIO_FN10|GPIO_OUTPUT|GPIO_LOW);
			}
			else if(system_rev == 0x1006)
			{
				//I2C[28] - GPIO_ADC[2][3]
				//((PI2CPORTCFG)HwI2C_PORTCFG_BASE)->PCFG0.bREG.MASTER1 = 28;
				BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x0000FF00, 28<<8);
				tcc_gpio_config(TCC_GPADC(2), GPIO_FN3|GPIO_OUTPUT|GPIO_LOW);
				tcc_gpio_config(TCC_GPADC(3), GPIO_FN3|GPIO_OUTPUT|GPIO_LOW);
			}
			else if(system_rev == 0x1008)
			{
				//I2C[13] - GPIOC[12][13]
				//((PI2CPORTCFG)HwI2C_PORTCFG_BASE)->PCFG0.bREG.MASTER1 = 13;
				BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x0000FF00, 13<<8);
				tcc_gpio_config(TCC_GPC(12), GPIO_FN7|GPIO_OUTPUT|GPIO_LOW);
				tcc_gpio_config(TCC_GPC(13), GPIO_FN7|GPIO_OUTPUT|GPIO_LOW);
			}
			else
			{
				#if defined(CONFIG_STB_BOARD_HDB892F) && defined(CONFIG_HDB892F_BOARD_YJ8925T)
					//I2C[16] - GPIOE[14][15]
					//i2c_portcfg->PCFG0.bREG.MASTER1 = 16;
					BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x0000FF00, 16<<8);
					tcc_gpio_config(TCC_GPE(14), GPIO_FN6|GPIO_OUTPUT|GPIO_LOW);
					tcc_gpio_config(TCC_GPE(15), GPIO_FN6|GPIO_OUTPUT|GPIO_LOW);
				#elif defined(CONFIG_STB_BOARD_UPC)
				#else
					//I2C[22] - GPIOG[2][3]
					//i2c_portcfg->PCFG0.bREG.MASTER1 = 22;
					BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x0000FF00, 22<<8);
					tcc_gpio_config(TCC_GPG(2), GPIO_FN4|GPIO_OUTPUT|GPIO_LOW);
					tcc_gpio_config(TCC_GPG(3), GPIO_FN4|GPIO_OUTPUT|GPIO_LOW);
				#endif
			}
			#endif
			break;
		case 2:
			#if defined(CONFIG_MACH_M805_892X)
			if (system_rev == 0x2002 || system_rev == 0x2003 || system_rev == 0x2004 || system_rev == 0x2005 || system_rev == 0x2006 || system_rev == 0x2007 || system_rev == 0x2008)
			{
				//I2C[18] - GPIOF[13][14]
				//i2c_portcfg->PCFG0.bREG.MASTER1 = 18;
				BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x00FF0000, 18<<16);
				tcc_gpio_config(TCC_GPF(13), GPIO_FN10|GPIO_OUTPUT|GPIO_LOW);
				tcc_gpio_config(TCC_GPF(14), GPIO_FN10|GPIO_OUTPUT|GPIO_LOW);
			}
			#else
			if(system_rev != 0x1006 && system_rev != 0x1008)
			{
				//I2C[28] - GPIO_ADC[2][3]
				//i2c_portcfg->PCFG0.bREG.MASTER2 = 28;
				BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x00FF0000, 28<<16);
				tcc_gpio_config(TCC_GPADC(2), GPIO_FN3|GPIO_OUTPUT|GPIO_LOW);
				tcc_gpio_config(TCC_GPADC(3), GPIO_FN3|GPIO_OUTPUT|GPIO_LOW);
			}
			#endif
			break;
		case 3:
			//I2C[27] - GPIO_HDMI[2][3]
			//i2c_portcfg->PCFG0.bREG.MASTER3 = 27;
			BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0xFF000000, 27<<24);
			tcc_gpio_config(TCC_GPHDMI(2), GPIO_FN1|GPIO_OUTPUT|GPIO_LOW);
			tcc_gpio_config(TCC_GPHDMI(3), GPIO_FN1|GPIO_OUTPUT|GPIO_LOW);
			//Not used..
			break;
		default:
			break;
	}
}
Example #12
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;
}