示例#1
0
static int ltc294x_reset(const struct ltc294x_info *info, int prescaler_exp)
{
        int ret;
        u8 value;
        u8 control;

        /* Read status and control registers */
        ret = ltc294x_read_regs(info->client, LTC294X_REG_CONTROL, &value, 1);
        if (ret < 0) {
                dev_err(&info->client->dev,
                        "Could not read registers from device\n");
                goto error_exit;
        }

        control = LTC294X_REG_CONTROL_PRESCALER_SET(prescaler_exp) |
                                LTC294X_REG_CONTROL_ALCC_CONFIG_DISABLED;
        /* Put the 2943 into "monitor" mode, so it measures every 10 sec */
        if (info->num_regs == LTC2943_NUM_REGS)
                control |= LTC2943_REG_CONTROL_MODE_SCAN;

        if (value != control) {
                ret = ltc294x_write_regs(info->client,
                        LTC294X_REG_CONTROL, &control, 1);
                if (ret < 0) {
                        dev_err(&info->client->dev,
                                "Could not write register\n");
                        goto error_exit;
                }
        }

        return 0;

error_exit:
        return ret;
}
示例#2
0
int ltc294x_reset( int prescaler_exp) {
		struct ltc294x_info *info = &ltc2943_info;
        int ret;
        u8 value[3];
        u8 control;

        /* Read status and control registers */
	ret = ltc294x_read_regs(info->client, LTC294X_REG_CONTROL, &value[0], 1);
        if (ret < 0) {
                dev_err(&info->client->dev,
                        "Could not read registers from device\n");
                goto error_exit;
        }

        control = LTC294X_REG_CONTROL_PRESCALER_SET(prescaler_exp) |
                                LTC294X_REG_CONTROL_ALCC_CONFIG_OUTPUT_ALERT;
        /* Set the 2943 mode*/
        if (info->num_regs == LTC2943_NUM_REGS)
                control |= LTC2943_REG_CONTROL_MODE_SCAN;

		do {
			if (value[0] != control) {
					ret = ltc294x_write_regs(info->client,
							LTC294X_REG_CONTROL, &control, 1);
					if (ret < 0) {
							dev_err(&info->client->dev,
									"Could not write register\n");
							goto error_exit;
					}
			}
			/* Read status and control registers again */
			ret = ltc294x_read_regs(info->client, LTC294X_REG_CONTROL, &value[0], 1);
			if (ret < 0) {
					dev_err(&info->client->dev,
							"Could not read registers from device\n");
					goto error_exit;
			}
		}
		while(value[0]!= control);
		
        return 0;

error_exit:
        return ret;
}
示例#3
0
static int ltc294x_reset(const struct ltc294x_info *info, int prescaler_exp)
{
	int ret;
	u8 value;
	u8 control;

	/* Read status and control registers */
	ret = ltc294x_read_regs(info->client, LTC294X_REG_CONTROL, &value, 1);
	if (ret < 0) {
		dev_err(&info->client->dev,
			"Could not read registers from device\n");
		goto error_exit;
	}

	control = LTC294X_REG_CONTROL_PRESCALER_SET(prescaler_exp) |
				LTC294X_REG_CONTROL_ALCC_CONFIG_DISABLED;
	/* Put device into "monitor" mode */
	switch (info->id) {
	case LTC2942_ID:	/* 2942 measures every 2 sec */
		control |= LTC2942_REG_CONTROL_MODE_SCAN;
		break;
	case LTC2943_ID:
	case LTC2944_ID:	/* 2943 and 2944 measure every 10 sec */
		control |= LTC2943_REG_CONTROL_MODE_SCAN;
		break;
	default:
		break;
	}

	if (value != control) {
		ret = ltc294x_write_regs(info->client,
			LTC294X_REG_CONTROL, &control, 1);
		if (ret < 0) {
			dev_err(&info->client->dev,
				"Could not write register\n");
			goto error_exit;
		}
	}

	return 0;

error_exit:
	return ret;
}