static int smb347_intr_sts(struct i2c_client *client) { int ret = 0; #define INOK 0x04 #define TERM_TAPER_CHG 0x10 // Enable volatile writes to registers ret = smb347_volatile_writes(client, smb347_ENABLE_WRITE); if (ret< 0) { dev_err(&client->dev, "%s() error in configuring charger..enable\n", __func__); goto error; } ret = smb347_clear_reg(client, smb347_STS_INTR_1, (TERM_TAPER_CHG|INOK)); if (ret < 0) { dev_err(&client->dev, "%s(): Failed to" "clear STATUS Interrupt Register\n", __func__); } else { dev_notice(&client->dev, "%s(): Success to" "clear STATUS Interrupt Register\n", __func__); } // Disable volatile writes to registers ret = smb347_volatile_writes(client, smb347_DISABLE_WRITE); if (ret< 0) { dev_err(&client->dev, "%s() error in configuring charger..disable\n", __func__); goto error; } error: return ret; }
static int smb347_pin_control(bool state) { struct i2c_client *client = charger->client; u8 ret = 0; mutex_lock(&charger->pinctrl_lock); if (state) { /*Pin Controls -active low */ ret = smb347_update_reg(client, smb347_PIN_CTRL, PIN_ACT_LOW); if (ret < 0) { dev_err(&client->dev, "%s(): Failed to" "enable charger\n", __func__); } } else { /*Pin Controls -active high */ ret = smb347_clear_reg(client, smb347_PIN_CTRL, PIN_ACT_LOW); if (ret < 0) { dev_err(&client->dev, "%s(): Failed to" "disable charger\n", __func__); } } mutex_unlock(&charger->pinctrl_lock); return ret; }
static int smb347_charger_enable(bool enable) { struct i2c_client *client = charger->client; u8 ret = 0; if (enable) { /*Pin Controls -active low */ ret = smb347_update_reg(client, smb347_PIN_CTRL, PIN_ACT_LOW); if (ret < 0) { dev_err(&client->dev, "%s(): Failed to" "enable charger\n", __func__); return ret; } } else { /*Pin Controls -active high */ ret = smb347_clear_reg(client, smb347_PIN_CTRL, PIN_ACT_LOW); if (ret < 0) { dev_err(&client->dev, "%s(): Failed to" "disable charger\n", __func__); return ret; } } return ret; }
int smb347_hc_mode_callback(bool enable, int cur) { struct i2c_client *client = charger->client; u8 ret = 0; if((pcba_ver > GROUPER_PCBA_ER2) && (project_id == GROUPER_PROJECT_NAKASI)) return 0; if (charger->suspend_ongoing) return 0; printk("smb347_hc_mode_callback+\n"); /* Enable volatile writes to registers */ ret = smb347_volatile_writes(client, smb347_ENABLE_WRITE); if (ret < 0) { dev_err(&client->dev, "%s() error in configuring charger..\n", __func__); goto error; } if(enable) { /* Force switch to HC mode */ ret = smb347_update_reg(client, smb347_CMD_REG_B, HC_MODE); if (ret < 0) { dev_err(&client->dev, "%s(): Failed in writing" "register 0x%02x\n", __func__, smb347_CMD_REG_B); return ret; } /* Change to i2c register control */ ret = smb347_clear_reg(client, smb347_PIN_CTRL, PIN_CTRL); if (ret < 0) { dev_err(&client->dev, "%s(): Failed in writing" "register 0x%02x\n", __func__, smb347_PIN_CTRL); return ret; } } else { /* USB 2.0 input current limit (ICL) */ ret = smb347_clear_reg(client, smb347_SYSOK_USB3, USB_30); if (ret < 0) { dev_err(&client->dev, "%s(): Failed in writing" "register 0x%02x\n", __func__, smb347_SYSOK_USB3); return ret; } /* Switch back to USB mode */ ret = smb347_clear_reg(client, smb347_CMD_REG_B, HC_MODE); if (ret < 0) { dev_err(&client->dev, "%s(): Failed in writing" "register 0x%02x\n", __func__, smb347_CMD_REG_B); return ret; } if(cur) { /* USB 500mA */ ret = smb347_update_reg(client, smb347_CMD_REG_B, USB_5_9_CUR); if (ret < 0) { dev_err(&client->dev, "%s(): Failed in writing" "register 0x%02x\n", __func__, smb347_CMD_REG_B); return ret; } } else { /* USB 100mA */ ret = smb347_clear_reg(client, smb347_CMD_REG_B, USB_5_9_CUR); if (ret < 0) { dev_err(&client->dev, "%s(): Failed in writing" "register 0x%02x\n", __func__, smb347_CMD_REG_B); return ret; } } /* Disable auto power source detection (APSD) */ ret = smb347_clear_reg(client, smb347_CHRG_CTRL, ENABLE_APSD); if (ret < 0) { dev_err(&client->dev, "%s(): Failed in writing" "register 0x%02x\n", __func__, smb347_CHRG_CTRL); return ret; } /* Change to i2c register control */ ret = smb347_clear_reg(client, smb347_PIN_CTRL, PIN_CTRL); if (ret < 0) { dev_err(&client->dev, "%s(): Failed in writing" "register 0x%02x\n", __func__, smb347_PIN_CTRL); return ret; } } /* Disable volatile writes to registers */ ret = smb347_volatile_writes(client, smb347_DISABLE_WRITE); if (ret < 0) { dev_err(&client->dev, "%s() error in configuring charger..\n", __func__); goto error; } printk("smb347_hc_mode_callback-\n"); return ret; error: return ret; }