예제 #1
0
static int bcl_read_vbat(int *adc_value)
{
	int ret = 0, timeout = 0;
	int8_t val[VAL_CP_REG_BUF_LEN] = {0};

	*adc_value = (int)val[VAL_REG_BUF_OFFSET];
	do {
		ret = bcl_read_multi_register(BCL_VBAT_VALUE, val,
			VAL_CP_REG_BUF_LEN);
		if (ret) {
			pr_err("BCL register read error. err:%d\n", ret);
			goto bcl_read_exit;
		}
	} while (val[VAL_REG_BUF_OFFSET] != val[VAL_CP_REG_BUF_OFFSET]
		&& timeout++ < BCL_READ_RETRY_LIMIT);
	if (val[VAL_REG_BUF_OFFSET] != val[VAL_CP_REG_BUF_OFFSET]) {
		ret = -ENODEV;
		goto bcl_read_exit;
	}
	*adc_value = (int)val[VAL_REG_BUF_OFFSET];
	convert_adc_to_vbat_val(adc_value);
	pr_debug("Read Vbat:%d. ADC_val:%d\n", *adc_value,
			val[VAL_REG_BUF_OFFSET]);
	trace_bcl_hw_sensor_reading("vbat[uV]", *adc_value);

bcl_read_exit:
	return ret;
}
예제 #2
0
static int bcl_read_ibat_max(int *adc_value)
{
    int ret = 0, timeout = 0;
    int8_t val[VAL_CP_REG_BUF_LEN] = {0};

    *adc_value = (int)val[VAL_REG_BUF_OFFSET];
    do {
        ret = bcl_read_multi_register(BCL_IBAT_MAX, val,
                                      VAL_CP_REG_BUF_LEN);
        if (ret) {
            pr_err("BCL register read error. err:%d\n", ret);
            goto bcl_read_exit;
        }
    } while (val[VAL_REG_BUF_OFFSET] != val[VAL_CP_REG_BUF_OFFSET]
             && timeout++ < BCL_READ_RETRY_LIMIT);
    if (val[VAL_REG_BUF_OFFSET] != val[VAL_CP_REG_BUF_OFFSET]) {
        ret = -ENODEV;
        goto bcl_read_exit;
    }
    *adc_value = (int)val[VAL_REG_BUF_OFFSET];
    convert_adc_to_ibat_val(adc_value);
    pr_debug("Ibat Max:%d. ADC_val:%d\n", *adc_value,
             val[VAL_REG_BUF_OFFSET]);

bcl_read_exit:
    return ret;
}
예제 #3
0
static int bcl_read_register(int16_t reg_offset, uint8_t *data)
{
	return bcl_read_multi_register(reg_offset, data, 1);
}