static void aic3008_amp_powerdown(int type) { switch (type) { case HEADSET_AMP: if (pcbid >= PROJECT_PHASE_XB || board_get_sku_tag() == 0x34600) { power_deconfig("AUD_HEADPHONE_EN", TEGRA_GPIO_PP7, GPIO_OUTPUT); } break; case SPEAKER_AMP: if (pcbid >= PROJECT_PHASE_XB || board_get_sku_tag() == 0x34600) { #if (defined(CONFIG_SND_AMP_TFA9887)) set_tfa9887_spkamp(0, 0); #endif } else { power_deconfig("AUD_SPK_EN", TEGRA_GPIO_PP6, GPIO_OUTPUT); } break; case DOCK_AMP: if (pcbid >= PROJECT_PHASE_XB || board_get_sku_tag() == 0x34600) { } else { power_deconfig("AUD_LINEOUT_EN", TEGRA_GPIO_PP7, GPIO_OUTPUT); } dock_config("TEGRA_GPIO_DESK_AUD", TEGRA_GPIO_PCC5, false, true); break; default: AUD_ERR("aic3008_amp_powerdown unknown type %d\n", type); break; } return; }
static void aic3008_i2s_control(int dsp_enum) { AUD_DBG("%s %d\n", __func__, dsp_enum); switch (dsp_enum) { case Phone_Default: case Phone_BT: case VOIP_BT: case VOIP_BT_HW_AEC: if (pcbid >= PROJECT_PHASE_XB || board_get_sku_tag() == 0x34600) { power_config("AUD_BT_SEL", TEGRA_GPIO_PK5, GPIO_OUTPUT); } break; case FM_Headset: case FM_Speaker: power_config("AUD_FM_SEL", TEGRA_GPIO_PK6, GPIO_OUTPUT); break; default: if (pcbid >= PROJECT_PHASE_XB || board_get_sku_tag() == 0x34600) { power_deconfig("AUD_BT_SEL", TEGRA_GPIO_PK5, GPIO_OUTPUT); } power_deconfig("AUD_FM_SEL", TEGRA_GPIO_PK6, GPIO_OUTPUT); break; } return; }
static void enrc2u_comp_irq_init(void) { int ret = 0; if(board_get_sku_tag() == 0x34600) { ret = gpio_request(TEGRA_GPIO_PN5, "COMP_INT"); if (ret < 0) { pr_err("[COMP] %s: gpio_request failed %d\n", __func__, ret); return; } ret = gpio_direction_input(TEGRA_GPIO_PN5); if (ret < 0) { pr_err("[COMP] %s: gpio_direction_input failed %d\n", __func__, ret); gpio_free(TEGRA_GPIO_PN5); return; } tegra_gpio_enable(TEGRA_GPIO_PN5); tegra_pinmux_set_pullupdown(TEGRA_PINGROUP_LCD_SDOUT, TEGRA_PUPD_PULL_DOWN); } else { // comp int if ( (htc_get_pcbid_info() < PROJECT_PHASE_XB)){ ret = gpio_request(TEGRA_GPIO_PJ2, "COMP_INT"); if (ret < 0) { pr_err("[COMP] %s: gpio_request failed %d\n", __func__, ret); return; } ret = gpio_direction_input(TEGRA_GPIO_PJ2); if (ret < 0) { pr_err("[COMP] %s: gpio_direction_input failed %d\n", __func__, ret); gpio_free(TEGRA_GPIO_PJ2); return; } tegra_gpio_enable(TEGRA_GPIO_PJ2); tegra_pinmux_set_pullupdown(TEGRA_PINGROUP_GMI_CS1_N, TEGRA_PUPD_NORMAL); } else{ ret = gpio_request(TEGRA_GPIO_PN5, "COMP_INT"); if (ret < 0) { pr_err("[COMP] %s: gpio_request failed %d\n", __func__, ret); return; } ret = gpio_direction_input(TEGRA_GPIO_PN5); if (ret < 0) { pr_err("[COMP] %s: gpio_direction_input failed %d\n", __func__, ret); gpio_free(TEGRA_GPIO_PN5); return; } tegra_gpio_enable(TEGRA_GPIO_PN5); tegra_pinmux_set_pullupdown(TEGRA_PINGROUP_LCD_SDOUT, TEGRA_PUPD_PULL_DOWN); } } }
static void aic3008_hs_vol_control(int db) { switch (db) { case BEATS_GAIN_ON: if (pcbid >= PROJECT_PHASE_XB || board_get_sku_tag() == 0x34600) { power_config("AUD_HP_GAIN_CONTROL", TEGRA_GPIO_PD1, GPIO_OUTPUT); } break; case BEATS_GAIN_OFF: if (pcbid >= PROJECT_PHASE_XB || board_get_sku_tag() == 0x34600) { power_deconfig("AUD_HP_GAIN_CONTROL", TEGRA_GPIO_PD1, GPIO_OUTPUT); } break; default: break; } return; }
static void enrc2u_gsensor_irq_init(void) { int ret = 0; if(board_get_sku_tag() == 0x34600) { ret = gpio_request(TEGRA_GPIO_PS0, "GSNR_INT"); if (ret < 0) { pr_err("%s: gpio_request failed %d\n", __func__, ret); return; } ret = gpio_direction_input(TEGRA_GPIO_PS0); if (ret < 0) { pr_err("%s: gpio_direction_input failed %d\n", __func__, ret); gpio_free(TEGRA_GPIO_PS0); return; } tegra_gpio_enable(TEGRA_GPIO_PS0); tegra_pinmux_set_pullupdown(TEGRA_PINGROUP_KB_ROW8, TEGRA_PUPD_PULL_DOWN); } else { if ( (htc_get_pcbid_info() < PROJECT_PHASE_XB)){ ret = gpio_request(TEGRA_GPIO_PN5, "GSNR_INT"); if (ret < 0) { pr_err("%s: gpio_request failed %d\n", __func__, ret); return; } ret = gpio_direction_input(TEGRA_GPIO_PN5); if (ret < 0) { pr_err("%s: gpio_direction_input failed %d\n", __func__, ret); gpio_free(TEGRA_GPIO_PN5); return; } tegra_gpio_enable(TEGRA_GPIO_PN5); tegra_pinmux_set_pullupdown(TEGRA_PINGROUP_LCD_SDOUT, TEGRA_PUPD_PULL_DOWN); } else{ ret = gpio_request(TEGRA_GPIO_PS0, "GSNR_INT"); if (ret < 0) { pr_err("%s: gpio_request failed %d\n", __func__, ret); return; } ret = gpio_direction_input(TEGRA_GPIO_PS0); if (ret < 0) { pr_err("%s: gpio_direction_input failed %d\n", __func__, ret); gpio_free(TEGRA_GPIO_PS0); return; } tegra_gpio_enable(TEGRA_GPIO_PS0); tegra_pinmux_set_pullupdown(TEGRA_PINGROUP_KB_ROW8, TEGRA_PUPD_PULL_DOWN); } } }
static void aic3008_powerinit(void) { power_config("AUD_MCLK_EN", TEGRA_GPIO_PX7, INIT_OUTPUT_HIGH); power_config("AUD_AIC3008_RST#", TEGRA_GPIO_PW5, INIT_OUTPUT_HIGH); power_config("AUD_MCLK", TEGRA_GPIO_PW4, INIT_OUTPUT_LOW); sfio_deconfig("AUD_MCLK", TEGRA_GPIO_PW4); if (pcbid >= PROJECT_PHASE_XB || board_get_sku_tag() == 0x34600) { power_config("AUD_HP_GAIN_CONTROL", TEGRA_GPIO_PD1, INIT_OUTPUT_LOW); power_config("AUD_SPK_RST#", TEGRA_GPIO_PP6, INIT_OUTPUT_HIGH); power_config("AUD_HEADPHONE_EN", TEGRA_GPIO_PP7, INIT_OUTPUT_LOW); } else { power_config("AUD_SPK_EN", TEGRA_GPIO_PP6, INIT_OUTPUT_LOW); power_config("AUD_LINEOUT_EN", TEGRA_GPIO_PP7, INIT_OUTPUT_LOW); } common_init(); spin_lock_init(&aic3008_power_ctl->spin_lock); aic3008_power_ctl->isPowerOn = true; return; }
static void enrc2u_mpuirq_init(void) { int ret = 0; if(board_get_sku_tag() == 0x34600) { tegra_gpio_enable(TEGRA_GPIO_PJ2); ret = gpio_request(TEGRA_GPIO_PJ2, SENSOR_MPU_NAME); if (ret < 0) { pr_err("%s: gpio_request failed %d\n", __func__, ret); return; } ret = gpio_direction_input(TEGRA_GPIO_PJ2); if (ret < 0) { pr_err("%s: gpio_direction_input failed %d\n", __func__, ret); gpio_free(TEGRA_GPIO_PJ2); return; } tegra_pinmux_set_pullupdown(TEGRA_PINGROUP_GMI_CS1_N, TEGRA_PUPD_PULL_DOWN); i2c_register_board_info(0, mpu3050_i2c0_boardinfo_xb, ARRAY_SIZE(mpu3050_i2c0_boardinfo_xb)); } else{ if ( (htc_get_pcbid_info() < PROJECT_PHASE_XB)){ tegra_gpio_enable(TEGRA_GPIO_PS0); ret = gpio_request(TEGRA_GPIO_PS0, SENSOR_MPU_NAME); if (ret < 0) { pr_err("%s: gpio_request failed %d\n", __func__, ret); return; } ret = gpio_direction_input(TEGRA_GPIO_PS0); if (ret < 0) { pr_err("%s: gpio_direction_input failed %d\n", __func__, ret); gpio_free(TEGRA_GPIO_PS0); return; } tegra_pinmux_set_pullupdown(TEGRA_PINGROUP_KB_ROW8, TEGRA_PUPD_PULL_DOWN); i2c_register_board_info(0, mpu3050_i2c0_boardinfo, ARRAY_SIZE(mpu3050_i2c0_boardinfo)); } else{ tegra_gpio_enable(TEGRA_GPIO_PJ2); ret = gpio_request(TEGRA_GPIO_PJ2, SENSOR_MPU_NAME); if (ret < 0) { pr_err("%s: gpio_request failed %d\n", __func__, ret); return; } ret = gpio_direction_input(TEGRA_GPIO_PJ2); if (ret < 0) { pr_err("%s: gpio_direction_input failed %d\n", __func__, ret); gpio_free(TEGRA_GPIO_PJ2); return; } tegra_pinmux_set_pullupdown(TEGRA_PINGROUP_GMI_CS1_N, TEGRA_PUPD_PULL_DOWN); i2c_register_board_info(0, mpu3050_i2c0_boardinfo_xb, ARRAY_SIZE(mpu3050_i2c0_boardinfo_xb)); } } }
static void __init marvel_init(void) { int rc; int sku_id = 0; char *cid = NULL; struct kobject *properties_kobj; printk("marvel_init() revision = 0x%X\n", system_rev); msm_clock_init(); board_get_cid_tag(&cid); sku_id = board_get_sku_tag(); if (sku_id) printk(KERN_INFO "Marvel show_skuid: 0x%x\n", sku_id); /* for bcm */ bt_export_bd_address(); /* * Setup common MSM GPIOS */ config_gpios(); /* We need to set this pin to 0 only once on power-up; we will * not actually enable the chip until we apply power to it via * vreg. */ gpio_request(MARVEL_GPIO_LS_EN, "ls_en"); gpio_direction_output(MARVEL_GPIO_LS_EN, 0); msm_hw_reset_hook = marvel_reset; msm_acpu_clock_init(&marvel_clock_data); perflock_init(&marvel_perflock_data); #if defined(CONFIG_MSM_SERIAL_DEBUGGER) if (!opt_disable_uart3) msm_serial_debug_init(MSM_UART3_PHYS, INT_UART3, &msm_device_uart3.dev, 1, MSM_GPIO_TO_INT(MARVEL_GPIO_UART3_RX)); #endif msm_add_devices(); #ifdef CONFIG_SERIAL_MSM_HS msm_device_uart_dm1.dev.platform_data = &msm_uart_dm1_pdata; msm_device_uart_dm1.name = "msm_serial_hs_bcm"; /* for bcm */ msm_add_serial_devices(3); #else msm_add_serial_devices(0); #endif msm_add_serial_devices(2); /* msm_change_usb_id(0x0bb4, 0x0c10); */ #ifdef CONFIG_USB_FUNCTION msm_add_usb_id_pin_gpio(MARVEL_GPIO_USB_ID_PIN); msm_add_usb_devices(marvel_phy_reset, NULL); #endif #ifdef CONFIG_USB_ANDROID android_usb_pdata.products[0].product_id = android_usb_pdata.product_id; android_usb_pdata.serial_number = board_serialno(); msm_hsusb_pdata.serial_number = board_serialno(); if ((sku_id & 0xFFF00) == 0x2AB00) { msm_hsusb_pdata.accessory_detect = 2; /* detect by ADC */ msm_hsusb_pdata.use_microp_adc = 1; } msm_device_hsusb.dev.platform_data = &msm_hsusb_pdata; config_marvel_usb_id_gpios(0); platform_device_register(&msm_device_hsusb); platform_device_register(&usb_mass_storage_device); platform_device_register(&android_usb_device); #endif msm_add_mem_devices(&pmem_setting); #ifdef CONFIG_MICROP_COMMON marvel_microp_init(); #endif rc = marvel_init_mmc(system_rev); if (rc) printk(KERN_CRIT "%s: MMC init failure (%d)\n", __func__, rc); properties_kobj = kobject_create_and_add("board_properties", NULL); if (properties_kobj) rc = sysfs_create_group(properties_kobj, &marvel_properties_attr_group); if (!properties_kobj || rc) pr_err("failed to create board_properties\n"); printk(KERN_INFO "[HS_BOARD] (%s) system_rev = %d\n", __func__, system_rev); if (system_rev > 1 || ((sku_id & 0xFFF00) == 0x2AB00)) { htc_headset_microp.dev.platform_data = &htc_headset_microp_data_xc; htc_headset_mgr_data.headset_config_num = ARRAY_SIZE(htc_headset_mgr_config); htc_headset_mgr_data.headset_config = htc_headset_mgr_config; printk(KERN_INFO "[HS_BOARD] (%s) Set MEMS config\n", __func__); } if (system_rev >= 1 && ((sku_id & 0xFFF00) == 0x2AB00)) { htc_headset_microp.dev.platform_data = &htc_headset_microp_data_b14_xb; printk(KERN_INFO "[HS_BOARD] (%s) Set B14 ADC\n", __func__); } /* probe camera driver */ i2c_register_board_info(0, i2c_camera_devices, ARRAY_SIZE(i2c_camera_devices)); msm_device_i2c_init(); platform_add_devices(devices, ARRAY_SIZE(devices)); if ((sku_id & 0xFFF00) == 0x2AB00) { printk(KERN_INFO "Marvel#B14: use BMA250\n"); i2c_register_board_info(0, i2c_devices_B14, ARRAY_SIZE(i2c_devices_B14)); /* probe g-sensor driver */ i2c_register_board_info(0, i2c_bma250_devices, ARRAY_SIZE(i2c_bma250_devices)); } else { printk(KERN_INFO "Marvel: use BMA023\n"); i2c_register_board_info(0, i2c_devices, ARRAY_SIZE(i2c_devices)); } marvel_init_panel(); marvel_init_keypad(); marvel_wifi_init(); msm_init_pmic_vibrator(2800); }