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 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; }
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 }
// ************************************************************ // // 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; }
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 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 }
/***************************************************************************** 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 }
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; }
// ************************************************************ // // 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"); }
// ************************************************************ // // 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; }
/* 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);
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) }
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; }
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 } }
// ************************************************************ // // 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; }
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); } }
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; }
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, },
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; }
// ************************************************************ // // 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; }
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 } }
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; }
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; }