Lines Matching +full:sensor +full:- +full:id
57 return -EINVAL; in nvkm_iccsense_poll_lane()
70 return nvkm_iccsense_poll_lane(rail->sensor->i2c, rail->sensor->addr, in nvkm_iccsense_ina2x9_read()
71 shunt_reg, 0, bus_reg, 3, rail->mohm, in nvkm_iccsense_ina2x9_read()
93 return nvkm_iccsense_poll_lane(rail->sensor->i2c, rail->sensor->addr, in nvkm_iccsense_ina3221_read()
94 1 + (rail->idx * 2), 3, in nvkm_iccsense_ina3221_read()
95 2 + (rail->idx * 2), 3, rail->mohm, in nvkm_iccsense_ina3221_read()
101 struct nvkm_iccsense_sensor *sensor) in nvkm_iccsense_sensor_config() argument
103 struct nvkm_subdev *subdev = &iccsense->subdev; in nvkm_iccsense_sensor_config()
104 nvkm_trace(subdev, "write config of extdev %i: 0x%04x\n", sensor->id, sensor->config); in nvkm_iccsense_sensor_config()
105 nv_wr16i2cr(sensor->i2c, sensor->addr, 0x00, sensor->config); in nvkm_iccsense_sensor_config()
115 return -EINVAL; in nvkm_iccsense_read_all()
117 list_for_each_entry(rail, &iccsense->rails, head) { in nvkm_iccsense_read_all()
119 if (!rail->read) in nvkm_iccsense_read_all()
120 return -ENODEV; in nvkm_iccsense_read_all()
122 res = rail->read(iccsense, rail); in nvkm_iccsense_read_all()
134 struct nvkm_iccsense_sensor *sensor, *tmps; in nvkm_iccsense_dtor() local
137 list_for_each_entry_safe(sensor, tmps, &iccsense->sensors, head) { in nvkm_iccsense_dtor()
138 list_del(&sensor->head); in nvkm_iccsense_dtor()
139 kfree(sensor); in nvkm_iccsense_dtor()
141 list_for_each_entry_safe(rail, tmpr, &iccsense->rails, head) { in nvkm_iccsense_dtor()
142 list_del(&rail->head); in nvkm_iccsense_dtor()
150 nvkm_iccsense_create_sensor(struct nvkm_iccsense *iccsense, u8 id) in nvkm_iccsense_create_sensor() argument
152 struct nvkm_subdev *subdev = &iccsense->subdev; in nvkm_iccsense_create_sensor()
153 struct nvkm_bios *bios = subdev->device->bios; in nvkm_iccsense_create_sensor()
154 struct nvkm_i2c *i2c = subdev->device->i2c; in nvkm_iccsense_create_sensor()
157 struct nvkm_iccsense_sensor *sensor; in nvkm_iccsense_create_sensor() local
160 if (!i2c || !bios || nvbios_extdev_parse(bios, id, &extdev)) in nvkm_iccsense_create_sensor()
169 iccsense->data_valid = false; in nvkm_iccsense_create_sensor()
170 nvkm_error(subdev, "Unknown sensor type %x, power reading " in nvkm_iccsense_create_sensor()
183 if (!nvkm_iccsense_validate_device(&i2c_bus->i2c, addr, in nvkm_iccsense_create_sensor()
185 iccsense->data_valid = false; in nvkm_iccsense_create_sensor()
186 nvkm_warn(subdev, "found invalid sensor id: %i, power reading" in nvkm_iccsense_create_sensor()
187 "might be invalid\n", id); in nvkm_iccsense_create_sensor()
191 sensor = kmalloc(sizeof(*sensor), GFP_KERNEL); in nvkm_iccsense_create_sensor()
192 if (!sensor) in nvkm_iccsense_create_sensor()
195 list_add_tail(&sensor->head, &iccsense->sensors); in nvkm_iccsense_create_sensor()
196 sensor->id = id; in nvkm_iccsense_create_sensor()
197 sensor->type = extdev.type; in nvkm_iccsense_create_sensor()
198 sensor->i2c = &i2c_bus->i2c; in nvkm_iccsense_create_sensor()
199 sensor->addr = addr; in nvkm_iccsense_create_sensor()
200 sensor->config = 0x0; in nvkm_iccsense_create_sensor()
201 return sensor; in nvkm_iccsense_create_sensor()
205 nvkm_iccsense_get_sensor(struct nvkm_iccsense *iccsense, u8 id) in nvkm_iccsense_get_sensor() argument
207 struct nvkm_iccsense_sensor *sensor; in nvkm_iccsense_get_sensor() local
208 list_for_each_entry(sensor, &iccsense->sensors, head) { in nvkm_iccsense_get_sensor()
209 if (sensor->id == id) in nvkm_iccsense_get_sensor()
210 return sensor; in nvkm_iccsense_get_sensor()
212 return nvkm_iccsense_create_sensor(iccsense, id); in nvkm_iccsense_get_sensor()
219 struct nvkm_bios *bios = subdev->device->bios; in nvkm_iccsense_oneinit()
233 iccsense->power_w_max = entry.avg_w; in nvkm_iccsense_oneinit()
234 iccsense->power_w_crit = entry.max_w; in nvkm_iccsense_oneinit()
241 iccsense->data_valid = true; in nvkm_iccsense_oneinit()
244 struct nvkm_iccsense_sensor *sensor; in nvkm_iccsense_oneinit() local
247 if (pwr_rail->mode != 1 || !pwr_rail->resistor_count) in nvkm_iccsense_oneinit()
250 sensor = nvkm_iccsense_get_sensor(iccsense, pwr_rail->extdev_id); in nvkm_iccsense_oneinit()
251 if (!sensor) in nvkm_iccsense_oneinit()
254 if (!sensor->config) in nvkm_iccsense_oneinit()
255 sensor->config = pwr_rail->config; in nvkm_iccsense_oneinit()
256 else if (sensor->config != pwr_rail->config) in nvkm_iccsense_oneinit()
257 nvkm_error(subdev, "config mismatch found for extdev %i\n", pwr_rail->extdev_id); in nvkm_iccsense_oneinit()
259 for (r = 0; r < pwr_rail->resistor_count; ++r) { in nvkm_iccsense_oneinit()
261 struct pwr_rail_resistor_t *res = &pwr_rail->resistors[r]; in nvkm_iccsense_oneinit()
265 if (!res->mohm || !res->enabled) in nvkm_iccsense_oneinit()
268 switch (sensor->type) { in nvkm_iccsense_oneinit()
284 return -ENOMEM; in nvkm_iccsense_oneinit()
286 rail->read = read; in nvkm_iccsense_oneinit()
287 rail->sensor = sensor; in nvkm_iccsense_oneinit()
288 rail->idx = r; in nvkm_iccsense_oneinit()
289 rail->mohm = res->mohm; in nvkm_iccsense_oneinit()
290 …(subdev, "create rail for extdev %i: { idx: %i, mohm: %i }\n", pwr_rail->extdev_id, r, rail->mohm); in nvkm_iccsense_oneinit()
291 list_add_tail(&rail->head, &iccsense->rails); in nvkm_iccsense_oneinit()
301 struct nvkm_iccsense_sensor *sensor; in nvkm_iccsense_init() local
302 list_for_each_entry(sensor, &iccsense->sensors, head) in nvkm_iccsense_init()
303 nvkm_iccsense_sensor_config(iccsense, sensor); in nvkm_iccsense_init()
318 nvkm_subdev_ctor(&iccsense_func, device, type, inst, &iccsense->subdev); in nvkm_iccsense_ctor()
326 return -ENOMEM; in nvkm_iccsense_new_()
327 INIT_LIST_HEAD(&(*iccsense)->sensors); in nvkm_iccsense_new_()
328 INIT_LIST_HEAD(&(*iccsense)->rails); in nvkm_iccsense_new_()