static int sensor_flash_usr_cb (struct rk29camera_gpio_res *res,int on)
{
        if(sensor_init_flags == 0){
                rk30_mux_api_set(CONFIG_SENSOR_FALSH_MODE_MUX_0, 0);
                int ret = gpio_request(CONFIG_SENSOR_FALSH_MODE_PIN_0, "camera_flash_mode");
                if (ret != 0) {
                    printk(">>>>gpio request camera_flash_mode faile !!\n");
                }
                
                gpio_direction_output(CONFIG_SENSOR_FALSH_MODE_PIN_0, 0);
                sensor_init_flags = 1 ;
        }

#if defined (CONFIG_LEDS_LM3642) || defined(CONFIG_LEDS_LM2759)
        return leds_flash_torch(on);
#else
        switch (on) {
		case Flash_Off: {
			gpio_set_value(CONFIG_SENSOR_FALSH_EN_PIN_0, 0);
			gpio_set_value(CONFIG_SENSOR_FALSH_MODE_PIN_0, 0);
			break;
		}

		case Flash_On: {
			gpio_set_value(CONFIG_SENSOR_FALSH_EN_PIN_0, 1);
			gpio_set_value(CONFIG_SENSOR_FALSH_MODE_PIN_0, 1);
			break;
		}

		case Flash_Torch: {
			gpio_set_value(CONFIG_SENSOR_FALSH_EN_PIN_0, 1);
			gpio_set_value(CONFIG_SENSOR_FALSH_MODE_PIN_0, 0);
			break;
		}

		default: {
			printk("%s..Flash command(%d) is invalidate \n",__FUNCTION__, on);
			gpio_set_value(CONFIG_SENSOR_FALSH_EN_PIN_0, 0);
			break;
		}
	}
	return 0;
#endif
}
static int rk_fb_io_init(struct rk29_fb_setting_info *fb_setting)
{
	int ret = 0;

        rk30_mux_api_set(LCD_MUX_NAME, LCD_GPIO_MODE);

	ret = gpio_request(LCD_EN, NULL);
	if (ret != 0)
	{
		gpio_free(LCD_EN);
		printk(KERN_ERR "request lcd en pin fail!\n");
		return -1;
	}
	else
	{
		gpio_direction_output(LCD_EN, LCD_EN_VALUE); //disable
	}
	return 0;
}
static int rk29_backlight_io_deinit(void)
{
	int ret = 0;
#ifdef  LCD_DISP_ON_PIN
	gpio_set_value(BL_EN_PIN, !BL_EN_VALUE);
	gpio_free(BL_EN_PIN);
#endif
	rk30_mux_api_set(PWM_MUX_NAME, PWM_MUX_MODE_GPIO);

	#if defined(V86_VERSION_1_0) || defined(V86_VERSION_1_1)
	#if defined(CONFIG_MFD_TPS65910)	
	if(g_pmic_type == PMIC_TYPE_TPS65910)
	{
		gpio_direction_output(PWM_GPIO, GPIO_HIGH);
	}
	#endif
	#endif
	
	return ret;
}
Пример #4
0
void usb20otg_hw_init(void)
{
#ifndef CONFIG_USB20_HOST
    // close USB 2.0 HOST phy and clock
    unsigned int * otg_phy_con1 = (unsigned int*)(USBGRF_UOC1_CON5);
    *otg_phy_con1 = 0x1D5 |(0x1ff<<16);   // enter suspend.
#endif
    // usb phy config init
    *(unsigned int *)(USBGRF_UOC0_CON0) = 0xe7e7a350;

    // other hardware init
#ifdef CONFIG_RK_CONFIG
    otg_drv_init(0);
#else
    #if defined(CONFIG_MACH_RK2926_V86)
    #else
    rk30_mux_api_set(GPIO3C1_OTG_DRVVBUS_NAME, GPIO3C_OTG_DRVVBUS);  
    #endif  
#endif
}
Пример #5
0
static int rk610_power_on_init(void)
{
	int ret;
	if(RK610_RST_PIN != INVALID_GPIO)
	{
		rk30_mux_api_set(RK610_RST_PIN_MUX_NAME,RK610_RST_PIN_MUX_MODE);
		ret = gpio_request(RK610_RST_PIN, "rk610 reset");
		if (ret)
		{
			printk(KERN_ERR "rk610_control_probe request gpio fail\n");
		}
		else 
		{
			gpio_direction_output(RK610_RST_PIN, GPIO_HIGH);
			msleep(100);
			gpio_direction_output(RK610_RST_PIN, GPIO_LOW);
			msleep(100);
	    		gpio_set_value(RK610_RST_PIN, GPIO_HIGH);
		}
	}

	return 0;
	
}
Пример #6
0
static int rk29_sdmmc1_cfg_gpio(void)
{
#if defined(CONFIG_SDMMC_RK29_OLD)
	rk30_mux_api_set(GPIO3C0_SMMC1CMD_NAME, GPIO3C_SMMC1_CMD);
	rk30_mux_api_set(GPIO3C5_SDMMC1CLKOUT_NAME, GPIO3C_SDMMC1_CLKOUT);
	rk30_mux_api_set(GPIO3C1_SDMMC1DATA0_NAME, GPIO3C_SDMMC1_DATA0);
	rk30_mux_api_set(GPIO3C2_SDMMC1DATA1_NAME, GPIO3C_SDMMC1_DATA1);
	rk30_mux_api_set(GPIO3C3_SDMMC1DATA2_NAME, GPIO3C_SDMMC1_DATA2);
	rk30_mux_api_set(GPIO3C4_SDMMC1DATA3_NAME, GPIO3C_SDMMC1_DATA3);
	//rk30_mux_api_set(GPIO3C6_SDMMC1DETECTN_NAME, GPIO3C_SDMMC1_DETECT_N);

#else

#if defined(CONFIG_SDMMC1_RK29_WRITE_PROTECT)
	gpio_request(SDMMC1_WRITE_PROTECT_PIN, "sdio-wp");
	gpio_direction_input(SDMMC1_WRITE_PROTECT_PIN);
#endif

#endif

	return 0;
}
//static void rk29_sdmmc_gpio_open(int device_id, int on)
void rk29_sdmmc_gpio_open(int device_id, int on)
{
    switch(device_id)
    {
        case 0://mmc0
        {
            #ifdef CONFIG_SDMMC0_RK29
            if(on)
            {
                gpio_direction_output(rksdmmc0_gpio_init.clk_gpio.io, GPIO_HIGH);//set mmc0-clk to high
                gpio_direction_output(rksdmmc0_gpio_init.cmd_gpio.io, GPIO_HIGH);// set mmc0-cmd to high.
                gpio_direction_output(rksdmmc0_gpio_init.data0_gpio.io,GPIO_HIGH);//set mmc0-data0 to high.
                gpio_direction_output(rksdmmc0_gpio_init.data1_gpio.io,GPIO_HIGH);//set mmc0-data1 to high.
                gpio_direction_output(rksdmmc0_gpio_init.data2_gpio.io,GPIO_HIGH);//set mmc0-data2 to high.
                gpio_direction_output(rksdmmc0_gpio_init.data3_gpio.io,GPIO_HIGH);//set mmc0-data3 to high.

                mdelay(30);
            }
            else
            {
                #if !(!!SDMMC_USE_NEW_IOMUX_API)
                rk30_mux_api_set(rksdmmc0_gpio_init.clk_gpio.iomux.name, rksdmmc0_gpio_init.clk_gpio.iomux.fgpio);
                #endif
                gpio_request(rksdmmc0_gpio_init.clk_gpio.io, "mmc0-clk");
                gpio_direction_output(rksdmmc0_gpio_init.clk_gpio.io,GPIO_LOW);//set mmc0-clk to low.

                #if !(!!SDMMC_USE_NEW_IOMUX_API)
                rk30_mux_api_set(rksdmmc0_gpio_init.cmd_gpio.iomux.name, rksdmmc0_gpio_init.cmd_gpio.iomux.fgpio);
                #endif
                gpio_request(rksdmmc0_gpio_init.cmd_gpio.io, "mmc0-cmd");
                gpio_direction_output(rksdmmc0_gpio_init.cmd_gpio.io,GPIO_LOW);//set mmc0-cmd to low.

                #if !(!!SDMMC_USE_NEW_IOMUX_API)
                rk30_mux_api_set(rksdmmc0_gpio_init.data0_gpio.iomux.name, rksdmmc0_gpio_init.data0_gpio.iomux.fgpio);
                #endif
                gpio_request(rksdmmc0_gpio_init.data0_gpio.io, "mmc0-data0");
                gpio_direction_output(rksdmmc0_gpio_init.data0_gpio.io,GPIO_LOW);//set mmc0-data0 to low.

                #if !(!!SDMMC_USE_NEW_IOMUX_API)
                rk30_mux_api_set(rksdmmc0_gpio_init.data1_gpio.iomux.name, rksdmmc0_gpio_init.data1_gpio.iomux.fgpio);
                #endif
                gpio_request(rksdmmc0_gpio_init.data1_gpio.io, "mmc0-data1");
                gpio_direction_output(rksdmmc0_gpio_init.data1_gpio.io,GPIO_LOW);//set mmc0-data1 to low.

                #if !(!!SDMMC_USE_NEW_IOMUX_API)
                rk30_mux_api_set(rksdmmc0_gpio_init.data2_gpio.iomux.name, rksdmmc0_gpio_init.data2_gpio.iomux.fgpio);
                #endif
                gpio_request(rksdmmc0_gpio_init.data2_gpio.io, "mmc0-data2");
                gpio_direction_output(rksdmmc0_gpio_init.data2_gpio.io,GPIO_LOW);//set mmc0-data2 to low.

                #if !(!!SDMMC_USE_NEW_IOMUX_API)
                rk30_mux_api_set(rksdmmc0_gpio_init.data3_gpio.iomux.name, rksdmmc0_gpio_init.data3_gpio.iomux.fgpio);
                #endif
                gpio_request(rksdmmc0_gpio_init.data3_gpio.io, "mmc0-data3");
                gpio_direction_output(rksdmmc0_gpio_init.data3_gpio.io,GPIO_LOW);//set mmc0-data3 to low.

                mdelay(30);
            }
            #endif
        }
        break;
        
        case 1://mmc1
        {
            #ifdef CONFIG_SDMMC1_RK29
            if(on)
            {
                gpio_direction_output(rksdmmc1_gpio_init.clk_gpio.io,GPIO_HIGH);//set mmc1-clk to high
                gpio_direction_output(rksdmmc1_gpio_init.cmd_gpio.io,GPIO_HIGH);//set mmc1-cmd to high.
                gpio_direction_output(rksdmmc1_gpio_init.data0_gpio.io,GPIO_HIGH);//set mmc1-data0 to high.
                gpio_direction_output(rksdmmc1_gpio_init.data1_gpio.io,GPIO_HIGH);//set mmc1-data1 to high.
                gpio_direction_output(rksdmmc1_gpio_init.data2_gpio.io,GPIO_HIGH);//set mmc1-data2 to high.
                gpio_direction_output(rksdmmc1_gpio_init.data3_gpio.io,GPIO_HIGH);//set mmc1-data3 to high.
                mdelay(100);
            }
            else
            {
                #if !(!!SDMMC_USE_NEW_IOMUX_API)
                rk30_mux_api_set(rksdmmc1_gpio_init.clk_gpio.iomux.name, rksdmmc1_gpio_init.clk_gpio.iomux.fgpio);
                #endif
                gpio_request(rksdmmc1_gpio_init.clk_gpio.io, "mmc1-clk");
                gpio_direction_output(rksdmmc1_gpio_init.clk_gpio.io,GPIO_LOW);//set mmc1-clk to low.

                #if !(!!SDMMC_USE_NEW_IOMUX_API)
                rk30_mux_api_set(rksdmmc1_gpio_init.cmd_gpio.iomux.name, rksdmmc1_gpio_init.cmd_gpio.iomux.fgpio);
                #endif
                gpio_request(rksdmmc1_gpio_init.cmd_gpio.io, "mmc1-cmd");
                gpio_direction_output(rksdmmc1_gpio_init.cmd_gpio.io,GPIO_LOW);//set mmc1-cmd to low.

                #if !(!!SDMMC_USE_NEW_IOMUX_API)
                rk30_mux_api_set(rksdmmc1_gpio_init.data0_gpio.iomux.name, rksdmmc1_gpio_init.data0_gpio.iomux.fgpio);
                #endif
                gpio_request(rksdmmc1_gpio_init.data0_gpio.io, "mmc1-data0");
                gpio_direction_output(rksdmmc1_gpio_init.data0_gpio.io,GPIO_LOW);//set mmc1-data0 to low.
                
            #if defined(CONFIG_WIFI_COMBO_MODULE_CONTROL_FUNC) || defined(CONFIG_MT5931) || defined(CONFIG_MT5931_MT6622)
                #if !(!!SDMMC_USE_NEW_IOMUX_API)
                rk29_mux_api_set(rksdmmc1_gpio_init.data1_gpio.iomux.name, rksdmmc1_gpio_init.data1_gpio.iomux.fgpio);
                #endif
                gpio_request(rksdmmc1_gpio_init.data1_gpio.io, "mmc1-data1");
                gpio_direction_output(rksdmmc1_gpio_init.data1_gpio.io,GPIO_LOW);//set mmc1-data1 to low.

                #if !(!!SDMMC_USE_NEW_IOMUX_API)
                rk29_mux_api_set(rksdmmc1_gpio_init.data2_gpio.iomux.name, rksdmmc1_gpio_init.data2_gpio.iomux.fgpio);
                #endif
                gpio_request(rksdmmc1_gpio_init.data2_gpio.io, "mmc1-data2");
                gpio_direction_output(rksdmmc1_gpio_init.data2_gpio.io,GPIO_LOW);//set mmc1-data2 to low.

                #if !(!!SDMMC_USE_NEW_IOMUX_API)
                rk29_mux_api_set(rksdmmc1_gpio_init.data3_gpio.iomux.name, rksdmmc1_gpio_init.data3_gpio.iomux.fgpio);
                #endif
                gpio_request(rksdmmc1_gpio_init.data3_gpio.io, "mmc1-data3");
                gpio_direction_output(rksdmmc1_gpio_init.data3_gpio.io,GPIO_LOW);//set mmc1-data3 to low.
           #endif
                mdelay(100);
            }
            #endif
        }
        break; 
        
        case 2: //mmc2
        break;
        
        default:
        break;
    }
}
Пример #8
0
static int __init rk3066b_iomux_init(void)
{

#if defined(CONFIG_UART0_RK29) || (CONFIG_RK_DEBUG_UART == 0)
        rk30_mux_api_set(GPIO1A1_UART0SOUT_NAME, GPIO1A_UART0SOUT);
        rk30_mux_api_set(GPIO1A0_UART0SIN_NAME, GPIO1A_UART0SIN);
#ifdef CONFIG_UART0_CTS_RTS_RK29
        rk30_mux_api_set(GPIO1A3_UART0RTSN_NAME, GPIO1A_UART0RTSN);
        rk30_mux_api_set(GPIO1A2_UART0CTSN_NAME, GPIO1A_UART0CTSN);
#endif
#endif
#if defined(CONFIG_UART1_RK29) || (CONFIG_RK_DEBUG_UART == 1)
        //UART1 OR SPIM0
	rk30_mux_api_set(GPIO1A5_UART1SOUT_SPI0TXD_NAME, GPIO1A_UART1SOUT);
	rk30_mux_api_set(GPIO1A4_UART1SIN_SPI0RXD_NAME, GPIO1A_UART1SIN);
#ifdef CONFIG_UART1_CTS_RTS_RK29
	rk30_mux_api_set(GPIO1A7_UART1RTSN_SPI0CSN0_NAME, GPIO1A_UART1RTSN);
	rk30_mux_api_set(GPIO1A6_UART1CTSN_SPI0CLK_NAME, GPIO1A_UART1CTSN);
#endif
#endif

#if defined(CONFIG_UART2_RK29) || (CONFIG_RK_DEBUG_UART == 2)
	rk30_mux_api_set(GPIO1B1_UART2SOUT_JTAGTDO_NAME, GPIO1B_UART2SOUT);
	rk30_mux_api_set(GPIO1B0_UART2SIN_JTAGTDI_NAME, GPIO1B_UART2SIN);
#endif
#if defined(CONFIG_UART3_RK29) || (CONFIG_RK_DEBUG_UART == 3)
	rk30_mux_api_set(GPIO1B3_UART3SOUT_GPSSIG_NAME, GPIO1B_UART3SOUT);
	rk30_mux_api_set(GPIO1B2_UART3SIN_GPSMAG_NAME, GPIO1B_UART3SIN);
#ifdef CONFIG_UART3_CTS_RTS_RK29
	rk30_mux_api_set(GPIO1B5_UART3RTSN_NAME, GPIO1B_UART3RTSN);
	rk30_mux_api_set(GPIO1B4_UART3CTSN_GPSRFCLK_NAME, GPIO1B_UART3CTSN);
#endif
#endif
#ifdef CONFIG_SPIM0_RK29
        //UART1 OR SPIM0
	rk30_mux_api_set(GPIO1A6_UART1CTSN_SPI0CLK_NAME, GPIO1A_SPI0CLK);
	rk30_mux_api_set(GPIO1A7_UART1RTSN_SPI0CSN0_NAME, GPIO1A_SPI0CSN0);
	rk30_mux_api_set(GPIO1A5_UART1SOUT_SPI0TXD_NAME, GPIO1A_SPI0TXD);
	rk30_mux_api_set(GPIO1A4_UART1SIN_SPI0RXD_NAME, GPIO1A_SPI0RXD);
#endif
#ifdef CONFIG_SPIM1_RK29
	//rk30_mux_api_set(GPIO1B6_SPDIFTX_SPI1CSN1_NAME, GPIO1B_SPI1CSN1);
	rk30_mux_api_set(GPIO0D4_SPI1RXD_NAME, GPIO0D_SPI1RXD);
	rk30_mux_api_set(GPIO0D5_SPI1TXD_NAME, GPIO0D_SPI1TXD);
	rk30_mux_api_set(GPIO0D7_SPI1CSN0_NAME, GPIO0D_SPI1CSN0);
	rk30_mux_api_set(GPIO0D6_SPI1CLK_NAME, GPIO0D_SPI1CLK);
#endif

#ifdef CONFIG_I2C0_RK30
	rk30_mux_api_set(GPIO1D1_I2C0SCL_NAME, GPIO1D_I2C0SCL);	
	rk30_mux_api_set(GPIO1D0_I2C0SDA_NAME, GPIO1D_I2C0SDA);
#endif

#ifdef CONFIG_I2C1_RK30
	rk30_mux_api_set(GPIO1D3_I2C1SCL_NAME, GPIO1D_I2C1SCL);
	rk30_mux_api_set(GPIO1D2_I2C1SDA_NAME, GPIO1D_I2C1SDA);
#endif

#ifdef CONFIG_I2C2_RK30
	rk30_mux_api_set(GPIO1D5_I2C2SCL_NAME, GPIO1D_I2C2SCL);
	rk30_mux_api_set(GPIO1D4_I2C2SDA_NAME, GPIO1D_I2C2SDA);
#endif

#ifdef CONFIG_I2C3_RK30
	rk30_mux_api_set(GPIO3B7_CIFDATA11_I2C3SCL_NAME, GPIO3B_I2C3SCL);
	rk30_mux_api_set(GPIO3B6_CIFDATA10_I2C3SDA_NAME, GPIO3B_I2C3SDA);
#endif

#ifdef CONFIG_I2C4_RK30
	rk30_mux_api_set(GPIO1D7_I2C4SCL_NAME, GPIO1D_I2C4SCL);
	rk30_mux_api_set(GPIO1D6_I2C4SDA_NAME, GPIO1D_I2C4SDA);
#endif

#ifdef CONFIG_RK30_VMAC
	rk30_mux_api_set(GPIO3C5_SDMMC1CLKOUT_RMIICLKOUT_RMIICLKIN_NAME, GPIO3C_RMIICLKOUT);
	rk30_mux_api_set(GPIO3C0_SDMMC1CMD_RMIITXEN_NAME, GPIO3C_RMIITXEN);
	rk30_mux_api_set(GPIO3C1_SDMMC1DATA0_RMIITXD1_NAME, GPIO3C_RMIITXD1);
	rk30_mux_api_set(GPIO3C2_SDMMC1DATA1_RMIITXD0_NAME, GPIO3C_RMIITXD0);
	rk30_mux_api_set(GPIO3C6_SDMMC1DETECTN_RMIIRXERR_NAME, GPIO3C_RMIIRXERR);
	rk30_mux_api_set(GPIO3C7_SDMMC1WRITEPRT_RMIICRS_NAME, GPIO3C_RMIICRS);
	rk30_mux_api_set(GPIO3C4_SDMMC1DATA3_RMIIRXD1_NAME, GPIO3C_RMIIRXD1);
	rk30_mux_api_set(GPIO3C3_SDMMC1DATA2_RMIIRXD0_NAME, GPIO3C_RMIIRXD0);

	rk30_mux_api_set(GPIO3D1_SDMMC1BACKENDPWR_MIIMDCLK_NAME, GPIO3D_MIIMDCLK);
	rk30_mux_api_set(GPIO3D0_SDMMC1PWREN_MIIMD_NAME, GPIO3D_MIIMD);
#endif

	return 0;
}
Пример #9
0
int ssd2828_gpio_init(void *data) {
	int ret = 0;
	struct reset_t *reset = &ssd2828->reset;
	struct power_t *vdd = &ssd2828->vddio;
	struct spi_t *spi = &ssd2828->spi;
	
	if(reset->reset_pin > INVALID_GPIO) {
		ret = gpio_request(reset->reset_pin, "ssd2828_reset");
		if (ret != 0) {
			//gpio_free(reset->reset_pin);
			printk("%s: request ssd2828_RST_PIN error\n", __func__);
		} else {
			if(reset->mux_name)
				rk30_mux_api_set(reset->mux_name, 0);
			gpio_direction_output(reset->reset_pin, reset->effect_value);
		}
	}
	
	if(vdd->enable_pin > INVALID_GPIO) {
		ret = gpio_request(vdd->enable_pin, "ssd2828_vddio");
		if (ret != 0) {
			//gpio_free(vdd->enable_pin);
			printk("%s: request ssd2828_vddio_PIN error\n", __func__);
		} else {
			if(vdd->mux_name)
				rk30_mux_api_set(vdd->mux_name, 0);	
			gpio_direction_output(vdd->enable_pin, !vdd->effect_value);	
		}
	}
	
	vdd = &ssd2828->vdd_mipi;
	if(vdd->enable_pin > INVALID_GPIO) {
		ret = gpio_request(vdd->enable_pin, "ssd2828_vdd_mipi");
		if (ret != 0) {
			//gpio_free(vdd->enable_pin);
			printk("%s: request ssd2828_vdd_mipi_PIN error\n", __func__);
		} else {
			if(vdd->mux_name)
				rk30_mux_api_set(vdd->mux_name, 0);	
			gpio_direction_output(vdd->enable_pin, !vdd->effect_value);	
		}
	}
	
	if(spi->cs > INVALID_GPIO) {
		ret = gpio_request(spi->cs, "ssd2828_spi_cs");
		if (ret != 0) {
			//gpio_free(spi->cs);
			printk("%s: request ssd2828_spi->cs_PIN error\n", __func__);
		} else {
			if(spi->cs_mux_name)
				rk30_mux_api_set(spi->cs_mux_name, 0);	
			gpio_direction_output(spi->cs, GPIO_HIGH);	
		}
	}
	if(spi->sck > INVALID_GPIO) {
		ret = gpio_request(spi->sck, "ssd2828_spi_sck");
		if (ret != 0) {
			//gpio_free(spi->sck);
			printk("%s: request ssd2828_spi->sck_PIN error\n", __func__);
		} else {
			if(spi->sck_mux_name)
				rk30_mux_api_set(spi->sck_mux_name, 0);	
			gpio_direction_output(spi->sck, GPIO_HIGH);	
		}
	}	
	if(spi->mosi > INVALID_GPIO) {
		ret = gpio_request(spi->mosi, "ssd2828_spi_mosi");
		if (ret != 0) {
			//gpio_free(spi->mosi);
			printk("%s: request ssd2828_spi->mosi_PIN error\n", __func__);
		} else {
			if(spi->mosi_mux_name)
				rk30_mux_api_set(spi->mosi_mux_name, 0);	
			gpio_direction_output(spi->mosi, GPIO_HIGH);	
		}
	}	
	if(spi->miso > INVALID_GPIO) {
		ret = gpio_request(spi->miso, "ssd2828_spi_miso");
		if (ret != 0) {
			//gpio_free(spi->miso);
			printk("%s: request ssd2828_spi->miso_PIN error\n", __func__);
		} else {
			if(spi->miso_mux_name)
				rk30_mux_api_set(spi->miso_mux_name, 0);	
			gpio_direction_input(spi->miso);	
		}
	}	
	
	return 0;

}
Пример #10
0
static int rk29sdk_wifi_combo_module_gpio_init(void)
{
#if defined(CONFIG_MTK_COMBO_MT66XX)
    mtk_combo_init();
    platform_device_register(&mtk_wmt_dev);
    platform_device_register(&mtk_sdio_eint_dev);
#else  
  //VDDIO
    #ifdef RK30SDK_WIFI_GPIO_VCCIO_WL
        #ifdef RK30SDK_WIFI_GPIO_VCCIO_WL_PIN_NAME
        rk30_mux_api_set(rk_platform_wifi_gpio.vddio.iomux.name, rk_platform_wifi_gpio.vddio.iomux.fgpio);
        #endif
        gpio_request(rk_platform_wifi_gpio.vddio.io, "combo-VDDIO");	
	    gpio_direction_output(rk_platform_wifi_gpio.vddio.io, !(rk_platform_wifi_gpio.power_n.enable));
    #endif
    
    //BGF_INT_B
    #ifdef RK30SDK_WIFI_GPIO_BGF_INT_B_PIN_NAME
    rk30_mux_api_set(rk_platform_wifi_gpio.bgf_int_b.iomux.name, rk_platform_wifi_gpio.bgf_int_b.iomux.fgpio);
    #endif
    gpio_request(rk_platform_wifi_gpio.bgf_int_b.io, "combo-BGFINT");
    gpio_pull_updown(rk_platform_wifi_gpio.bgf_int_b.io, GPIOPullUp);
    gpio_direction_input(rk_platform_wifi_gpio.bgf_int_b.io);
    
    //WIFI_INT_B
    #ifdef RK30SDK_WIFI_GPIO_WIFI_INT_B_PIN_NAME
    rk30_mux_api_set(rk_platform_wifi_gpio.bgf_int_b.iomux.name, rk_platform_wifi_gpio.bgf_int_b.iomux.fgpio);
    #endif
    gpio_request(rk_platform_wifi_gpio.wifi_int_b.io, "combo-WIFIINT");
    gpio_pull_updown(rk_platform_wifi_gpio.wifi_int_b.io, GPIOPullUp);
    gpio_direction_input(rk_platform_wifi_gpio.wifi_int_b.io); 
    
    //reset
    #ifdef RK30SDK_WIFI_GPIO_RESET_PIN_NAME
    rk30_mux_api_set(rk_platform_wifi_gpio.reset_n.iomux.name, rk_platform_wifi_gpio.reset_n.iomux.fgpio);
    #endif
    gpio_request(rk_platform_wifi_gpio.reset_n.io, "combo-RST");
    gpio_direction_output(rk_platform_wifi_gpio.reset_n.io, !(rk_platform_wifi_gpio.reset_n.enable));

    //power
    #ifdef RK30SDK_WIFI_GPIO_POWER_PIN_NAME
    rk30_mux_api_set(rk_platform_wifi_gpio.power_n.iomux.name, rk_platform_wifi_gpio.power_n.iomux.fgpio);
    #endif
    gpio_request(rk_platform_wifi_gpio.power_n.io, "combo-PMUEN");	
	gpio_direction_output(rk_platform_wifi_gpio.power_n.io, !(rk_platform_wifi_gpio.power_n.enable));

	#if defined(COMBO_MODULE_MT6620_CDT) && COMBO_MODULE_MT6620_CDT
	//ANTSEL2
	#ifdef RK30SDK_WIFI_GPIO_ANTSEL2
	    #ifdef RK30SDK_WIFI_GPIO_ANTSEL2_PIN_NAME
        rk30_mux_api_set(rk_platform_wifi_gpio.ANTSEL2.iomux.name, rk_platform_wifi_gpio.ANTSEL2.iomux.fgpio);
        #endif
    gpio_request(rk_platform_wifi_gpio.ANTSEL2.io, "combo-ANTSEL2");
    gpio_direction_output(rk_platform_wifi_gpio.ANTSEL2.io, rk_platform_wifi_gpio.ANTSEL2.enable);
    #endif

    //ANTSEL3
    #ifdef RK30SDK_WIFI_GPIO_ANTSEL3
        #ifdef RK30SDK_WIFI_GPIO_ANTSEL3_PIN_NAME
        rk30_mux_api_set(rk_platform_wifi_gpio.ANTSEL3.iomux.name, rk_platform_wifi_gpio.ANTSEL3.iomux.fgpio);
        #endif
    gpio_request(rk_platform_wifi_gpio.ANTSEL3.io, "combo-ANTSEL3");
    gpio_direction_output(rk_platform_wifi_gpio.ANTSEL3.io, !(rk_platform_wifi_gpio.ANTSEL3.enable));
    #endif

    //GPS_LAN
    #ifdef RK30SDK_WIFI_GPIO_GPS_LAN
        #ifdef RK30SDK_WIFI_GPIO_GPS_LAN_PIN_NAME
        rk30_mux_api_set(rk_platform_wifi_gpio.GPS_LAN.iomux.name, rk_platform_wifi_gpio.GPS_LAN.iomux.fgpio);
        #endif
    gpio_request(rk_platform_wifi_gpio.GPS_LAN.io, "combo-GPSLAN");
    gpio_direction_output(rk_platform_wifi_gpio.GPS_LAN.io, rk_platform_wifi_gpio.GPS_LAN.enable);
	#endif

	#endif//#if COMBO_MODULE_MT6620_CDT ---#endif 

#endif
    return 0;
}
Пример #11
0
static int __devinit rk29_spdif_probe (struct platform_device *pdev)
{
    int ret = 0;
    struct resource *res = NULL,*dma=NULL;
    void __iomem *reg_vir_base;
    struct rk29xx_spdif *dws = &rk29_spdif;
    struct RK29_SPDIF_REG *reg = &spdif_reg;
    struct clk *general_pll;
    unsigned long spdif_mclk;
    int	   irq; 
    int temp;
    int i;

    
    DBG("enter rk29_spdif_probe\n");
#if defined  (CONFIG_ARCH_RK29)
    rk29_mux_api_set(GPIO4A7_SPDIFTX_NAME, GPIO4L_SPDIF_TX);
#endif

#if defined (CONFIG_ARCH_RK30)    
    rk30_mux_api_set(GPIO1B2_SPDIFTX_NAME, GPIO1B_SPDIF_TX);
#endif

    /* get spdif clk */
   dws->spdif_clk= clk_get(&pdev->dev, "spdif");

	if (IS_ERR(dws->spdif_clk)) {
		err("failed to get spdif clk\n");
		ret = PTR_ERR(dws->spdif_clk);
		goto err0;
	}
	clk_enable(dws->spdif_clk);
	clk_set_rate(dws->spdif_clk, 11289600);
	
#if defined (CONFIG_ARCH_RK30)	
	dws->spdif_hclk= clk_get(&pdev->dev, "hclk_spdif");
	if (IS_ERR(dws->spdif_hclk)) {
		err("failed to get spdif clk\n");
		ret = PTR_ERR(dws->spdif_hclk);
		goto err1;
	}
	clk_enable(dws->spdif_hclk);
	clk_set_rate(dws->spdif_hclk, 11289600);
#endif  

     /* get virtual basic address of spdif register */
    res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "spdif_base");
    if (res == NULL){
        dev_err(&pdev->dev, "failed to get memory registers\n");
        ret = -ENOENT;
		goto err1;
    }
      
    if (!request_mem_region(res->start, resource_size(res),"rk29_spdif")) {
        err("Unable to request register region\n");
        return -EBUSY;
    }
    reg_vir_base = ioremap(res->start, res->end - res->start + 1);

    if (!reg_vir_base){
        release_mem_region(res->start, res->end - res->start + 1);
        ret = -EBUSY;
        goto err2;
    }

    reg->cfgr  = reg_vir_base;
    reg->sdblr = reg_vir_base + 0x4;
    reg->dmacr = reg_vir_base + 0x8;
    reg->intcr = reg_vir_base + 0xc;
    reg->intsr = reg_vir_base + 0x10;
    reg->xfer  = reg_vir_base + 0x18;
    reg->smpdr = reg_vir_base + 0x20;
    reg->vldfr = reg_vir_base + 0x60;
    reg->usrdr = reg_vir_base + 0x90;
    reg->chnsr = reg_vir_base + 0xC0;

    dma = platform_get_resource_byname(pdev, IORESOURCE_DMA, "spdif_dma");
    if (dma == NULL){
        err("rk29 spdif failed to get dma channel\n");
        ret = -ENOENT;
        goto err3;
    }

    dws->dma_ch   = dma->start;
    dws->dma_size = 4;
    dws->client   = &rk29_spdif_dma_client;
    dws->dma_addr = res->start+0x20;

    writel(SPDIF_TRANFER_DISABLE,reg->xfer);
    
    writel(SPDIF_RESET,reg->cfgr);
    
    mdelay(1);
    
    temp =      SPDIF_VALID_DATA_WIDTH_16BIT    //valid data width, 0:16bit,1:20bit,2:24bit
                |SPDIF_HALFWORD_TX_ENABLE       //halfword word transform enable, 0:disable
                |SPDIF_JUSTIFIED_RIGHT          //apb valid audio data justified,0:right
                |SPDIF_VALID_FLAG_DISABLE        //valid flag enable
                |SPDIF_USER_DATA_DISABLE         //user data enable
                |SPDIF_CHANNEL_STATUS_DISABLE   //channel status enable
                |SPDIF_NOT_RESET                //write 1 to reset mclk domain logic
                |(0x01<<16)                     //Fmclk/Fsdo
            ;

    writel(temp,reg->cfgr);
    
    temp = SPDIF_DMA_CTRL_DISABLE|0x10;         //disable spdif dma
    writel(temp, reg->dmacr);
    
    writel(SPDIF_INT_CTRL_DISABLE, reg->intcr);//disable spdif int
