예제 #1
0
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;
		}
	}
}
예제 #2
0
//  ************************************************************ //
//  Device Release : 
//  
//  
//  ************************************************************ //
static int gps_gpio_release (struct inode *inode, struct file *filp)  
{  
    gps_k_flag = 0;   
#if defined(CONFIG_MACH_TCC9300)||defined(CONFIG_MACH_TCC8800) || defined(CONFIG_MACH_TCC8920)
    if(machine_is_m801_88() || machine_is_m803()) // GPIOG[4]
    {
        gpio_set_value(TCC_GPG(4), 0);
    }
    else if(machine_is_tcc8800() || machine_is_tcc8920())
    {
        gpio_set_value(TCC_GPEXT1(6), 0);
    }
#elif defined(CONFIG_MACH_TCC8900)
    if(machine_is_tcc8900())
    {
        gpio_set_value(TCC_GPD(25), 0);    
    }
#elif defined(CONFIG_MACH_M805_892X)
    if(machine_is_m805_892x())
    {
    	if (system_rev == 0x2002 || system_rev == 0x2003 || system_rev == 0x2004 || system_rev == 0x2005)
    		gpio_set_value(TCC_GPC(14), 0);
    	else
        	gpio_set_value(TCC_GPC(6), 0);
    }    
#endif
    gps_dbg("tcc92xx : gps_gpio_close\n");
    return 0;  
}  
예제 #3
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;
}
예제 #4
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
}
예제 #6
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
}
예제 #7
0
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
		}
	}
}
예제 #8
0
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
}
예제 #9
0
int tcc_hp_is_valid(void)
{
#if defined(CONFIG_ARCH_TCC88XX)
    if(machine_is_m801_88()) {
        // gpio_get_value is ==> 0: disconnect, 1: connect
        return gpio_get_value(TCC_GPD(10));
    }
#elif defined(CONFIG_ARCH_TCC892X)
	if(machine_is_m805_892x())
	{
		// gpio_get_value is ==> 0: disconnect, 1: connect
		if(system_rev == 0x2002 || system_rev == 0x2003 || system_rev == 0x2004 || system_rev == 0x2005)
			return gpio_get_value(TCC_GPE(16));
		else
			return gpio_get_value(TCC_GPE(5));
	}
#endif

    return 0;
}
예제 #10
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");
}  
예제 #11
0
//  ************************************************************ //
//  Device Open : 
//  when open, yet not ativity UART port
//  GPS device is yet disable status.
//  ************************************************************ //
static int gps_gpio_open (struct inode *inode, struct file *filp)  
{
    gps_k_flag = 0;   
    // Set the Port Configure for the UART5
    // GPIO SETTING
    gps_dbg("gps_gpio_open\n");
#if defined(CONFIG_MACH_TCC9300) || defined(CONFIG_MACH_TCC8800) || defined(CONFIG_MACH_TCC8920)
    if(machine_is_m801_88() || machine_is_m803()) // GPIOG[4]
    {
        gpio_set_value(TCC_GPG(4), 0);
    }
    else if(machine_is_tcc8800() || machine_is_tcc8920())
    {
        gps_dbg("gps_gpio_open -> set_velue");
        gpio_set_value(TCC_GPEXT1(6), 0);
    }
#elif defined(CONFIG_MACH_TCC8900)
    if(machine_is_tcc8900())
    {
        gps_dbg("machine_is_tcc8900 : gps_gpio_open\n\n");
        gpio_set_value(TCC_GPD(25), 0);    
    }
#elif defined(CONFIG_MACH_M805_892X)
    if(machine_is_m805_892x())
    {
		if (system_rev == 0x2002 || system_rev == 0x2003 || system_rev == 0x2004 || system_rev == 0x2005)
			gpio_set_value(TCC_GPE(14), 0);
		else
        	gpio_set_value(TCC_GPC(6), 0);
    }
#else

#endif


    gps_dbg("tcc92xx : gps_gpio_open\n\n");
    return 0;  
}
예제 #12
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;  
}  
예제 #13
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;  
}  
예제 #14
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
	}
}
예제 #15
0
static int __init tcc_init_es8388(void)
{

	int ret;

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

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

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

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

        tcc_soc_card.name = "M801";
    }

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

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

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

		tcc_hp_hw_mute(false);
		tcc_spk_hw_mute(false);

        tcc_soc_card.name = "M805";
	}

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


    tcc_hp_hw_mute(true);
    tcc_spk_hw_mute(true);

    tca_tcc_initport();

    ret = es8388_i2c_register();

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

	platform_set_drvdata(tcc_snd_device, &tcc_soc_card);

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

	return ret;
}