Example #1
0
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);
}
Example #2
0
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);
		}
	}
}
Example #3
0
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);
		}
	}
}