#if 0   
    chnsr_byte1= (0x0)|(0x0<<1)|(0x0<<2)|(0x0<<3)|(0x00<<6);//consumer|pcm|copyright?|pre-emphasis|(0x00<<6);
    chnsr_byte2= (0x0);//category code general mode??
    chnsr_byte3= (0x0)|(0x0<<4)|(0x0<<6);//
    chnsr_byte4= (48);//khz;clock acurracy 
    chnsr_byte5= (0x1)|(0x001<<1);//24 bit;  

    writel((chnsr_byte2<<24)|(chnsr_byte1<<16)|(chnsr_byte2<<8)|(chnsr_byte1),reg->chnsr);
    writel((chnsr_byte4<<24)|(chnsr_byte3<<16)|(chnsr_byte4<<8)|(chnsr_byte3),reg->chnsr+4);
    writel((chnsr_byte5<<16)|(chnsr_byte5),reg->chnsr+8);
    writel(0,reg->chnsr+0xc);
    writel(0,reg->chnsr+0x10);
    writel(0,reg->chnsr+0x14);
    writel(0,reg->chnsr+0x18);
    writel(0,reg->chnsr+0x1C);
    writel(0,reg->chnsr+0x20);
    writel(0,reg->chnsr+0x24);
    writel(0,reg->chnsr+0x28);
    writel(0,reg->chnsr+0x2C);
