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; }
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())
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 }
/***************************************************************************** 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; }
void RDA_bt_Power_Off(void) { volatile PGPIO pGPIO = (volatile PGPIO)tcc_p2v(HwGPIO_BASE); if (machine_is_tcc8800()|| machine_is_tcc8920()) { // #elif defined (CONFIG_MACH_TCC9300) //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 */ } else if (machine_is_m801_88() || machine_is_m803()) { gpio_set_value(TCC_GPA(13),0); //msleep(1); } }
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; }
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; }
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; }