コード例 #1
0
void maxi_vid(struct i2c_client *client, int operation, int ctl_name,
	      int *nrels_mag, long *results)
{
	struct maxi_data *data = client->data;
	int nr;

	if (data->type == nba) {
		maxi99_vid(client, operation, ctl_name, nrels_mag,
			   results);
		return;
	}

	nr = ctl_name - MAXI_SYSCTL_VID1 + 1;

	if (operation == SENSORS_PROC_REAL_INFO)
		*nrels_mag = 4;
	else if (operation == SENSORS_PROC_REAL_READ) {
		maxi_update_client(client);
		results[0] = VID_FROM_REG(data->vid_min[nr - 1]);
		results[1] = VID_FROM_REG(data->vid_max[nr - 1]);
		results[2] = VID_FROM_REG(data->vid[nr - 1]);
		*nrels_mag = 3;
	} else if (operation == SENSORS_PROC_REAL_WRITE) {
#ifndef NOWRITE
		if (*nrels_mag >= 1) {
			data->vid_min[nr - 1] = VID_TO_REG(results[0]);
			maxi_write_value(client, MAXI_REG_VID_MIN(nr),
					 data->vid_min[nr - 1]);
		}
		if (*nrels_mag >= 2) {
			data->vid_max[nr - 1] = VID_TO_REG(results[1]);
			maxi_write_value(client, MAXI_REG_VID_MAX(nr),
					 data->vid_max[nr - 1]);
		}
#endif
	}
}
コード例 #2
0
/* Called when we have found a new MTP008. It should set limits, etc. */
void mtp008_init_client(struct i2c_client *client)
{
	int vid;
	u8 save1, save2;
	struct mtp008_data *data;

	data = client->data;

	/*
	 * Initialize the Myson MTP008 hardware monitoring chip.
	 * Save the pin settings that the BIOS hopefully set.
	 */
	save1 = mtp008_read_value(client, MTP008_REG_PIN_CTRL1);
	save2 = mtp008_read_value(client, MTP008_REG_PIN_CTRL2);
	mtp008_write_value(client, MTP008_REG_CONFIG,
	     (mtp008_read_value(client, MTP008_REG_CONFIG) & 0x7f) | 0x80);
	mtp008_write_value(client, MTP008_REG_PIN_CTRL1, save1);
	mtp008_write_value(client, MTP008_REG_PIN_CTRL2, save2);

	mtp008_getsensortype(data, save2);

	/*
	 * Retrieve the VID setting (needed for the default limits).
	 */
	vid = mtp008_read_value(client, MTP008_REG_VID_FANDIV) & 0x0f;
	vid |= (mtp008_read_value(client, MTP008_REG_RESET_VID4) & 0x01) << 4;
	vid = VID_FROM_REG(vid);

	/*
	 * Set the default limits.
	 *
	 * Setting temp sensors is done as follows:
	 *
	 *          Register 0x57: 0 0 0 0 x x x x
	 *                                 | \ / +-- AIN5/VT3
	 *                                 |  +----- AIN4/VT2/PII
	 *                                 +-------- VT1/PII
	 */

	mtp008_write_value(client, MTP008_REG_IN_MAX(0),
			   IN_TO_REG(MTP008_INIT_IN_MAX_0));
	mtp008_write_value(client, MTP008_REG_IN_MIN(0),
			   IN_TO_REG(MTP008_INIT_IN_MIN_0));
	mtp008_write_value(client, MTP008_REG_IN_MAX(1),
			   IN_TO_REG(MTP008_INIT_IN_MAX_1));
	mtp008_write_value(client, MTP008_REG_IN_MIN(1),
			   IN_TO_REG(MTP008_INIT_IN_MIN_1));
	mtp008_write_value(client, MTP008_REG_IN_MAX(2),
			   IN_TO_REG(MTP008_INIT_IN_MAX_2));
	mtp008_write_value(client, MTP008_REG_IN_MIN(2),
			   IN_TO_REG(MTP008_INIT_IN_MIN_2));
	mtp008_write_value(client, MTP008_REG_IN_MAX(3),
			   IN_TO_REG(MTP008_INIT_IN_MAX_3));
	mtp008_write_value(client, MTP008_REG_IN_MIN(3),
			   IN_TO_REG(MTP008_INIT_IN_MIN_3));

	mtp008_write_value(client, MTP008_REG_IN_MAX(5),
			   IN_TO_REG(MTP008_INIT_IN_MAX_5));
	mtp008_write_value(client, MTP008_REG_IN_MIN(5),
			   IN_TO_REG(MTP008_INIT_IN_MIN_5));
	mtp008_write_value(client, MTP008_REG_IN_MAX(6),
			   IN_TO_REG(MTP008_INIT_IN_MAX_6));
	mtp008_write_value(client, MTP008_REG_IN_MIN(6),
			   IN_TO_REG(MTP008_INIT_IN_MIN_6));

	mtp008_write_value(client, MTP008_REG_TEMP_MAX,
			   TEMP_TO_REG(MTP008_INIT_TEMP_OVER));
	mtp008_write_value(client, MTP008_REG_TEMP_MIN,
			   TEMP_TO_REG(MTP008_INIT_TEMP_HYST));
	mtp008_write_value(client, MTP008_REG_IN_MAX(4),
			   TEMP_TO_REG(MTP008_INIT_TEMP2_OVER));
	mtp008_write_value(client, MTP008_REG_IN_MIN(4),
			   TEMP_TO_REG(MTP008_INIT_TEMP2_HYST));

	mtp008_write_value(client, MTP008_REG_FAN_MIN(1),
			   FAN_TO_REG(MTP008_INIT_FAN_MIN_1, 2));
	mtp008_write_value(client, MTP008_REG_FAN_MIN(2),
			   FAN_TO_REG(MTP008_INIT_FAN_MIN_2, 2));
	mtp008_write_value(client, MTP008_REG_FAN_MIN(3),
			   FAN_TO_REG(MTP008_INIT_FAN_MIN_3, 2));

	/*
	 * Start monitoring.
	 */
	mtp008_write_value(
		client, MTP008_REG_CONFIG,
		(mtp008_read_value(client, MTP008_REG_CONFIG) & 0xf7) | 0x01
	);
}