#endif   
    writel(SPDIF_TRANFER_DISABLE,reg->xfer);// modify SPDIF_XFER to enable SPDIF
    rk29_spdif_ctrl(0, 1);
    DBG("rk29_spdif_probe ok!!\n");
    
    return 0;
err3:
err2:
	 // clk_disable(dws->spdif_hclk);
err1:
    clk_disable(dws->spdif_clk);
err0:   
    
    return ret;
}
Пример #12
0
int __init wisky_boot_charge_main(void)
{
	#if 0	//for test ...Lee
	printk("here... ...wulala... wisky_boot_charge_main\n");
	wisky_charger_logo_display(LOGO_BLANK);
	wisky_charger_logo_display(LOGO_BOOTUP);
	return 0;
	#endif
	int charge_full_cnt = 0;
	int full_display_times = 1;//充电满后提示次数	

	boot_charge_mode = 0;
	if(1 == usb_otg_op_state){
		//do not enter charge mode when USB OTG insert
		return 0;
	}

	WPRINTK("--------dc_adaptor_status=%d\n", dc_adaptor_status);
	//WPRINTK("--------battery_adc_value=%d\n", battery_adc_value);
	pr_info("--------battery_capacity=%d\n", battery_capacity);
	
	if(dc_adaptor_status == 0){
		//no DC adaptor insert, do not display charge
		//#if defined(WISKY_BATTERY_OZ8806)
		//电量低于阀值时显示低电logo
		if(battery_capacity < BATT_LEVEL_POOR){
		//#else
		//电量低于阀值时显示低电logo
		//if((battery_adc_value < BAT_DISCHARGE_ADC_MIN) || (battery_adc_value -BATTERY_ADC_ADJUST < BAT_DISCHARGE_ADC_MIN)){
		//#endif
			//clear lcd before show charge logo
			wisky_charger_logo_display(LOGO_BLANK);
			msleep(100);
			wisky_boot_charge_bl(1);			
			wisky_charger_logo_display(LOGO_POOR);
			
			mdelay(1000);
			wisky_boot_charge_bl(0);
			mdelay(500);
			pr_info("%s:low battery, shut down...\n", __FUNCTION__);
			wisky_boot_charge_poweroff();
			while(1);
		}else{

			wisky_charger_logo_display(LOGO_BLANK);
			msleep(100);
			//wisky_boot_charge_bl(1);			
			wisky_charger_logo_display(LOGO_BOOTUP);
			return 0;
		}
	}

	pr_info("------>Charge mode enter\n");
	//clear lcd before show charge logo
	wisky_charger_logo_display(LOGO_BLANK);
	printk("wisky_charger_logo_display(LOGO_BLANK);\n");
	msleep(100);//延时防止闪白屏
	wisky_boot_charge_bl(1);	
	while(1){
		if(battery_capacity == BATT_LEVEL_FULL){
			dc_adaptor_check_and_poweroff();
			wisky_charger_logo_display(LOGO_BLANK);
			if(wisky_boot_charge_show_full_logo() == 1){
				goto exit;
			}
		}else{
			dc_adaptor_check_and_poweroff();
			wisky_charger_logo_display(LOGO_BLANK);
			if(wisky_boot_charge_show_logos(3, battery_capacity) == 1){
				goto exit;
			}
		}
		#if defined (CONFIG_AXP_PEKINFO)
		if(axp_pwr_pressshort){
			axp_pwr_pressshort = 0;
		}
		#endif

		dc_adaptor_check_and_poweroff();
		wisky_boot_charge_suspend();

		while(1){
			if(battery_capacity == BATT_LEVEL_FULL && full_display_times > 0){
				if(charge_full_cnt++ > 10/*FULL_SHOW_LOGO_TIME*/){
					charge_full_cnt = 0;
					full_display_times--;
					break;
				}
			}
			dc_adaptor_check_and_poweroff();
			if(power_key_check()){
				break;
			}

			dc_adaptor_check_and_poweroff();
			mdelay(10);
		}
		
		dc_adaptor_check_and_poweroff();		
		wisky_boot_charge_resume();		
	}
exit:
	pr_info("------>Charge mode exit\n");
	rk30_mux_api_set(LCD_BL_PWM_MUX_NAME, LCD_BL_PWM_MUX_MODE);
	//lcd backlight off here, will be backlight on in backlihgt driver init
	if(LCD_BL_EN_PIN != INVALID_GPIO){
		gpio_set_value(LCD_BL_EN_PIN, !LCD_BL_EN_VALUE);
	}
	//
	
	boot_charge_mode = 1;
	wisky_charger_logo_display(LOGO_BLANK);
	wisky_charger_logo_display(LOGO_BOOTUP);
	gpio_request(KEY_SHUTDOWN_PIN, "poweronpin");
	gpio_direction_output(KEY_SHUTDOWN_PIN, GPIO_HIGH);
	gpio_set_value(KEY_SHUTDOWN_PIN, GPIO_HIGH);

	return 0;
}
Пример #13
0
static int l3g4200d_init_platform_hw(void)
{
	rk30_mux_api_set(GPIO4C3_SMCDATA3_TRACEDATA3_NAME, GPIO4C_GPIO4C3);
	
	return 0;
}
static int rk30_rmii_power_control(int enable)
{
	if (enable) {
		//enable phy power
		printk("power on phy\n");
		rk30_mux_api_set(GPIO1D6_CIF1DATA11_NAME, GPIO1D_GPIO1D6);

		rk30_mux_api_set(GPIO1D2_CIF1CLKIN_NAME, GPIO1D_GPIO1D2);
		rk30_mux_api_set(GPIO1D1_CIF1HREF_MIIMDCLK_NAME, GPIO1D_MII_MDCLK);
		rk30_mux_api_set(GPIO1D0_CIF1VSYNC_MIIMD_NAME, GPIO1D_MII_MD);

		rk30_mux_api_set(GPIO1C7_CIFDATA9_RMIIRXD0_NAME, GPIO1C_RMII_RXD0);
		rk30_mux_api_set(GPIO1C6_CIFDATA8_RMIIRXD1_NAME, GPIO1C_RMII_RXD1);
		rk30_mux_api_set(GPIO1C5_CIFDATA7_RMIICRSDVALID_NAME, GPIO1C_RMII_CRS_DVALID);
		rk30_mux_api_set(GPIO1C4_CIFDATA6_RMIIRXERR_NAME, GPIO1C_RMII_RX_ERR);
		rk30_mux_api_set(GPIO1C3_CIFDATA5_RMIITXD0_NAME, GPIO1C_RMII_TXD0);
		rk30_mux_api_set(GPIO1C2_CIF1DATA4_RMIITXD1_NAME, GPIO1C_RMII_TXD1);
		rk30_mux_api_set(GPIO1C1_CIFDATA3_RMIITXEN_NAME, GPIO1C_RMII_TX_EN);
		rk30_mux_api_set(GPIO1C0_CIF1DATA2_RMIICLKOUT_RMIICLKIN_NAME, GPIO1C_RMII_CLKOUT);
		gpio_direction_output(PHY_PWR_EN_GPIO, GPIO_HIGH);
		gpio_set_value(PHY_PWR_EN_GPIO, GPIO_HIGH);
	}else {
		gpio_direction_output(PHY_PWR_EN_GPIO, GPIO_LOW);
		gpio_set_value(PHY_PWR_EN_GPIO, GPIO_LOW);
	}
	return 0;
}
static void rk29_sdmmc_set_iomux_mmc0(unsigned int bus_width)
{
    switch (bus_width)
    {
        
    	case 1://SDMMC_CTYPE_4BIT:
    	{
    	    #if SDMMC_USE_NEW_IOMUX_API
            iomux_set(rksdmmc0_gpio_init.data1_gpio.iomux.fmux);
            iomux_set(rksdmmc0_gpio_init.data2_gpio.iomux.fmux);
            iomux_set(rksdmmc0_gpio_init.data3_gpio.iomux.fmux);
    	    #else
        	rk30_mux_api_set(rksdmmc0_gpio_init.data1_gpio.iomux.name, rksdmmc0_gpio_init.data1_gpio.iomux.fmux);
        	rk30_mux_api_set(rksdmmc0_gpio_init.data2_gpio.iomux.name, rksdmmc0_gpio_init.data2_gpio.iomux.fmux);
        	rk30_mux_api_set(rksdmmc0_gpio_init.data3_gpio.iomux.name, rksdmmc0_gpio_init.data3_gpio.iomux.fmux);
        	#endif
    	}
    	break;

    	case 0x10000://SDMMC_CTYPE_8BIT:
    	    break;
    	case 0xFFFF: //gpio_reset
    	{
    	    #if (!!SDMMC_USE_NEW_IOMUX_API) && !defined(CONFIG_SDMMC0_RK29_SDCARD_DET_FROM_GPIO)
    	    iomux_set(MMC0_DETN);
    	    #endif
    	    
    	    #if !(!!SDMMC_USE_NEW_IOMUX_API)
            rk30_mux_api_set(rksdmmc0_gpio_init.power_en_gpio.iomux.name, rksdmmc0_gpio_init.power_en_gpio.iomux.fgpio);
            #endif
            gpio_request(rksdmmc0_gpio_init.power_en_gpio.io,"sdmmc-power");
            gpio_direction_output(rksdmmc0_gpio_init.power_en_gpio.io, !(rksdmmc0_gpio_init.power_en_gpio.enable)); //power-off

        #if 0 //replace the power control into rk29_sdmmc_set_ios(); modifyed by xbw at 2012-08-12
            rk29_sdmmc_gpio_open(0, 0);

            gpio_direction_output(rksdmmc0_gpio_init.power_en_gpio.io, rksdmmc0_gpio_init.power_en_gpio.enable); //power-on

            rk29_sdmmc_gpio_open(0, 1);
          #endif  
    	}
    	break;

    	default: //case 0://SDMMC_CTYPE_1BIT:
        {
            #if SDMMC_USE_NEW_IOMUX_API
        	iomux_set(rksdmmc0_gpio_init.cmd_gpio.iomux.fmux);
        	iomux_set(rksdmmc0_gpio_init.clk_gpio.iomux.fmux);
        	iomux_set(rksdmmc0_gpio_init.data0_gpio.iomux.fmux);
            #else
        	rk30_mux_api_set(rksdmmc0_gpio_init.cmd_gpio.iomux.name, rksdmmc0_gpio_init.cmd_gpio.iomux.fmux);
        	rk30_mux_api_set(rksdmmc0_gpio_init.clk_gpio.iomux.name, rksdmmc0_gpio_init.clk_gpio.iomux.fmux);
        	rk30_mux_api_set(rksdmmc0_gpio_init.data0_gpio.iomux.name, rksdmmc0_gpio_init.data0_gpio.iomux.fmux);
        	#endif

            //IO voltage(vccio);
            #ifdef RK31SDK_SET_SDMMC0_PIN_VOLTAGE
                if(rk31sdk_get_sdmmc0_pin_io_voltage() > 2700)
                    SDMMC_write_grf_reg(GRF_IO_CON4, (SDMMC0_IO_VOLTAGE_MASK |SDMMC0_IO_VOLTAGE_33)); //set SDMMC0 pin to 3.3v
                else
                    SDMMC_write_grf_reg(GRF_IO_CON4, (SDMMC0_IO_VOLTAGE_MASK |SDMMC0_IO_VOLTAGE_18));//set SDMMC0 pin to 1.8v
            #else
            //default set the voltage of SDMMC0 to 3.3V
            SDMMC_write_grf_reg(GRF_IO_CON4, (SDMMC0_IO_VOLTAGE_MASK |SDMMC0_IO_VOLTAGE_33));
            #endif
    
            //sdmmc drive strength control
            SDMMC_write_grf_reg(GRF_IO_CON2, (SDMMC0_DRIVER_STRENGTH_MASK |SDMMC0_DRIVER_STRENGTH_8MA));
            
            #if !(!!SDMMC_USE_NEW_IOMUX_API)
            rk30_mux_api_set(rksdmmc0_gpio_init.data1_gpio.iomux.name, rksdmmc0_gpio_init.data1_gpio.iomux.fgpio);
            #endif
            gpio_request(rksdmmc0_gpio_init.data1_gpio.io, "mmc0-data1");
            gpio_direction_output(rksdmmc0_gpio_init.data1_gpio.io,GPIO_HIGH);//set mmc0-data1 to high.

            #if !(!!SDMMC_USE_NEW_IOMUX_API)
            rk30_mux_api_set(rksdmmc0_gpio_init.data2_gpio.iomux.name, rksdmmc0_gpio_init.data2_gpio.iomux.fgpio);
            #endif
            gpio_request(rksdmmc0_gpio_init.data2_gpio.io, "mmc0-data2");
            gpio_direction_output(rksdmmc0_gpio_init.data2_gpio.io,GPIO_HIGH);//set mmc0-data2 to high.

            #if !(!!SDMMC_USE_NEW_IOMUX_API)
            rk30_mux_api_set(rksdmmc0_gpio_init.data3_gpio.iomux.name, rksdmmc0_gpio_init.data3_gpio.iomux.fgpio);
            #endif
            gpio_request(rksdmmc0_gpio_init.data3_gpio.io, "mmc0-data3");
            gpio_direction_output(rksdmmc0_gpio_init.data3_gpio.io,GPIO_HIGH);//set mmc0-data3 to high.
    	}
    	break;
	}
}
Пример #16
0
static int __init gpio_nwd_init(void)
{
	int retval,ret;
#ifdef CONFIG_CHARGE_TPS2546
	init_nwd_tps2546();
#endif
	///led
#if defined(CONFIG_HUALINGAN_YUANCHEPING)
	ret = gpio_request(SOUND_ENABLE, "sound enable");
#endif
	rk30_mux_api_set(GPIO4D3_SMCDATA11_TRACEDATA11_NAME, GPIO4D_GPIO4D3); ///RST
	ret = gpio_request(RK30_PIN4_PD3, "led  pin");
	if (ret != 0) {
			gpio_free(RK30_PIN4_PD3);
			ret = gpio_request(RK30_PIN4_PD3, "led pin");
			if (ret != 0) {
				printk("led gpio_request error\n");
				return -EIO;
			}
		}
		gpio_direction_output(RK30_PIN4_PD3, 0);
		gpio_set_value(RK30_PIN4_PD3, 0);
	setup_timer( &led2_timer, led2_timer_callback, 0 );
	mod_timer(&led2_timer, jiffies + msecs_to_jiffies(1000));
	/*
	 * Create a simple kobject with the name of "kobject_example",
	 * located under /sys/kernel/
	 *
	 * As this is a simple directory, no uevent will be sent to
	 * userspace.  That is why this function should not be used for
	 * any type of dynamic kobjects, where the name and number are
	 * not known ahead of time.
	 */
	gpio_kobj = kobject_create_and_add("tps2546_gpio", kernel_kobj);
	if (!gpio_kobj)
		return -ENOMEM;

	/* Create the files associated with this kobject */
	retval = sysfs_create_group(gpio_kobj, &attr_group);
	if (retval)
		kobject_put(gpio_kobj);

	gpiotest_kobj = kobject_create_and_add("nwdtest_gpio", kernel_kobj);
	if (!gpiotest_kobj)
		return -ENOMEM;

	/* Create the files associated with this kobject */
	retval = sysfs_create_group(gpiotest_kobj, &attr_gpio_group);
	if (retval)
		kobject_put(gpiotest_kobj);
#if defined(CONFIG_HBS)
	s32 gpio_val1,gpio_val2;
	rk30_mux_api_set(GPIO4B7_SPI0CSN1_NAME,0);
	gpio_setting_tst(  RK30_PIN4_PB7,"GPIO4B7 high","hw tstout");mdelay(10);
	rk30_mux_api_set(GPIO6A1_TESTCLOCKOUT_NAME,0);
	gpio_setting_tst(  RK30_PIN6_PA1,"GPIO6A1 input","hw tstin");mdelay(10);
	gpio_val1 = gpio_get_value(RK30_PIN6_PA1);


	///rk30_mux_api_set(GPIO4B7_SPI0CSN1_NAME,0);
	gpio_setting_tst(  RK30_PIN4_PB7,"GPIO4B7 low","hw tstout2");mdelay(10);
	rk30_mux_api_set(GPIO6A1_TESTCLOCKOUT_NAME,0);
	///gpio_setting_tst(  RK30_PIN6_PA1,"GPIO6A1 input","hw tstin2");mdelay(10);
	gpio_val2 = gpio_get_value(RK30_PIN6_PA1);
	if(gpio_val1==1  && gpio_val2==0)
		tp_tst = 1;
	else 	
		tp_tst = 0;
	printk("=%d===\n",tp_tst);
#endif 
#if 1 ///defined(CONFIG_SUOLING)
	s32 gpio_val1,gpio_val2,gpio_val3;

	rk30_mux_api_set(GPIO4C4_SMCDATA4_TRACEDATA4_NAME,0);
//  del by lusterzhang
	gpio_setting_tst(  RK30_PIN4_PC4,"GPIO4C4 high","hw tstout");mdelay(2);
	rk30_mux_api_set(GPIO4C6_SMCDATA6_TRACEDATA6_NAME,0);
	gpio_setting_tst(  RK30_PIN4_PC6,"GPIO4C6 input","hw tstin");mdelay(2);
	gpio_val1 = gpio_get_value(RK30_PIN4_PC6);

	///rk30_mux_api_set(GPIO4B7_SPI0CSN1_NAME,0);
	gpio_setting_tst(  RK30_PIN4_PC4,"GPIO4C4 low","hw tstout2");mdelay(2);
	///rk30_mux_api_set(GPIO6A1_TESTCLOCKOUT_NAME,0);
	///gpio_setting_tst(  RK30_PIN6_PA1,"GPIO6A1 input","hw tstin2");mdelay(10);
	gpio_val2 = gpio_get_value(RK30_PIN4_PC6);
	gpio_setting_tst(  RK30_PIN4_PC4,"GPIO4C4 high","hw tstout");mdelay(2);
	gpio_val3 = gpio_get_value(RK30_PIN4_PC6);

	if(gpio_val1==1  && gpio_val2==0&&gpio_val3==1)
		tp_tst = 1;
	else 	
		tp_tst = 0;


#endif 


	///if(tp_tst == 0)
	rk30_mux_api_set(GPIO6A1_TESTCLOCKOUT_NAME,0);
	gpio_setting_tst(  RK30_PIN6_PA1,"GPIO6A1 high","wifi pwr");mdelay(2);
	gpio_set_value(RK30_PIN6_PA1,1);
	 
	 
	rk30_mux_api_set(GPIO3B6_SDMMC0DETECTN_NAME,0);
	gpio_setting_tst(  RK30_PIN3_PB6,"GPIO3B6 high","hw tstout");mdelay(2);
	
	
	printk_gpio("===%d %s===\n",__LINE__,__FUNCTION__);
	ret = gpio_request(RK30_PIN3_PB6, "WIFIHAOBANGSHOU CS");
    	if(ret != 0)
   	{
			gpio_free(RK30_PIN3_PB6);
			ret = gpio_request(RK30_PIN3_PB6, "wifi cs");
			if(ret != 0)
			printk("gpio req error\n");
    		}

			gpio_direction_output(RK30_PIN3_PB6,0);
			gpio_set_value(RK30_PIN3_PB6, 0);
			printk_gpio("===%d %s===\n",__LINE__,__FUNCTION__);
	
	

///K1103 bt pwr en  ,wifi wr en
		rk30_mux_api_set(GPIO2C0_LCDCDATA16_GPSCLK_HSADCCLKOUT_NAME,0);
		ret = gpio_setting_tst(RK30_PIN2_PC0,"GPIO2C0 high","K1103 BT pwr");///mdelay(3000);
	/***	ret = gpio_setting_tst(RK30_PIN2_PC0,"GPIO2C0 low","K1103 BT pwr");mdelay(3000);
		ret = gpio_setting_tst(RK30_PIN2_PC0,"GPIO2C0 high","K1103 BT pwr");mdelay(3000);
		ret = gpio_setting_tst(RK30_PIN2_PC0,"GPIO2C0 low","K1103 BT pwr");mdelay(3000);

		ret = gpio_setting_tst(RK30_PIN2_PC0,"GPIO2C0 high","K1103 BT pwr");mdelay(3000);
		ret = gpio_setting_tst(RK30_PIN2_PC0,"GPIO2C0 low","K1103 BT pwr");mdelay(3000);

		ret = gpio_setting_tst(RK30_PIN2_PC0,"GPIO2C0 high","K1103 BT pwr");mdelay(3000);
		///ret = gpio_setting_tst(RK30_PIN2_PC0,"GPIO2C0 low","K1103 BT pwr");mdelay(3000);*/
#ifdef CONFIG_NWD_K1103

		rk30_mux_api_set(GPIO3A7_SDMMC0PWREN_NAME,0);
		///ret = gpio_setting_tst(RK30_PIN3_PA7,"GPIO3A7 high","K1103 WIFI pwr");
		ret = gpio_request(RK30_PIN3_PA7, "K1103 WIFI pwr");
    		if(ret != 0)
   		 {
			gpio_free(RK30_PIN3_PA7);
			ret = gpio_request(RK30_PIN3_PA7, "wK1103 WIFI pwr");
			if(ret != 0)
			printk("gpio req error\n");
    		}

			gpio_direction_output(RK30_PIN3_PA7,1);
			gpio_set_value(RK30_PIN3_PA7, 1);/***mdelay(3000);gpio_set_value(RK30_PIN3_PA7, 0);mdelay(3000);
			gpio_set_value(RK30_PIN3_PA7, 1);mdelay(3000);gpio_set_value(RK30_PIN3_PA7, 0);mdelay(3000);
			gpio_set_value(RK30_PIN3_PA7, 1);mdelay(3000);gpio_set_value(RK30_PIN3_PA7, 0);mdelay(3000);
			gpio_set_value(RK30_PIN3_PA7, 1);mdelay(3000);///gpio_set_value(RK30_PIN3_PA7, 0);mdelay(3000);*/
#endif 

	bluetooth_reset_func();
	return retval;
}
Пример #17
0
static int rk30_rmii_io_init(void)
{
	int err;
	rk30_mux_api_set(GPIO1D6_CIF1DATA11_NAME, GPIO1D_GPIO1D6);

	rk30_mux_api_set(GPIO1D2_CIF1CLKIN_NAME, GPIO1D_GPIO1D2);
	rk30_mux_api_set(GPIO1D1_CIF1HREF_MIIMDCLK_NAME, GPIO1D_MII_MDCLK);
	rk30_mux_api_set(GPIO1D0_CIF1VSYNC_MIIMD_NAME, GPIO1D_MII_MD);

	rk30_mux_api_set(GPIO1C7_CIFDATA9_RMIIRXD0_NAME, GPIO1C_RMII_RXD0);
	rk30_mux_api_set(GPIO1C6_CIFDATA8_RMIIRXD1_NAME, GPIO1C_RMII_RXD1);
	rk30_mux_api_set(GPIO1C5_CIFDATA7_RMIICRSDVALID_NAME, GPIO1C_RMII_CRS_DVALID);
	rk30_mux_api_set(GPIO1C4_CIFDATA6_RMIIRXERR_NAME, GPIO1C_RMII_RX_ERR);
	rk30_mux_api_set(GPIO1C3_CIFDATA5_RMIITXD0_NAME, GPIO1C_RMII_TXD0);
	rk30_mux_api_set(GPIO1C2_CIF1DATA4_RMIITXD1_NAME, GPIO1C_RMII_TXD1);
	rk30_mux_api_set(GPIO1C1_CIFDATA3_RMIITXEN_NAME, GPIO1C_RMII_TX_EN);
	rk30_mux_api_set(GPIO1C0_CIF1DATA2_RMIICLKOUT_RMIICLKIN_NAME, GPIO1C_RMII_CLKOUT);

	//phy power gpio
	err = gpio_request(PHY_PWR_EN_GPIO, "phy_power_en");
	if (err) {
		return -1;
	}
	//phy power down
	gpio_direction_output(PHY_PWR_EN_GPIO, GPIO_LOW);
	gpio_set_value(PHY_PWR_EN_GPIO, GPIO_LOW);
	return 0;
}
Пример #18
0
static int rk30_rmii_power_control(int enable)
{
        struct regulator *ldo_rmii;
        ldo_rmii = regulator_get(NULL, "ldo9");

        if (ldo_rmii == NULL || IS_ERR(ldo_rmii)){
            printk("get rmii ldo failed!\n");
            return -1;
        }

	if (enable) {
		//enable phy power
		printk("power on phy\n");
		rk30_mux_api_set(GPIO1D6_CIF1DATA11_NAME, GPIO1D_GPIO1D6);

		rk30_mux_api_set(GPIO1D2_CIF1CLKIN_NAME, GPIO1D_GPIO1D2);
		rk30_mux_api_set(GPIO1D1_CIF1HREF_MIIMDCLK_NAME, GPIO1D_MII_MDCLK);
		rk30_mux_api_set(GPIO1D0_CIF1VSYNC_MIIMD_NAME, GPIO1D_MII_MD);

		rk30_mux_api_set(GPIO1C7_CIFDATA9_RMIIRXD0_NAME, GPIO1C_RMII_RXD0);
		rk30_mux_api_set(GPIO1C6_CIFDATA8_RMIIRXD1_NAME, GPIO1C_RMII_RXD1);
		rk30_mux_api_set(GPIO1C5_CIFDATA7_RMIICRSDVALID_NAME, GPIO1C_RMII_CRS_DVALID);
		rk30_mux_api_set(GPIO1C4_CIFDATA6_RMIIRXERR_NAME, GPIO1C_RMII_RX_ERR);
		rk30_mux_api_set(GPIO1C3_CIFDATA5_RMIITXD0_NAME, GPIO1C_RMII_TXD0);
		rk30_mux_api_set(GPIO1C2_CIF1DATA4_RMIITXD1_NAME, GPIO1C_RMII_TXD1);
		rk30_mux_api_set(GPIO1C1_CIFDATA3_RMIITXEN_NAME, GPIO1C_RMII_TX_EN);
		rk30_mux_api_set(GPIO1C0_CIF1DATA2_RMIICLKOUT_RMIICLKIN_NAME, GPIO1C_RMII_CLKOUT);
		gpio_direction_output(PHY_PWR_EN_GPIO, GPIO_HIGH);
		gpio_set_value(PHY_PWR_EN_GPIO, GPIO_HIGH);
//$_rbox_$_modify_$_chenzhi_20121008: power control by pmu
//$_rbox_$_modify_$_begin
                if(!regulator_is_enabled(ldo_rmii)) {
//                    regulator_set_voltage(ldo_rmii, 3300000, 3300000);
                    regulator_enable(ldo_rmii);
                    regulator_put(ldo_rmii);
                    mdelay(500);
                }
//$_rbox_$_modify_$_end
	}else {
		gpio_direction_output(PHY_PWR_EN_GPIO, GPIO_LOW);
		gpio_set_value(PHY_PWR_EN_GPIO, GPIO_LOW);
//$_rbox_$_modify_$_chenzhi_20121008: power control by pmu
//$_rbox_$_modify_$_begin
                if(regulator_is_enabled(ldo_rmii)) {
                    regulator_disable(ldo_rmii);
                    regulator_put(ldo_rmii);
                    mdelay(500);
                }
//$_rbox_$_modify_$_end
	}
	return 0;
}
Пример #19
0
int lcd_io_init(void)
{
	int ret = 0;

	if(RK_LCD_STANDBY_PIN != INVALID_GPIO){
		rk30_mux_api_set(RK_LCD_STANDBY_MUX_NAME, RK_LCD_STANDBY_MUX_MODE);
		ret = gpio_request(RK_LCD_STANDBY_PIN, NULL);
		if(ret !=0){
			printk(KERN_ERR "request lcd standby pin failed!\n");
		}else{
			gpio_direction_output(RK_LCD_STANDBY_PIN, GPIO_HIGH);
			gpio_set_value(RK_LCD_STANDBY_PIN, RK_LCD_STANDBY_VALUE);
			mdelay(5);
		}
	}

	if(RK_LCD_EN_PIN != INVALID_GPIO){
		rk30_mux_api_set(RK_LCD_EN_MUX_NAME, RK_LCD_EN_MUX_MODE);
		ret = gpio_request(RK_LCD_EN_PIN, NULL);
		if (ret != 0){
			printk(KERN_ERR "request lcd en2 pin fail!\n");
		}
		else{
			gpio_direction_output(RK_LCD_EN_PIN, 1);
			gpio_set_value(RK_LCD_EN_PIN, RK_LCD_EN_VALUE);
		}
	}

	if(RK_LCD_RESET_PIN != INVALID_GPIO){
		rk30_mux_api_set(RK_LCD_RESET_MUX_NAME, RK_LCD_RESET_MUX_MODE);
		ret = gpio_request(RK_LCD_RESET_PIN, NULL);
		if(ret !=0){
			printk(KERN_ERR "request lcd reset pin failed!\n");
		}else{
			mdelay(50);
			gpio_pull_updown(RK_LCD_RESET_PIN, GPIOPullUp);
			gpio_direction_output(RK_LCD_RESET_PIN, GPIO_HIGH);
			gpio_set_value(RK_LCD_RESET_PIN, RK_LCD_RESET_VALUE);
		}
	}

	if(LCD_CS_PIN != INVALID_GPIO){
		rk30_mux_api_set(LCD_CS_MUX_NAME, LCD_CS_MUX_MODE);
		ret = gpio_request(LCD_CS_PIN, NULL);
		if (ret != 0){
			printk(KERN_ERR "request lcd en pin fail!\n");
		}
		else{
			gpio_direction_output(LCD_CS_PIN, 1);
			gpio_set_value(LCD_CS_PIN, LCD_CS_VALUE);
		}
	}

	if(LCD_SPI_CS_PIN != INVALID_GPIO){
		rk30_mux_api_set(LCD_SPI_CS_MUX_NAME, LCD_SPI_CS_MUX_MODE);
		ret = gpio_request(LCD_SPI_CS_PIN, NULL);
		if (ret != 0){
			printk(KERN_ERR "request lcd spi cs pin fail!\n");
		}else{
			gpio_direction_output(LCD_SPI_CS_PIN, 1);
			gpio_set_value(LCD_SPI_CS_PIN, GPIO_LOW);
		}
	}

	if(LCD_SPI_SCL_PIN != INVALID_GPIO){
		rk30_mux_api_set(LCD_SPI_SCL_MUX_NAME, LCD_SPI_SCL_MUX_MODE);
		ret = gpio_request(LCD_SPI_SCL_PIN, NULL);
		if (ret != 0){
			printk(KERN_ERR "request lcd spi scl pin fail!\n");
		}else{
			gpio_direction_output(LCD_SPI_SCL_PIN, 1);
			gpio_set_value(LCD_SPI_SCL_PIN, GPIO_LOW);
		}
	}

	if(LCD_SPI_SDA_PIN != INVALID_GPIO){
		rk30_mux_api_set(LCD_SPI_SDA_MUX_NAME, LCD_SPI_SDA_MUX_MODE);
		ret = gpio_request(LCD_SPI_SDA_PIN, NULL);
		if (ret != 0){
			printk(KERN_ERR "request lcd spi sda pin fail!\n");
		}else{
			gpio_direction_output(LCD_SPI_SDA_PIN, 1);
			gpio_set_value(LCD_SPI_SDA_PIN, GPIO_LOW);
		}
	}

	td043_init();
	
	return 0;
}
static int mma7660_init_platform_hw(void)
{
	rk30_mux_api_set(GPIO1B2_SPI_RXD_UART1_SIN_NAME, GPIO1B_GPIO1B2);

	return 0;
}
static void rk29_sdmmc_gpio_open(int device_id, int on)
{
    switch(device_id)
    {
        case 0://mmc0
        {
            #ifdef CONFIG_SDMMC0_RK29
            if(on)
            {
		gpio_direction_output(RK30_PIN3_PA2,GPIO_HIGH);//set mmc0-clk to high
                gpio_direction_output(RK30_PIN3_PA3,GPIO_HIGH);// set mmc0-cmd to high.
                gpio_direction_output(RK30_PIN3_PA4,GPIO_HIGH);//set mmc0-data0 to high.
                gpio_direction_output(RK30_PIN3_PA5,GPIO_HIGH);//set mmc0-data1 to high.
                gpio_direction_output(RK30_PIN3_PA6,GPIO_HIGH);//set mmc0-data2 to high.
                gpio_direction_output(RK30_PIN3_PA7,GPIO_HIGH);//set mmc0-data3 to high.
                mdelay(30);
            }
            else
            {
		rk30_mux_api_set(GPIO3A2_SDMMC0CLKOUT_NAME, GPIO3A_GPIO3A2);
                gpio_request(RK30_PIN3_PA2, "mmc0-clk");
                gpio_direction_output(RK30_PIN3_PA2,GPIO_LOW);//set mmc0-clk to low.

                rk30_mux_api_set(GPIO3A3_SDMMC0CMD_NAME, GPIO3A_GPIO3A3);
                gpio_request(RK30_PIN3_PA3, "mmc0-cmd");
                gpio_direction_output(RK30_PIN3_PA3,GPIO_LOW);//set mmc0-cmd to low.

                rk30_mux_api_set(GPIO3A4_SDMMC0DATA0_NAME, GPIO3A_GPIO3A4);
                gpio_request(RK30_PIN3_PA4, "mmc0-data0");
                gpio_direction_output(RK30_PIN3_PA4,GPIO_LOW);//set mmc0-data0 to low.

                rk30_mux_api_set(GPIO3A5_SDMMC0DATA1_NAME, GPIO3A_GPIO3A5);
                gpio_request(RK30_PIN3_PA5, "mmc0-data1");
                gpio_direction_output(RK30_PIN3_PA5,GPIO_LOW);//set mmc0-data1 to low.

                rk30_mux_api_set(GPIO3A6_SDMMC0DATA2_NAME, GPIO3A_GPIO3A6);
                gpio_request(RK30_PIN3_PA6, "mmc0-data2");
                gpio_direction_output(RK30_PIN3_PA6,GPIO_LOW);//set mmc0-data2 to low.

                rk30_mux_api_set(GPIO3A7_SDMMC0DATA3_NAME, GPIO3A_GPIO3A7);
                gpio_request(RK30_PIN3_PA7, "mmc0-data3");
                gpio_direction_output(RK30_PIN3_PA7,GPIO_LOW);//set mmc0-data3 to low.
                mdelay(30);
            }
            #endif
        }
        break;
        
        case 1://mmc1
        {
            #ifdef CONFIG_SDMMC1_RK29
            if(on)
            {
                gpio_direction_output(RK30_PIN3_PC5,GPIO_HIGH);//set mmc1-clk to high
                gpio_direction_output(RK30_PIN3_PC0,GPIO_HIGH);//set mmc1-cmd to high.
                gpio_direction_output(RK30_PIN3_PC1,GPIO_HIGH);//set mmc1-data0 to high.
                gpio_direction_output(RK30_PIN3_PC2,GPIO_HIGH);//set mmc1-data1 to high.
                gpio_direction_output(RK30_PIN3_PC3,GPIO_HIGH);//set mmc1-data2 to high.
                gpio_direction_output(RK30_PIN3_PC4,GPIO_HIGH);//set mmc1-data3 to high.
                mdelay(100);
            }
            else
            {
		rk30_mux_api_set(GPIO3C5_SDMMC1CLKOUT_RMIICLKOUT_RMIICLKIN_NAME, GPIO3C_GPIO3C5);
                gpio_request(RK30_PIN3_PC5, "mmc1-clk");
                gpio_direction_output(RK30_PIN3_PC5,GPIO_LOW);//set mmc1-clk to low.

                rk30_mux_api_set(GPIO3C0_SDMMC1CMD_RMIITXEN_NAME, GPIO3C_GPIO3C0);
                gpio_request(RK30_PIN3_PC0, "mmc1-cmd");
                gpio_direction_output(RK30_PIN3_PC0,GPIO_LOW);//set mmc1-cmd to low.

                rk30_mux_api_set(GPIO3C1_SDMMC1DATA0_RMIITXD1_NAME, GPIO3C_GPIO3C1);
                gpio_request(RK30_PIN3_PC1, "mmc1-data0");
                gpio_direction_output(RK30_PIN3_PC1,GPIO_LOW);//set mmc1-data0 to low.
                mdelay(100);
            }
            #endif
        }
        break; 
        
        case 2: //mmc2
        break;
        
        default:
        break;
    }
}
Пример #22
0
///6B4  4D6  6B1  6A0  0C5 4C4 4C6  4C7 6B2  2C5  2C6  2C3   6A2 1B3  3D5  3D6  4C1  4C0  3D0   4D2  3A2  3A3  4D1 4D0    3A7  2A0 2A1  2A2  2C0 2B6 6A5
///6A6  6B3  4C3  6A7   0C7  
///6B4  6B1   6B2   6B3  6A5 6A0 6A2 6A6   4D6   0C5 4C4 4C6  4C7   2C5  2C6  2C3     1B3  3D5  3D6  4C1  4C0  3D0   4D2  3A2  3A3  4D1 4D0    3A7  2A0 2A1  2A2  2C0 2B6 
///  4C3  6A7   0C7  
static ssize_t gpio_nwd_write(struct kobject *kobj, struct kobj_attribute *attr,const char *buf, size_t count)

