static void smb347_enter_suspend(struct i2c_client *client) { u8 data = 0; pr_info("%s: ENTER SUSPEND\n", __func__); smb347_write_reg(client, SMB347_COMMAND_A, 0x80); smb347_write_reg(client, SMB347_PIN_ENABLE_CONTROL, 0x18); data = (data | 0x4); smb347_write_reg(client, SMB347_COMMAND_A, data); }
static void smb347_set_command_reg(struct i2c_client *client) { struct smb347_chip *chip = i2c_get_clientdata(client); int val, reg; u8 data; reg = SMB347_COMMAND_B; val = smb347_read_reg(client, reg); if (val >= 0) { data = (u8) val; pr_debug("%s : reg (0x%x) = 0x%x\n", __func__, reg, data); if (chip->chg_mode == CHG_MODE_AC || chip->chg_mode == CHG_MODE_MISC || chip->chg_mode == CHG_MODE_UNKNOWN) { /* CommandB : High-current mode */ data = 0x03; } else if (chip->chg_mode == CHG_MODE_USB) { /* CommandB : USB5 */ data = 0x02; } else { /* CommandB : USB1 */ data = 0x00; } if (smb347_write_reg(client, reg, data) < 0) pr_err("%s : error!\n", __func__); val = smb347_read_reg(client, reg); if (val >= 0) { data = (u8) data; pr_debug("%s : => reg (0x%x) = 0x%x\n", __func__, reg, data); } } }
static void smb347_allow_volatile_writes(struct i2c_client *client) { int val, reg; u8 data; /* Allow volatile writes to CONFIG registers */ reg = SMB347_COMMAND_A; val = smb347_read_reg(client, reg); if ((val >= 0) && !(val & 0x80)) { data = (u8) val; pr_debug("%s : reg (0x%x) = 0x%x\n", __func__, reg, data); data |= (0x1 << 7); if (smb347_write_reg(client, reg, data) < 0) pr_err("%s : error!\n", __func__); val = smb347_read_reg(client, reg); if (val >= 0) { data = (u8) data; pr_debug("%s : => reg (0x%x) = 0x%x\n", __func__, reg, data); } } }