static void enable_board_wakeup_source(void)
{
	int gpio_val;
	/* Android does not have touchscreen as wakeup source */
#if !defined(CONFIG_ANDROID)
	gpio_val = omap_mux_get_gpio(OMAP4_TOUCH_IRQ_1);
	if ((gpio_val & OMAP44XX_PADCONF_WAKEUPENABLE0) == 0) {
		gpio_val |= OMAP44XX_PADCONF_WAKEUPENABLE0;
		omap_mux_set_gpio(gpio_val, OMAP4_TOUCH_IRQ_1);
	}

#endif
	gpio_val = omap_mux_get_gpio(32);

	if ((gpio_val & OMAP44XX_PADCONF_WAKEUPENABLE0) == 0) {
		gpio_val |= OMAP44XX_PADCONF_WAKEUPENABLE0;
		omap_mux_set_gpio(gpio_val, 32);
	}

	gpio_val = omap_mux_get_gpio(29);

	if ((gpio_val & OMAP44XX_PADCONF_WAKEUPENABLE0) == 0) {
		gpio_val |= OMAP44XX_PADCONF_WAKEUPENABLE0;
		omap_mux_set_gpio(gpio_val, 29);
	}

	/*
	 * Enable IO daisy for sys_nirq1/2, to be able to
	 * wakeup from interrupts from PMIC/Audio IC.
	 * Needed only in Device OFF mode.
	 */
	omap_mux_enable_wakeup("sys_nirq1");
}
static void tsp_set_power_gpio(bool on)
{
	u32 r;

	if (on) {
		pr_info("tsp: power on.\n");
		gpio_set_value(tsp_gpios[GPIO_TOUCH_EN].gpio, 1);

		r = omap4_ctrl_pad_readl(
				OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_I2C_0);
		r &= ~OMAP4_I2C3_SDA_PULLUPRESX_MASK;
		r &= ~OMAP4_I2C3_SCL_PULLUPRESX_MASK;
		omap4_ctrl_pad_writel(r,
				OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_I2C_0);
		omap_mux_set_gpio(OMAP_PIN_INPUT | OMAP_MUX_MODE3,
					tsp_gpios[GPIO_TOUCH_nINT].gpio);
	} else {
		pr_info("tsp: power off.\n");
		gpio_set_value(tsp_gpios[GPIO_TOUCH_EN].gpio, 0);

		/* Below register settings needed by prevent current leakage. */
		r = omap4_ctrl_pad_readl(
			OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_I2C_0);
		r |= OMAP4_I2C3_SDA_PULLUPRESX_MASK;
		r |= OMAP4_I2C3_SCL_PULLUPRESX_MASK;
		omap4_ctrl_pad_writel(r,
				OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_I2C_0);
		omap_mux_set_gpio(OMAP_PIN_INPUT | OMAP_MUX_MODE3,
					tsp_gpios[GPIO_TOUCH_nINT].gpio);
	}
	return;
}
int __init omap4_espresso10_irled_init(void)
{
	int ret = 0;
	int i;
	unsigned int boardtype = omap4_espresso10_get_board_type();

	if (system_rev > 6 && boardtype != SEC_MACHINE_ESPRESSO10_USA_BBY) {
		for (i = 0; i < ARRAY_SIZE(irled_gpios); i++) {
			irled_gpios[i].gpio =
			omap_muxtbl_get_gpio_by_name(irled_gpios[i].label);
			omap_mux_set_gpio(
				OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE7,
				irled_gpios[i].gpio);
		}

		return 0;
	}

	for (i = 0; i < ARRAY_SIZE(irled_gpios); i++)
		irled_gpios[i].gpio =
		    omap_muxtbl_get_gpio_by_name(irled_gpios[i].label);
	gpio_request_array(irled_gpios, ARRAY_SIZE(irled_gpios));

	ret = irled_init();
	if (ret < 0) {
		pr_err("irled: irled_init failed\n");
		for (i = 0; i < ARRAY_SIZE(irled_gpios); i++)
			gpio_free(irled_gpios[i].gpio);
	}

	return ret;
}
void __init omap4_gokey_charger_init(void)
{
	int ret;
	charger_gpio_init();

	gokey_gpio_i2c_init();

	battery_manager_pdata.ta_gpio =
			omap_muxtbl_get_gpio_by_name("TA_nCHG");

	bq24157_pdata.ta_gpio =
				omap_muxtbl_get_gpio_by_name("TA_nCHG");

	bq24157_pdata.ta_irq =
				gpio_to_irq(bq24157_pdata.ta_gpio);

	bq24157_pdata.ta_enable_gpio =
				omap_muxtbl_get_gpio_by_name("TA_nCONNECTED");

	battery_manager_pdata.bat_removal =
				omap_muxtbl_get_gpio_by_name("BAT_REMOVAL");

	if (system_rev < 2)
		omap_mux_set_gpio(OMAP_PIN_INPUT_PULLUP |
			OMAP_MUX_MODE3, battery_manager_pdata.bat_removal);

	bq24157_pdata.vf_gpio = battery_manager_pdata.bat_removal;
	bq24157_pdata.vf_irq = gpio_to_irq(bq24157_pdata.vf_gpio);

	battery_manager_pdata.jig_on =
				omap_muxtbl_get_gpio_by_name("JIG_ON_18");

	battery_manager_pdata.bootmode = sec_bootmode;

	pr_info("%s: bootmode is %d\n",
		__func__, battery_manager_pdata.bootmode);

/*
	ret = platform_device_register(&gokey_gpio_i2c5_device);
	if (ret < 0)
		pr_err("%s: gpio_i2c5 device register fail\n", __func__);
*/
	ret = platform_device_register(&gokey_gpio_i2c7_device);
	if (ret < 0)
		pr_err("%s: gpio_i2c7 device register fail\n", __func__);

	i2c_register_board_info(4, bq24157_i2c, ARRAY_SIZE(bq24157_i2c));
	i2c_register_board_info(7, beagle_i2c2_boardinfo,
		ARRAY_SIZE(beagle_i2c2_boardinfo));
	ret = platform_device_register(&battery_manager_device);
	if (ret < 0)
		pr_err("%s: battery monitor device register fail\n", __func__);
}
Beispiel #5
0
static void __init omap3_beagle_init(void)
{
	omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
	omap3_beagle_i2c_init();
	printk(KERN_INFO "*************INIT I2C**************\n");
	platform_add_devices(omap3_beagle_devices,
			ARRAY_SIZE(omap3_beagle_devices));
	omap_serial_init();
	
//	omap_mux_init_gpio(170, OMAP_PIN_INPUT);
//	gpio_request(170, "DVI_nPD");
//	/* REVISIT leave DVI powered down until it's needed ... */
//	gpio_direction_output(170, true);
	
//added by haolong to fix reset io of smsc9514, 2012/04/10-------
	printk(KERN_ERR "#########pulldown gpio 40#######\n");
	if(omap_mux_init_gpio(40, OMAP_PIN_OUTPUT) < 0)
	{
			printk(KERN_ERR "Unable to mux HUB_RST\n");
	}
	if (gpio_request(40, "HUB_RST") < 0) {
			printk(KERN_ERR "Unable to get HUB_RST GPIO\n");
	}
	gpio_direction_output(40, 0);
//-------------------------------------------------------

	usb_musb_init();
	usb_ehci_init(&ehci_pdata);
	omap3beagle_flash_init();

	/* Ensure SDRC pins are mux'd for self-refresh */
	omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT);
	omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT);
