static void tcc_dxb_ctrl_rf_path(unsigned int flag) { if(machine_is_m805_892x()) { tcc_gpio_config(GPIO_RFSW_CTL0, GPIO_FN(0)); gpio_request(GPIO_RFSW_CTL0, NULL); gpio_direction_output(GPIO_RFSW_CTL0, 0); printk("[%s:%d] flag:%d\n", __func__, __LINE__, flag); switch(flag) { case DXB_RF_PATH_UHF: gpio_set_value(GPIO_RFSW_CTL0, 1); tcc_gpio_config(GPIO_RFSW_CTL3, GPIO_FN(0)); gpio_request(GPIO_RFSW_CTL3, NULL); gpio_direction_output(GPIO_RFSW_CTL3, 0); break; case DXB_RF_PATH_VHF: gpio_set_value(GPIO_RFSW_CTL0, 0); tcc_gpio_config(GPIO_RFSW_CTL1, GPIO_FN(0)); gpio_request(GPIO_RFSW_CTL1, NULL); gpio_direction_output(GPIO_RFSW_CTL1, 1); tcc_gpio_config(GPIO_RFSW_CTL2, GPIO_FN(0)); gpio_request(GPIO_RFSW_CTL2, NULL); gpio_direction_output(GPIO_RFSW_CTL2, 0); break; default: break; } } }
// ************************************************************ // // 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 int __init m805_892x_init_tcc_dxb_ctrl(void) { if(!machine_is_m805_892x()) return 0; printk("%s (built %s %s)\n", __func__, __DATE__, __TIME__); platform_device_register(&tcc_dxb_device); return 0; }
static void tcc_dxb_ctrl_power_on(int deviceIdx) { if(machine_is_m805_892x()) { if(g_power_status[deviceIdx] == 1) //already power on return; if(g_power_status[0]==0 && g_power_status[1]==0 && g_power_status[2]==0 && g_power_status[3]==0) { #if defined(CONFIG_REGULATOR) && defined(CONFIG_M805S_8925_0XX) if (vdd_dxb) { printk("regulator_enable !!!\n"); regulator_enable(vdd_dxb); msleep(20); } #endif /* GPIO_EXPAND DXB_ON Power-on */ tcc_gpio_config(GPIO_DXB_PWREN, GPIO_FN(0)); gpio_request(GPIO_DXB_PWREN, NULL); gpio_direction_output(GPIO_DXB_PWREN, 1); } g_power_status[deviceIdx] = 1; //power on status switch(deviceIdx) { case 0: tcc_gpio_config(GPIO_DXB_PWDN, GPIO_FN(0)); tcc_gpio_config(GPIO_DXB0_RST, GPIO_FN(0)); gpio_request(GPIO_DXB_PWDN, NULL); gpio_direction_output(GPIO_DXB_PWDN, 1); gpio_request(GPIO_DXB0_RST, NULL); gpio_direction_output(GPIO_DXB0_RST, 0); msleep(20); gpio_set_value(GPIO_DXB0_RST, 1); break; case 1: tcc_gpio_config(GPIO_DXB2_PWDN, GPIO_FN(0)); tcc_gpio_config(GPIO_DXB2_RST, GPIO_FN(0)); gpio_request(GPIO_DXB2_PWDN, NULL); gpio_direction_output(GPIO_DXB2_PWDN, 1); gpio_request(GPIO_DXB2_RST, NULL); gpio_direction_output(GPIO_DXB2_RST, 0); msleep(20); gpio_set_value(GPIO_DXB2_RST, 1); break; default: break; } } }
void __init m805_892x_init_camera(void) { if (!machine_is_m805_892x()) return; #if defined(CONFIG_VIDEO_TCCXX_CAMERA) #if defined(CONFIG_M805S_8925_0XX) i2c_register_board_info(2, i2c_camera_devices, ARRAY_SIZE(i2c_camera_devices)); #else i2c_register_board_info(0, i2c_camera_devices, ARRAY_SIZE(i2c_camera_devices)); #endif #endif }
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 }
static void tcc_dxb_ctrl_power_off(int deviceIdx) { if(machine_is_m805_892x()) { if(g_power_status[deviceIdx] == 0) //already power off return; g_power_status[deviceIdx] = 0; //power off status switch(deviceIdx) { case 0: tcc_gpio_config(GPIO_DXB_PWDN, GPIO_FN(0));//DXB_PWDN# gpio_request(GPIO_DXB_PWDN, NULL); gpio_direction_output(GPIO_DXB_PWDN, 0); gpio_set_value(GPIO_DXB0_RST, 0); break; case 1: tcc_gpio_config(GPIO_DXB2_PWDN, GPIO_FN(0)); gpio_request(GPIO_DXB2_PWDN, NULL); gpio_direction_output(GPIO_DXB2_PWDN, 0); gpio_set_value(GPIO_DXB2_RST, 0); break; default: break; } if(g_power_status[0]==0 && g_power_status[1]==0 && g_power_status[2]==0 && g_power_status[3]==0) { tcc_gpio_config(GPIO_DXB_PWREN, GPIO_FN(0)); //DXB_PWREN gpio_request(GPIO_DXB_PWREN, NULL); gpio_direction_output(GPIO_DXB_PWREN, 0); #if defined(CONFIG_REGULATOR) && defined(CONFIG_M805S_8925_0XX) if (vdd_dxb) { printk("regulator_disable !!!\n"); msleep(20); regulator_disable(vdd_dxb); } #endif } } }
static void spk_un_mute(void) { #if defined(CONFIG_ARCH_TCC88XX) if(machine_is_m801_88()) gpio_set_value(TCC_GPG(6), 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(18), 1); } else { #if defined(CONFIG_M805S_8923_0XA) gpio_set_value(TCC_GPG(11), 1); #else gpio_set_value(TCC_GPF(27), 1); #endif } } #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; }
// ************************************************************ // // 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; }
// ************************************************************ // // 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 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 __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; }