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__); }
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; }