//--------------------------20111121 modified by haolong---------------------
//	if (gpio_request(129, "DVI reset") < 0) {
//		printk(KERN_ERR "Unable to get DVI reset GPIO\n");
//		return;
//	}

//	gpio_direction_output(129, 1);
//------------------------------------------------------------------------
//2012/04/17 modified by haolong
	omap_mux_set_gpio(OMAP_MUX_MODE4, 15);	
//	if(omap_mux_init_gpio(15, OMAP_PIN_OUTPUT) < 0)
//	{
//			printk(KERN_ERR "Unable to mux GPIO15_IRQ\n");
//	}
//	if (gpio_request(15, "GPIO15_IRQ") < 0) {
//			printk(KERN_ERR "Unable to get IRQ GPIO\n");
//	}
//	gpio_direction_output(15, 1);
//---------------------------
}
void touch_i2c_to_gpio(bool to_gpios)
{
	if (to_gpios) {
		gpio_direction_output(tsp_gpios[GPIO_TOUCH_nINT].gpio, 0);
		omap_mux_set_gpio(OMAP_PIN_INPUT | OMAP_MUX_MODE3,
					tsp_gpios[GPIO_TOUCH_nINT].gpio);

		gpio_direction_output(tsp_gpios[GPIO_TOUCH_SCL].gpio, 0);
		omap_mux_set_gpio(OMAP_PIN_INPUT | OMAP_MUX_MODE3,
					tsp_gpios[GPIO_TOUCH_SCL].gpio);

		gpio_direction_output(tsp_gpios[GPIO_TOUCH_SDA].gpio, 0);
		omap_mux_set_gpio(OMAP_PIN_INPUT | OMAP_MUX_MODE3,
					tsp_gpios[GPIO_TOUCH_SDA].gpio);
	} else {
		gpio_direction_output(tsp_gpios[GPIO_TOUCH_nINT].gpio, 1);
		gpio_direction_input(tsp_gpios[GPIO_TOUCH_nINT].gpio);
		omap_mux_set_gpio(OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE3,
					tsp_gpios[GPIO_TOUCH_nINT].gpio);

		gpio_direction_output(tsp_gpios[GPIO_TOUCH_SCL].gpio, 1);
		gpio_direction_input(tsp_gpios[GPIO_TOUCH_SCL].gpio);
		omap_mux_set_gpio(OMAP_PIN_INPUT | OMAP_MUX_MODE0,
					tsp_gpios[GPIO_TOUCH_SCL].gpio);

		gpio_direction_output(tsp_gpios[GPIO_TOUCH_SDA].gpio, 1);
		gpio_direction_input(tsp_gpios[GPIO_TOUCH_SDA].gpio);
		omap_mux_set_gpio(OMAP_PIN_INPUT | OMAP_MUX_MODE0,
					tsp_gpios[GPIO_TOUCH_SDA].gpio);
	}

	return;
}
static void __init gokey_tsp_gpio_init(void)
{
	int i;
	u32 r;

	for (i = 0; i < ARRAY_SIZE(tsp_gpios); i++)
		tsp_gpios[i].gpio =
			omap_muxtbl_get_gpio_by_name(tsp_gpios[i].label);
	gpio_request_array(tsp_gpios, ARRAY_SIZE(tsp_gpios));

	gokey_i2c3_boardinfo[0].irq =
		gpio_to_irq(tsp_gpios[GPIO_TOUCH_nINT].gpio);
	/* i2c3 line using external pullup */
	r = omap4_ctrl_pad_readl(OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_I2C_0);
	r |= (1 << OMAP4_I2C3_SDA_PULLUPRESX_SHIFT);
	r |= (1 << OMAP4_I2C3_SCL_PULLUPRESX_SHIFT);
	omap4_ctrl_pad_writel(r, OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_I2C_0);
	omap_mux_set_gpio(OMAP_PIN_INPUT | OMAP_PIN_OFF_WAKEUPENABLE
			| OMAP_MUX_MODE3, tsp_gpios[GPIO_TOUCH_nINT].gpio);
}
int mt_bt_power_on(void)
{
    int error;
    printk(KERN_INFO MODULE_TAG "mt_bt_power_on ++\n");
    
/************************************************************
 *  Make sure BT_PWR_EN is default gpio output low when
 *  system boot up, otherwise MT6622 gets actived unexpectedly 
 ************************************************************/
    
    // URXD, UTXD
//    s3c_gpio_cfgpin(GPIO_BT_URXD_PIN, S3C_GPIO_SFN(0x2));
//    s3c_gpio_cfgpin(GPIO_BT_UTXD_PIN, S3C_GPIO_SFN(0x2));
    
    // PCMIN, PCMOUT, PCMCLK, PCMSYNC
    /* not configured since SMDK4x12 has no modem */
    
    // EINT

    // EINT
    /* set to EINT mode */
    gpio_direction_input(GPIO_BT_EINT_PIN);/////////important
    irq_num = gpio_to_irq(GPIO_BT_EINT_PIN);

    printk("GPIO_BT_PWR_EN_PIN before config(out_h: %d) \n", gpio_get_value(GPIO_BT_PWR_EN_PIN));
// PWR_EN & RESET pull high
    omap_mux_set_gpio(3, GPIO_BT_PWR_EN_PIN);
    gpio_direction_output(GPIO_BT_PWR_EN_PIN, 1);
    printk("GPIO_BT_PWR_EN_PIN after config(out_h: %d) \n", gpio_get_value(GPIO_BT_PWR_EN_PIN));
    msleep(1000);

    // PWR_EN & RESET
    /* PWR_EN pin output high */
//    s3c_gpio_cfgpin(GPIO_BT_PWR_EN_PIN, S3C_GPIO_SFN(0x1));
//    gpio_direction_output(GPIO_BT_PWR_EN_PIN, 1);
    /* RESET pin set to low */
//    s3c_gpio_cfgpin(GPIO_BT_RESET_PIN, S3C_GPIO_SFN(0x1));
//    gpio_direction_output(GPIO_BT_RESET_PIN, 0);
    
//    msleep(15);
    /* RESET pin pull up */
//    gpio_direction_output(GPIO_BT_RESET_PIN, 1);
//    msleep(1000);
    
    error = mt_bt_request_irq();
    if (error){
        /* Clear GPIO configurations */
        gpio_direction_output(GPIO_BT_PWR_EN_PIN, 0);
//        gpio_direction_output(GPIO_BT_RESET_PIN, 0);
//	omap_mux_set_gpio(3, GPIO_BT_EINT_PIN);
	gpio_direction_output(GPIO_BT_EINT_PIN, 0);
//        s3c_gpio_cfgpin(GPIO_BT_EINT_PIN, S3C_GPIO_SFN(0x1));
//        gpio_direction_output(GPIO_BT_EINT_PIN, 0);
//        s3c_gpio_cfgpin(GPIO_BT_URXD_PIN, S3C_GPIO_SFN(0x1));
//        gpio_direction_output(GPIO_BT_URXD_PIN, 0);
//        s3c_gpio_cfgpin(GPIO_BT_UTXD_PIN, S3C_GPIO_SFN(0x1));
//        gpio_direction_output(GPIO_BT_UTXD_PIN, 0);
        return error;
    }
    
    printk(KERN_INFO MODULE_TAG "mt_bt_power_on --\n");
    
    return 0;
}