{
    int ret = 0;int cnt = 0;void __iomem * p1;void __iomem *p2;void __iomem *p3;void __iomem *p4;
    int new_state = simple_strtoul(buf, NULL, 16);
#ifdef GPIO_HW_TST
	 char req_name[7];
  	if(strncmp(buf,"GPIO2C2",7)==0)
	{	printk_gpio("===%d %s===\n",__LINE__,__FUNCTION__);
		gpio = RK30_PIN2_PC2;	  
		if( strlen(buf) == 7 ) 
		{printk_gpio("===%d %s===\n",__LINE__,__FUNCTION__);goto end_gpio;}
		printk_gpio("===%d %s===\n",__LINE__,__FUNCTION__);
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO2C2_LCDC1DATA18_SMCBLSN1_HSADCDATA5_NAME,0);		   
	/***	ret = gpio_request(gpio, "gpio2c2");
    		if(ret != 0)
   		 {
			gpio_free(gpio);
			ret = gpio_request(gpio, "gpio2c2");
			if(ret != 0)
			printk("gpio req error\n");
    		}

	  	if(strncmp(buf+8,"inp",3)==0)	
			gpio_direction_input(gpio);
		if(strncmp(buf+8,"hig",3)==0)	{
			gpio_direction_output(gpio,1);
			gpio_set_value(gpio, 1);
		}
		if(strncmp(buf+8,"low",3)==0)	{
			gpio_direction_output(gpio,1);
			gpio_set_value(gpio, 0);
		}*/
		ret = gpio_setting_tst(  gpio,buf,req_name);	
		////}    
	}

