static int wf_lm75_get(struct wf_sensor *sr, s32 *value) { struct wf_lm75_sensor *lm = wf_to_lm75(sr); s32 data; if (lm->i2c == NULL) return -ENODEV; /* Init chip if necessary */ if (!lm->inited) { u8 cfg_new, cfg = (u8)i2c_smbus_read_byte_data(lm->i2c, 1); DBG("wf_lm75: Initializing %s, cfg was: %02x\n", sr->name, cfg); /* clear shutdown bit, keep other settings as left by * the firmware for now */ cfg_new = cfg & ~0x01; i2c_smbus_write_byte_data(lm->i2c, 1, cfg_new); lm->inited = 1; /* If we just powered it up, let's wait 200 ms */ msleep(200); } /* Read temperature register */ data = (s32)le16_to_cpu(i2c_smbus_read_word_data(lm->i2c, 0)); data <<= 8; *value = data; return 0; }
static void wf_lm75_release(struct wf_sensor *sr) { struct wf_lm75_sensor *lm = wf_to_lm75(sr); /* check if client is registered and detach from i2c */ if (lm->i2c.adapter) { i2c_detach_client(&lm->i2c); lm->i2c.adapter = NULL; } kfree(lm); }
static void wf_lm75_release(struct wf_sensor *sr) { struct wf_lm75_sensor *lm = wf_to_lm75(sr); kfree(lm); }