static void attach_one_fan()

in char/bbc_envctrl.c [494:530]


static void attach_one_fan(struct bbc_i2c_bus *bp, struct platform_device *op,
			   int fan_idx)
{
	struct bbc_fan_control *fp;

	fp = kzalloc(sizeof(*fp), GFP_KERNEL);
	if (!fp)
		return;

	INIT_LIST_HEAD(&fp->bp_list);
	INIT_LIST_HEAD(&fp->glob_list);

	fp->client = bbc_i2c_attach(bp, op);
	if (!fp->client) {
		kfree(fp);
		return;
	}

	fp->index = fan_idx;

	list_add(&fp->glob_list, &all_fans);
	list_add(&fp->bp_list, &bp->fans);

	/* The i2c device controlling the fans is write-only.
	 * So the only way to keep track of the current power
	 * level fed to the fans is via software.  Choose half
	 * power for cpu/system and 'on' fo the powersupply fan
	 * and set it now.
	 */
	fp->psupply_fan_on = 1;
	fp->cpu_fan_speed = (FAN_SPEED_MAX - FAN_SPEED_MIN) / 2;
	fp->cpu_fan_speed += FAN_SPEED_MIN;
	fp->system_fan_speed = (FAN_SPEED_MAX - FAN_SPEED_MIN) / 2;
	fp->system_fan_speed += FAN_SPEED_MIN;

	set_fan_speeds(fp);
}