static void init_ec(u16 base) { u8 value; /* Read out current value of FAN_CTL (0x14). */ value = pnp_read_index(base, 0x14); printk(BIOS_DEBUG, "FAN_CTL: reg = 0x%04x, read value = 0x%02x\n", base + 0x14, value); /* Set FAN_CTL (0x14) polarity to high, activate fans 1, 2 and 3. */ pnp_write_index(base, 0x14, value | 0x87); printk(BIOS_DEBUG, "FAN_CTL: reg = 0x%04x, writing value = 0x%02x\n", base + 0x14, value | 0x87); }
static int lsmbus_read_byte(device_t dev, u8 address) { unsigned int device; struct resource *res; int result; device = dev->path.i2c.device; res = find_resource(get_pbus_smbus(dev)->dev, PNP_IDX_IO0); pnp_write_index(res->base + HWM_INDEX, 0, device); /* Why 0? */ /* We only read it one byte one time. */ result = pnp_read_index(res->base + SB_INDEX, address); return result; }
static void init_hwm(u16 base) { int i; u8 reg, value; /* reg mask data */ u8 hwm_reg_values[] = { 0x40, 0xff, 0x81, /* Start HWM. */ 0x48, 0x7f, 0x2a, /* Set SMBus base to 0x2a (0x54 >> 1). */ }; for (i = 0; i < ARRAY_SIZE(hwm_reg_values); i += 3) { reg = hwm_reg_values[i]; value = pnp_read_index(base, reg); value &= 0xff & (~(hwm_reg_values[i + 1])); value |= 0xff & hwm_reg_values[i + 2]; printk(BIOS_DEBUG, "base = 0x%04x, reg = 0x%02x, " "value = 0x%02x\n", base, reg, value); pnp_write_index(base, reg, value); } }