/**/
	else if(strncmp(buf,"GPIO4D6",7)==0)
	{	gpio = RK30_PIN4_PD6;	///if( strlen(buf) == 7 ) goto end_gpio;
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO4D6_SMCDATA14_TRACEDATA14_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}
	else if(strncmp(buf,"GPIO4D5",7)==0)
	{	gpio = RK30_PIN4_PD5;	///if( strlen(buf) == 7 ) goto end_gpio;
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO4D5_SMCDATA13_TRACEDATA13_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}
	else if(strncmp(buf,"GPIO0C6",7)==0)
	{	gpio = RK30_PIN0_PC6;	///if( strlen(buf) == 7 ) goto end_gpio;
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO0C6_TRACECLK_SMCADDR2_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}
	else if(strncmp(buf,"GPIO0C7",7)==0)
	{	gpio = RK30_PIN0_PC7;	///if( strlen(buf) == 7 ) goto end_gpio;
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO0C7_TRACECTL_SMCADDR3_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);	
	}	
	else if(strncmp(buf,"GPIO4C3",7)==0)
	{	gpio = RK30_PIN4_PC3;	///if( strlen(buf) == 7 ) goto end_gpio;
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO4C3_SMCDATA3_TRACEDATA3_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);	
	}
	else if(strncmp(buf,"GPIO6A7",7)==0)
	{	gpio = RK30_PIN6_PA7;	///if( strlen(buf) == 7 ) goto end_gpio;
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO6A7_TESTCLOCKOUT_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);	
	}
	else if(strncmp(buf,"GPIO0C5",7)==0)
	{	gpio = RK30_PIN0_PC5;	 
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO0C5_I2S12CHSDO_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}
else if(strncmp(buf,"GPIO4C4",7)==0)
	{	gpio = RK30_PIN4_PC4;	///if( strlen(buf) == 7 ) goto end_gpio;
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO4C4_SMCDATA4_TRACEDATA4_NAME,0);printk_gpio("===%d %s===\n",__LINE__,__FUNCTION__);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO4C6",7)==0)
	{	gpio = RK30_PIN4_PC6;	 
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO4C6_SMCDATA6_TRACEDATA6_NAME,0); printk_gpio("===%d %s===\n",__LINE__,__FUNCTION__);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}
else if(strncmp(buf,"GPIO4C7",7)==0)
	{	gpio = RK30_PIN4_PC7;	///if( strlen(buf) == 7 ) goto end_gpio;
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO4C7_SMCDATA7_TRACEDATA7_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO2C3",7)==0)
	{	gpio = RK30_PIN2_PC3;	 
		strncpy(req_name,buf,7);
		rk30_mux_api_set( GPIO2C3_LCDC1DATA19_SPI1CLK_HSADCDATA0_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO2C5",7)==0)
	{	gpio = RK30_PIN2_PC5;	///if( strlen(buf) == 7 ) goto end_gpio;
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO2C5_LCDC1DATA21_SPI1TXD_HSADCDATA2_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO2C6",7)==0)
	{	gpio = RK30_PIN2_PC6;	 
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO2C6_LCDC1DATA22_SPI1RXD_HSADCDATA3_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);

	}else if(strncmp(buf,"GPIO1B3",7)==0)
	{	gpio = RK30_PIN1_PB3;	///if( strlen(buf) == 7 ) goto end_gpio;
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO1B3_CIF0CLKOUT_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO3D5",7)==0)
	{	gpio = RK30_PIN3_PD5;	 
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO3D5_UART3CTSN_NAME	,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO3D6",7)==0)
	{	gpio = RK30_PIN3_PD6;	///if( strlen(buf) == 7 ) goto end_gpio;
		strncpy(req_name,buf,7);
		rk30_mux_api_set( GPIO3D6_UART3RTSN_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO4C0",7)==0)
	{	gpio = RK30_PIN4_PC0;	 
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO4C0_SMCDATA0_TRACEDATA0_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO4C1",7)==0)
	{	gpio = RK30_PIN4_PC1;	///if( strlen(buf) == 7 ) goto end_gpio;
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO4C1_SMCDATA1_TRACEDATA1_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO3D0",7)==0)
	{	gpio = RK30_PIN3_PD0;	 
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO3D0_SDMMC1PWREN_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO4D2",7)==0)
	{	gpio = RK30_PIN4_PD2;	///if( strlen(buf) == 7 ) goto end_gpio;
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO4D2_SMCDATA10_TRACEDATA10_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO3A2",7)==0)
	{	gpio = RK30_PIN3_PA2;	 
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO3A2_I2C3SDA_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO3A3",7)==0)
	{	gpio = RK30_PIN3_PA3;	///if( strlen(buf) == 7 ) goto end_gpio;
		strncpy(req_name,buf,7);
		rk30_mux_api_set( GPIO3A3_I2C3SCL_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO4D0",7)==0)
	{	gpio = RK30_PIN4_PD0;	 
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO4D0_SMCDATA8_TRACEDATA8_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO4D1",7)==0)
	{	gpio = RK30_PIN4_PD1;	 
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO4D1_SMCDATA9_TRACEDATA9_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO3A7",7)==0)
	{	gpio = RK30_PIN3_PA7;	 
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO3A7_SDMMC0PWREN_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO2A0",7)==0)
	{	gpio = RK30_PIN2_PA0;	 
		strncpy(req_name,buf,7);
		rk30_mux_api_set( GPIO2A0_LCDC1DATA0_SMCADDR4_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO2B6",7)==0)
	{	gpio = RK30_PIN2_PB6;	 
		strncpy(req_name,buf,7);
		rk30_mux_api_set( GPIO2B6_LCDC1DATA14_SMCADDR18_TSSYNC_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO2C0",7)==0)
	{	gpio = RK30_PIN2_PC0;	 
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO2C0_LCDCDATA16_GPSCLK_HSADCCLKOUT_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO2A2",7)==0)
	{	gpio = RK30_PIN2_PA2;	 
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO2A2_LCDCDATA2_SMCADDR6_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO2A1",7)==0)
	{	gpio = RK30_PIN2_PA1;	 
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO2A1_LCDC1DATA1_SMCADDR5_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}


else if(strncmp(buf,"GPIO6B1",7)==0)
	{	gpio = RK30_PIN6_PB1;	 
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO6B1_TESTCLOCKOUT_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO6B2",7)==0)
	{	gpio = RK30_PIN6_PB2;	 
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO6B2_TESTCLOCKOUT_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}
else if(strncmp(buf,"GPIO6B3",7)==0)
	{	gpio = RK30_PIN6_PB3;	 
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO6B3_TESTCLOCKOUT_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO6B4",7)==0)
	{	gpio = RK30_PIN6_PB4;	 
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO6B4_TESTCLOCKOUT_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}
else if(strncmp(buf,"GPIO6A0",7)==0)
	{	gpio = RK30_PIN6_PA0;	 
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO6A0_TESTCLOCKOUT_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO6A2",7)==0)
	{	gpio = RK30_PIN6_PA2;	 
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO6A2_TESTCLOCKOUT_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}
else if(strncmp(buf,"GPIO6A5",7)==0)
	{	gpio = RK30_PIN6_PA5;	 
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO6A5_TESTCLOCKOUT_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO6A6",7)==0)
	{	gpio = RK30_PIN6_PA6;	 
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO6A6_TESTCLOCKOUT_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}











	else if(strncmp(buf,"GPIO2C1",7)==0)
	{	gpio = RK30_PIN2_PC1;	///if( strlen(buf) == 7 ) goto end_gpio;
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO2C1_LCDC1DATA17_SMCBLSN0_HSADCDATA6_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO2B7",7)==0)
	{	gpio = RK30_PIN2_PB7;	 
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO2B7_LCDC1DATA15_SMCADDR19_HSADCDATA7_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO2B5",7)==0)
	{	gpio = RK30_PIN2_PB5;	 
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO2B5_LCDC1DATA13_SMCADDR17_HSADCDATA8_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO2C4",7)==0) ///
	{	gpio = RK30_PIN2_PC4;	 
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO2C4_LCDC1DATA20_SPI1CSN0_HSADCDATA1_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO2C7",7)==0)
	{	gpio = RK30_PIN2_PC7;	 
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO2C7_LCDC1DATA23_SPI1CSN1_HSADCDATA4_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO4C5",7)==0)///
	{	gpio = RK30_PIN4_PC5;	
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO4C5_SMCDATA5_TRACEDATA5_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO4C2",7)==0)
	{	gpio = RK30_PIN4_PC2;	
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO4C2_SMCDATA2_TRACEDATA2_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO3A1",7)==0)  ///
	{	gpio = RK30_PIN3_PA1;	
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO3A1_I2C2SCL_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO3A0",7)==0)
	{	gpio = RK30_PIN3_PA0;	
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO3A0_I2C2SDA_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO4B7",7)==0)///
	{	gpio = RK30_PIN4_PB7;	
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO4B7_SPI0CSN1_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO6A1",7)==0)
	{	gpio = RK30_PIN6_PA1;	
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO6A1_TESTCLOCKOUT_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);  ////FOLLWOING IS CAM
	}else if(strncmp(buf,"GPIO1B1",7)==0)
	{	gpio = RK30_PIN1_PB1;	
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO1B1_UART2SOUT_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO1B0",7)==0)
	{	gpio = RK30_PIN1_PB0;	
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO1B0_UART2SIN_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO3D4",7)==0)
	{	gpio = RK30_PIN3_PD4;	
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO3D4_UART3SOUT_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO3D3",7)==0)
	{	gpio = RK30_PIN3_PD3;	
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO3D3_UART3SIN_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO1A5",7)==0)
	{	gpio = RK30_PIN1_PA5;	
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO1A5_UART1SOUT_SPI0CLK_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO1A4",7)==0)
	{	gpio = RK30_PIN1_PA4;	
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO1A4_UART1SIN_SPI0CSN0_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO6A5",7)==0)
	{	gpio = RK30_PIN6_PA5;	
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO6A5_TESTCLOCKOUT_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO6A7",7)==0)
	{	gpio = RK30_PIN6_PA7;	
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO6A7_TESTCLOCKOUT_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO3B6",7)==0)
	{	gpio = RK30_PIN3_PB6;	
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO3B6_SDMMC0DETECTN_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO0A4",7)==0)                 ///add for v2
	{	gpio = RK30_PIN0_PA4;	
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO0A4_PWM1_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}else if(strncmp(buf,"GPIO0D6",7)==0)
	{	gpio = RK30_PIN0_PD6;	
		strncpy(req_name,buf,7);
		rk30_mux_api_set(GPIO0D6_PWM2_NAME,0);
		ret = gpio_setting_tst(  gpio,buf,req_name);
	}
#endif
end_gpio:
    return ret;///ret;
}
Пример #23
0
static int init_rk3066b_lcdc(struct rk_lcdc_device_driver *dev_drv)
{
	struct rk3066b_lcdc_device *lcdc_dev = container_of(dev_drv,struct rk3066b_lcdc_device,driver);
	if(lcdc_dev->id == 0) //lcdc0
	{
		lcdc_dev->pd = clk_get(NULL,"pd_lcdc0");
		lcdc_dev->hclk = clk_get(NULL,"hclk_lcdc0"); 
		lcdc_dev->aclk = clk_get(NULL,"aclk_lcdc0");
		lcdc_dev->dclk = clk_get(NULL,"dclk_lcdc0");
	}
	else if(lcdc_dev->id == 1)
	{
		lcdc_dev->pd = clk_get(NULL,"pd_lcdc1");
		lcdc_dev->hclk = clk_get(NULL,"hclk_lcdc1");  
		lcdc_dev->aclk = clk_get(NULL,"aclk_lcdc1");
		lcdc_dev->dclk = clk_get(NULL,"dclk_lcdc1");
	}
	else
	{
		printk(KERN_ERR "invalid lcdc device!\n");
		return -EINVAL;
	}
	if (IS_ERR(lcdc_dev->pd) || (IS_ERR(lcdc_dev->aclk)) ||(IS_ERR(lcdc_dev->dclk)) || (IS_ERR(lcdc_dev->hclk)))
    	{
       		printk(KERN_ERR "failed to get lcdc%d clk source\n",lcdc_dev->id);
   	}
	clk_enable(lcdc_dev->pd);
	clk_enable(lcdc_dev->hclk);  //enable aclk and hclk for register config
	clk_enable(lcdc_dev->aclk);  
	lcdc_dev->clk_on = 1;

	if(lcdc_dev->id == 1) //iomux for lcdc1
	{
		rk30_mux_api_set(GPIO2D0_LCDC1DCLK_SMCCSN0_NAME,GPIO2D_LCDC1DCLK);
		rk30_mux_api_set(GPIO2D1_LCDC1DEN_SMCWEN_NAME,GPIO2D_LCDC1DEN);
		rk30_mux_api_set(GPIO2D2_LCDC1HSYNC_SMCOEN_NAME,GPIO2D_LCDC1HSYNC);
		rk30_mux_api_set(GPIO2D3_LCDC1VSYNC_SMCADVN_NAME,GPIO2D_LCDC1VSYNC);
		rk30_mux_api_set(GPIO2A0_LCDC1DATA0_SMCDATA0_TRACEDATA0_NAME,GPIO2A_LCDC1DATA0);
		rk30_mux_api_set(GPIO2A1_LCDC1DATA1_SMCDATA1_TRACEDATA1_NAME,GPIO2A_LCDC1DATA1);
		rk30_mux_api_set(GPIO2A2_LCDC1DATA2_SMCDATA2_TRACEDATA2_NAME,GPIO2A_LCDC1DATA2);
		rk30_mux_api_set(GPIO2A3_LCDC1DATA3_SMCDATA3_TRACEDATA3_NAME,GPIO2A_LCDC1DATA3);
		rk30_mux_api_set(GPIO2A4_LCDC1DATA4_SMCDATA4_TRACEDATA4_NAME,GPIO2A_LCDC1DATA4);
		rk30_mux_api_set(GPIO2A5_LCDC1DATA5_SMCDATA5_TRACEDATA5_NAME,GPIO2A_LCDC1DATA5);
		rk30_mux_api_set(GPIO2A6_LCDC1DATA6_SMCDATA6_TRACEDATA6_NAME,GPIO2A_LCDC1DATA6);
		rk30_mux_api_set(GPIO2A7_LCDC1DATA7_SMCDATA7_TRACEDATA7_NAME,GPIO2A_LCDC1DATA7);
		rk30_mux_api_set(GPIO2B0_LCDC1DATA8_SMCDATA8_TRACEDATA8_NAME,GPIO2B_LCDC1DATA8);
		rk30_mux_api_set(GPIO2B1_LCDC1DATA9_SMCDATA9_TRACEDATA9_NAME,GPIO2B_LCDC1DATA9);
		rk30_mux_api_set(GPIO2B2_LCDC1DATA10_SMCDATA10_TRACEDATA10_NAME,GPIO2B_LCDC1DATA10);
		rk30_mux_api_set(GPIO2B3_LCDC1DATA11_SMCDATA11_TRACEDATA11_NAME,GPIO2B_LCDC1DATA11);
		rk30_mux_api_set(GPIO2B4_LCDC1DATA12_SMCDATA12_TRACEDATA12_NAME,GPIO2B_LCDC1DATA12);
		rk30_mux_api_set(GPIO2B5_LCDC1DATA13_SMCDATA13_TRACEDATA13_NAME,GPIO2B_LCDC1DATA13);
		rk30_mux_api_set(GPIO2B6_LCDC1DATA14_SMCDATA14_TRACEDATA14_NAME,GPIO2B_LCDC1DATA14);
		rk30_mux_api_set(GPIO2B7_LCDC1DATA15_SMCDATA15_TRACEDATA15_NAME,GPIO2B_LCDC1DATA15);
		rk30_mux_api_set(GPIO2C0_LCDC1DATA16_SMCADDR0_TRACECLK_NAME,GPIO2C_LCDC1DATA16);
		rk30_mux_api_set(GPIO2C1_LCDC1DATA17_SMCADDR1_TRACECTL_NAME,GPIO2C_LCDC1DATA17);
		rk30_mux_api_set(GPIO2C2_LCDC1DATA18_SMCADDR2_NAME,GPIO2C_LCDC1DATA18);
		rk30_mux_api_set(GPIO2C3_LCDC1DATA19_SMCADDR3_NAME,GPIO2C_LCDC1DATA19);
		rk30_mux_api_set(GPIO2C4_LCDC1DATA20_SMCADDR4_NAME,GPIO2C_LCDC1DATA20);
		rk30_mux_api_set(GPIO2C5_LCDC1DATA21_SMCADDR5_NAME,GPIO2C_LCDC1DATA21);
		rk30_mux_api_set(GPIO2C6_LCDC1DATA22_SMCADDR6_NAME,GPIO2C_LCDC1DATA22);
		rk30_mux_api_set(GPIO2C7_LCDC1DATA23_SMCADDR7_NAME,GPIO2C_LCDC1DATA23);
		
	}
	LcdMskReg(lcdc_dev,SYS_CFG, m_LCDC_AXICLK_AUTO_ENABLE | m_W0_AXI_OUTSTANDING2 |
		m_W1_AXI_OUTSTANDING2,v_LCDC_AXICLK_AUTO_ENABLE(1) | v_W0_AXI_OUTSTANDING2(1) |
		v_W1_AXI_OUTSTANDING2(1));//eanble axi-clk auto gating for low power
	 LcdWrReg(lcdc_dev,AXI_MS_ID,v_HWC_CHANNEL_ID(5) | v_WIN2_CHANNEL_ID(4) |
	 	v_WIN1_YRGB_CHANNEL_ID(3) | v_WIN0_CBR_CHANNEL_ID(2) | 
	 	v_WIN0_YRGB_CHANNEL_ID(1));
	LcdMskReg(lcdc_dev, INT_STATUS,m_HOR_STARTMASK| m_FRM_STARTMASK | 
    	      m_SCANNING_MASK, v_HOR_STARTMASK(1) | v_FRM_STARTMASK(1) | 
    	      v_SCANNING_MASK(1));  //mask all interrupt in init
	LcdMskReg(lcdc_dev,FIFO_WATER_MARK,m_WIN1_FIFO_FULL_LEVEL,v_WIN1_FIFO_FULL_LEVEL(0x1e0));
	//LCDC_REG_CFG_DONE();  // write any value to  REG_CFG_DONE let config become effective
	return 0;
}
Пример #24
0
static int kxtik_init_platform_hw(void)
{
	rk30_mux_api_set(GPIO4C0_SMCDATA0_TRACEDATA0_NAME, GPIO4C_GPIO4C0);

	return 0;
}
static void rk29_sdmmc_gpio_open(int device_id, int on)
{
    switch(device_id)
    {
        case 0://mmc0
        {
            #ifdef CONFIG_SDMMC0_RK29
            if(on)
            {
                gpio_direction_output(GPIO3B_GPIO3B0,GPIO_HIGH);//set mmc0-clk to high
                gpio_direction_output(GPIO3B_GPIO3B1,GPIO_HIGH);// set mmc0-cmd to high.
                gpio_direction_output(GPIO3B_GPIO3B2,GPIO_HIGH);//set mmc0-data0 to high.
                gpio_direction_output(GPIO3B_GPIO3B3,GPIO_HIGH);//set mmc0-data1 to high.
                gpio_direction_output(GPIO3B_GPIO3B4,GPIO_HIGH);//set mmc0-data2 to high.
                gpio_direction_output(GPIO3B_GPIO3B5,GPIO_HIGH);//set mmc0-data3 to high.

                mdelay(30);
            }
            else
            {
                rk30_mux_api_set(GPIO3B0_SDMMC0CLKOUT_NAME, GPIO3B_GPIO3B0);
                gpio_request(RK30_PIN3_PB0, "mmc0-clk");
                gpio_direction_output(RK30_PIN3_PB0,GPIO_LOW);//set mmc0-clk to low.

                rk30_mux_api_set(GPIO3B1_SDMMC0CMD_NAME, GPIO3B_GPIO3B1);
                gpio_request(RK30_PIN3_PB1, "mmc0-cmd");
                gpio_direction_output(RK30_PIN3_PB1,GPIO_LOW);//set mmc0-cmd to low.

                rk30_mux_api_set(GPIO3B2_SDMMC0DATA0_NAME, GPIO3B_GPIO3B2);
                gpio_request(RK30_PIN3_PB2, "mmc0-data0");
                gpio_direction_output(RK30_PIN3_PB2,GPIO_LOW);//set mmc0-data0 to low.

                rk30_mux_api_set(GPIO3B3_SDMMC0DATA1_NAME, GPIO3B_GPIO3B3);
                gpio_request(RK30_PIN3_PB3, "mmc0-data1");
                gpio_direction_output(RK30_PIN3_PB3,GPIO_LOW);//set mmc0-data1 to low.

                rk30_mux_api_set(GPIO3B4_SDMMC0DATA2_NAME, GPIO3B_GPIO3B4);
                gpio_request(RK30_PIN3_PB4, "mmc0-data2");
                gpio_direction_output(RK30_PIN3_PB4,GPIO_LOW);//set mmc0-data2 to low.

                rk30_mux_api_set(GPIO3B5_SDMMC0DATA3_NAME, GPIO3B_GPIO3B5);
                gpio_request(RK30_PIN3_PB5, "mmc0-data3");
                gpio_direction_output(RK30_PIN3_PB5,GPIO_LOW);//set mmc0-data3 to low.

                mdelay(30);
            }
            #endif
        }
        break;
        
        case 1://mmc1
        {
            #ifdef CONFIG_SDMMC1_RK29
            if(on)
            {
                gpio_direction_output(RK30_PIN3_PC5,GPIO_HIGH);//set mmc1-clk to high
                gpio_direction_output(RK30_PIN3_PC0,GPIO_HIGH);//set mmc1-cmd to high.
                gpio_direction_output(RK30_PIN3_PC1,GPIO_HIGH);//set mmc1-data0 to high.
                gpio_direction_output(RK30_PIN3_PC2,GPIO_HIGH);//set mmc1-data1 to high.
                gpio_direction_output(RK30_PIN3_PC3,GPIO_HIGH);//set mmc1-data2 to high.
                gpio_direction_output(RK30_PIN3_PC5,GPIO_HIGH);//set mmc1-data3 to high.
                mdelay(100);
            }
            else
            {
                rk30_mux_api_set(GPIO3C5_SDMMC1CLKOUT_NAME, GPIO3C_GPIO3C5);
                gpio_request(RK30_PIN3_PC5, "mmc1-clk");
                gpio_direction_output(RK30_PIN3_PC5,GPIO_LOW);//set mmc1-clk to low.

                rk30_mux_api_set(GPIO3C0_SMMC1CMD_NAME, GPIO3C_GPIO3C0);
                gpio_request(RK30_PIN3_PC0, "mmc1-cmd");
                gpio_direction_output(RK30_PIN3_PC0,GPIO_LOW);//set mmc1-cmd to low.

                rk30_mux_api_set(GPIO3C1_SDMMC1DATA0_NAME, GPIO3C_GPIO3C1);
                gpio_request(RK30_PIN3_PC1, "mmc1-data0");
                gpio_direction_output(RK30_PIN3_PC1,GPIO_LOW);//set mmc1-data0 to low.

                mdelay(100);
            }
            #endif
        }
        break; 
        
        case 2: //mmc2
        break;
        
        default:
        break;
    }
}
Пример #26
0
static int adv7180_probe(struct i2c_client *client,
                         const struct i2c_device_id *id)
{
    struct adv7180_state *state;
    struct v4l2_subdev *sd;
    struct soc_camera_device *icd = client->dev.platform_data;
    struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
    int ret;

    printk("%s %d\n", __func__, __LINE__);
    /* Check if the adapter supports the needed features */
    if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
        return -EIO;

    printk("%s %d\n", __func__, __LINE__);
    v4l_info(client, "chip found @ 0x%02x (%s)\n",
             client->addr << 1, client->adapter->name);

    printk("%s %d\n", __func__, __LINE__);
    state = kzalloc(sizeof(struct adv7180_state), GFP_KERNEL);
    if (state == NULL) {
        ret = -ENOMEM;
        goto err;
    }
    printk("%s %d\n", __func__, __LINE__);

    rk30_mux_api_set(GPIO0B7_I2S8CHSDO3_NAME, GPIO0B_GPIO0B7);
    ret = gpio_request(ADV7180_CVBS_IN_DET, "ADV_CVBS_INT");
    if (ret != 0)
    {
        gpio_free(ADV7180_CVBS_IN_DET);
        printk(KERN_ERR "request ADV7180_CVBS_IN_DET pin fail!\n");
        return -1;
    }
    gpio_direction_input(ADV7180_CVBS_IN_DET);

    ret = gpio_request(ADV7180_YCRCB_IN_DET, "ADV_YCRCB_INT");
    if (ret != 0)
    {
        gpio_free(ADV7180_YCRCB_IN_DET);
        printk(KERN_ERR "request ADV7180_YCRCB_IN_DET  pin fail!\n");
        return -1;
    }
    gpio_direction_input(ADV7180_YCRCB_IN_DET);

    state->cvbs_irq = gpio_to_irq(ADV7180_CVBS_IN_DET);
    state->ycrcb_irq = gpio_to_irq(ADV7180_YCRCB_IN_DET);

    INIT_WORK(&state->cvbs_work, adv7180_cvbs_work);
    INIT_WORK(&state->ycrcb_work, adv7180_ycrcb_work);
    mutex_init(&state->mutex);
    state->autodetect = true;
    sd = &state->sd;
    v4l2_i2c_subdev_init(sd, client, &adv7180_ops);

    state->icd = icd;
    icd->ops = &adv7180_sensor_ops;
    icd->user_width = adv7180_pic_sizes[0].width;
    icd->user_height = adv7180_pic_sizes[0].height;
    icd->colorspace = adv7180_colour_fmts[0].colorspace;

    adv7180_pwr_ctl(icd, 1);
    ret = 0;

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

    ret = i2c_smbus_read_byte_data(client, ADV7180_IDENT_REG);
    /*
    if (ret != ADV7180_ID_7180)
    	goto err_unreg_subdev;
    	*/

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

    ret = i2c_smbus_write_byte_data(client, 0x1d, 0x00); /* 27M/28M crystal */

    int i;
    if(gpio_get_value(ADV7180_YCRCB_IN_DET)==GPIO_LOW) {
        printk("adv7180 ycrcb init\n");
        for(i=0; i<15; i++)
            i2c_smbus_write_byte_data(client, init_ycrcb[i].reg, init_ycrcb[i].val);

    } else {
        printk("adv7180 cvbs init\n");
        for(i=0; i<15; i++)
            i2c_smbus_write_byte_data(client, init_cvbs[i].reg, init_cvbs[i].val);
    }


#if 0
    /* register for interrupts */
    if (state->irq > 0) {
        ret = request_irq(state->irq, adv7180_irq, 0, DRIVER_NAME,
                          state);
        if (ret)
            goto err_unreg_subdev;
        printk("%s %d\n", __func__, __LINE__);

        ret = i2c_smbus_write_byte_data(client, ADV7180_ADI_CTRL_REG,
                                        ADV7180_ADI_CTRL_IRQ_SPACE);
        if (ret < 0)
            goto err_unreg_subdev;
        printk("%s %d\n", __func__, __LINE__);

        /* config the Interrupt pin to be active low */
        ret = i2c_smbus_write_byte_data(client, ADV7180_ICONF1_ADI,
                                        ADV7180_ICONF1_ACTIVE_LOW | ADV7180_ICONF1_PSYNC_ONLY);
        if (ret < 0)
            goto err_unreg_subdev;
        printk("%s %d\n", __func__, __LINE__);

        ret = i2c_smbus_write_byte_data(client, ADV7180_IMR1_ADI, 0);
        if (ret < 0)
            goto err_unreg_subdev;
        printk("%s %d\n", __func__, __LINE__);

        ret = i2c_smbus_write_byte_data(client, ADV7180_IMR2_ADI, 0);
        if (ret < 0)
            goto err_unreg_subdev;
        printk("%s %d\n", __func__, __LINE__);

        /* enable AD change interrupts interrupts */
        ret = i2c_smbus_write_byte_data(client, ADV7180_IMR3_ADI,
                                        ADV7180_IRQ3_AD_CHANGE);
        if (ret < 0)
            goto err_unreg_subdev;
        printk("%s %d\n", __func__, __LINE__);

        ret = i2c_smbus_write_byte_data(client, ADV7180_IMR4_ADI, 0);
        if (ret < 0)
            goto err_unreg_subdev;
        printk("%s %d\n", __func__, __LINE__);

        ret = i2c_smbus_write_byte_data(client, ADV7180_ADI_CTRL_REG,
                                        0);
        if (ret < 0)
            goto err_unreg_subdev;
        printk("%s %d\n", __func__, __LINE__);
    }
#endif
    adv7180_pwr_ctl(icd, 0);

    ret = device_create_file(&client->dev, &adv7180_dev_attr);
    if (ret) {
        printk("create device file failed!\n");
    }

    v4l_info(client, "chip probe success @ 0x%02x (%s)\n",
             client->addr << 1, client->adapter->name);

    return 0;

err_unreg_subdev:
    adv7180_pwr_ctl(icd, 0);
    mutex_destroy(&state->mutex);
    v4l2_device_unregister_subdev(sd);
    kfree(state);
err:
    printk(KERN_ERR DRIVER_NAME ": Failed to probe: %d\n", ret);
    return ret;
}
static int mxc6225_init_platform_hw(void)
{
	rk30_mux_api_set(GPIO1B1_SPI_TXD_UART1_SOUT_NAME, GPIO1B_GPIO1B1);
	return 0;
}