コード例 #1
0
static ssize_t smb347_register_store(struct sys_device *dev, struct sysdev_attribute *attr, const char *buf, size_t size)
{
	int value = 0;

	if (sscanf(buf, "%x", &value) <= 0) {
		printk(KERN_ERR "Error setting the value in the register\n");
		return -EINVAL;
	}

	summit_smb347_i2c_write(smb347_reg_number, value);
	return size;
}
コード例 #2
0
/* Enable/disable charging */
static void summit_smb347_enable_charging(int enable)
{
	unsigned char value = 0xff;

	summit_smb347_i2c_read(SUMMIT_SMB347_COMMAND_REG_A, &value);

	if (!enable) {
		value &= ~(0x2);
	}
	else {
		value |= 0x2;
	}

	summit_smb347_i2c_write(SUMMIT_SMB347_COMMAND_REG_A, value);
	atomic_set(&summit_smb347_charger_state, enable);
}
コード例 #3
0
static void summit_smb347_init_registers(void)
{
	/* Fast charge, pre charge and charge termination */
	summit_smb347_i2c_write(SUMMIT_SMB347_CHARGE_CURRENT, 0x3B);

	/* Input current */
	summit_smb347_i2c_write(SUMMIT_SMB347_INPUT_CURR_LIMIT, 0x66);

	/* Control settings */
	summit_smb347_i2c_write(SUMMIT_SMB347_FUNCTIONS, 0xB6);

	/* Pre charge and fast charge voltage */
	summit_smb347_i2c_write(SUMMIT_SMB347_FLOAT_VOLTAGE, 0xE3);

	/* Current termination and auto recharge */
	summit_smb347_i2c_write(SUMMIT_SMB347_CHARGE_CONTROL, 0x41);

	/* Timers and status */
	summit_smb347_i2c_write(SUMMIT_SMB347_STAT_TIMERS, 0x1F);

	/* PIN and enable control */
	summit_smb347_i2c_write(SUMMIT_SMB347_ENABLE_CONTROL, 0x7B);

	/* Thermal monitor and temp thresholds */
	summit_smb347_i2c_write(SUMMIT_SMB347_THERMAL_CONTROL, 0xAF);

	/* USB 3.0 and SYSOK */
	summit_smb347_i2c_write(SUMMIT_SMB347_SYSOK_USB30, 0x8);

	/* OTG PIN polarity and low battery */
	summit_smb347_i2c_write(SUMMIT_SMB347_OTHER_CONTROL_A, 0x07);

	/* Thermal control */
	summit_smb347_i2c_write(SUMMIT_SMB347_OTG_THERM_CONTROL, 0x10);

	/* Temperature hard/soft limits */
	summit_smb347_i2c_write(SUMMIT_SMB347_CELL_TEMP, 0x18);

	/* Interrupt Control */
	summit_smb347_i2c_write(SUMMIT_SMB347_FAULT_INTERRUPT, 0xCF);
	summit_smb347_i2c_write(SUMMIT_SMB347_INTERRUPT_STAT, 0x4);

	/* Command register A */
	summit_smb347_i2c_write(SUMMIT_SMB347_COMMAND_REG_A, 0xc2);

	/* Command register B for USB */
	summit_smb347_i2c_write(SUMMIT_SMB347_COMMAND_REG_B, 0x03);
}