static void smb347_default_setback(void) { struct i2c_client *client = charger->client; int err; if(grouper_query_pcba_revision() > 0x02) { /* Enable volatile writes to registers */ err = smb347_volatile_writes(client, smb347_ENABLE_WRITE); if (err < 0) { dev_err(&client->dev, "%s() error in configuring charger..\n", __func__); } err = smb347_update_reg(client, smb347_PIN_CTRL, PIN_CTRL); if (err < 0) { dev_err(&client->dev, "%s: err %d\n", __func__, err); } err = smb347_update_reg(client, smb347_CHRG_CTRL, ENABLE_APSD); if (err < 0) { dev_err(&client->dev, "%s: err %d\n", __func__, err); } /* Disable volatile writes to registers */ err = smb347_volatile_writes(client, smb347_DISABLE_WRITE); if (err < 0) { dev_err(&client->dev, "%s() error in configuring charger..\n", __func__); } printk("grouper_query_pcba_revision=0x%02x\n", grouper_query_pcba_revision()); } }
/* workqueue function */ static int cable_type_detect(void) { struct i2c_client *client = charger->client; u8 retval; int success = 0; int gpio = TEGRA_GPIO_PV1; if(grouper_query_pcba_revision() <= 0x02) return 0; mutex_lock(&charger->cable_lock); if (gpio_get_value(gpio)) { printk("INOK=H\n"); success = battery_callback(non_cable); } else { printk("INOK=L\n"); /* cable type dection */ retval = smb347_read(client, smb347_STS_REG_E); SMB_NOTICE("Reg3F : 0x%02x\n", retval); if(retval & USBIN) { //USBIN retval = smb347_read(client, smb347_STS_REG_D); SMB_NOTICE("Reg3E : 0x%02x\n", retval); if(retval & APSD_OK) { //APSD completed retval &= APSD_RESULT; if(retval == APSD_CDP) { //APSD resulted printk("Cable: CDP\n"); success = battery_callback(ac_cable); } else if(retval == APSD_DCP) { printk("Cable: DCP\n"); success = battery_callback(ac_cable); } else if(retval == APSD_OTHER) { printk("Cable: OTHER\n"); } else if(retval == APSD_SDP) { printk("Cable: SDP\n"); success = battery_callback(usb_cable); } else printk("Unkown Plug In Cable type !\n"); }else printk("APSD not completed\n"); } else { printk("USBIN=0\n"); } } mutex_unlock(&charger->cable_lock); return success; }
static int __init smb347_init(void) { project_id = grouper_get_project_id(); pcba_ver = grouper_query_pcba_revision(); u32 project_info = grouper_get_project_id(); if (project_info == GROUPER_PROJECT_NAKASI_3G) gpio_dock_in = TEGRA_GPIO_PO5; else gpio_dock_in = TEGRA_GPIO_PU4; SMB_NOTICE("project_id=%x, pcba_ver=%d, dock_in_gpio=%d\n", project_id, pcba_ver, gpio_dock_in); return i2c_add_driver(&smb347_i2c_driver); }
static void grouper_usb_init(void) { u32 project_info = grouper_get_project_id(); unsigned int pcb_id_version = grouper_query_pcba_revision(); tegra_usb_phy_init(tegra_usb_phy_pdata, ARRAY_SIZE(tegra_usb_phy_pdata)); tegra_otg_device.dev.platform_data = &tegra_otg_pdata; platform_device_register(&tegra_otg_device); if (project_info == GROUPER_PROJECT_NAKASI_3G) { printk(KERN_INFO"%s : pcb_id_version = %d \n", __func__, pcb_id_version); /* for baseband devices do not switch off phy during suspend */ tegra_ehci_uhsic_pdata.power_down_on_bus_suspend = 0; tegra_ehci_pdata[1].power_down_on_bus_suspend = 0; uhsic_phy_config.postsuspend = grouper_usb_hsic_postsupend; uhsic_phy_config.preresume = grouper_usb_hsic_preresume; uhsic_phy_config.usb_phy_ready = grouper_usb_hsic_phy_ready; uhsic_phy_config.post_phy_off = grouper_usb_hsic_phy_off; tegra_ehci2_device.dev.platform_data = &tegra_ehci_uhsic_pdata; /* baseband registration happens in baseband-xmm-power */ switch (pcb_id_version) { case TILAPIA_PCBA_SR1: case TILAPIA_PCBA_SR2: case TILAPIA_PCBA_SR3: uhsic_phy_config.enable_gpio = TEGRA_GPIO_PR7; break; default: uhsic_phy_config.enable_gpio = TEGRA_GPIO_PU4; } } else { tegra_ehci2_device.dev.platform_data = &tegra_ehci_pdata[1]; platform_device_register(&tegra_ehci2_device); } }