Lines Matching +full:min +full:- +full:len
36 if (volt->func->volt_get) in nvkm_volt_get()
37 return volt->func->volt_get(volt); in nvkm_volt_get()
39 ret = volt->func->vid_get(volt); in nvkm_volt_get()
41 for (i = 0; i < volt->vid_nr; i++) { in nvkm_volt_get()
42 if (volt->vid[i].vid == ret) in nvkm_volt_get()
43 return volt->vid[i].uv; in nvkm_volt_get()
45 ret = -EINVAL; in nvkm_volt_get()
53 struct nvkm_subdev *subdev = &volt->subdev; in nvkm_volt_set()
54 int i, ret = -EINVAL, best_err = volt->max_uv, best = -1; in nvkm_volt_set()
56 if (volt->func->volt_set) in nvkm_volt_set()
57 return volt->func->volt_set(volt, uv); in nvkm_volt_set()
59 for (i = 0; i < volt->vid_nr; i++) { in nvkm_volt_set()
60 int err = volt->vid[i].uv - uv; in nvkm_volt_set()
70 if (best == -1) { in nvkm_volt_set()
75 ret = volt->func->vid_set(volt, volt->vid[best].vid); in nvkm_volt_set()
77 volt->vid[best].uv, ret); in nvkm_volt_set()
84 struct nvkm_bios *bios = volt->subdev.device->bios; in nvkm_volt_map_min()
86 u8 ver, len; in nvkm_volt_map_min() local
89 vmap = nvbios_vmap_entry_parse(bios, id, &ver, &len, &info); in nvkm_volt_map_min()
95 info.min += ret; in nvkm_volt_map_min()
97 return info.min; in nvkm_volt_map_min()
100 return id ? id * 10000 : -ENODEV; in nvkm_volt_map_min()
106 struct nvkm_bios *bios = volt->subdev.device->bios; in nvkm_volt_map()
108 u8 ver, len; in nvkm_volt_map() local
111 vmap = nvbios_vmap_entry_parse(bios, id, &ver, &len, &info); in nvkm_volt_map()
115 if (volt->speedo < 0) in nvkm_volt_map()
116 return volt->speedo; in nvkm_volt_map()
120 result += div64_s64((s64)info.arg[1] * volt->speedo, 10); in nvkm_volt_map()
121 result += div64_s64((s64)info.arg[2] * volt->speedo * volt->speedo, 100000); in nvkm_volt_map()
127 result += ((s64)info.arg[1] * volt->speedo * 15625) >> 18; in nvkm_volt_map()
129 result += ((s64)info.arg[3] * volt->speedo * temp * 15625) >> 18; in nvkm_volt_map()
130 result += ((s64)info.arg[4] * volt->speedo * volt->speedo * 15625) >> 30; in nvkm_volt_map()
134 result = (info.min + info.max) / 2; in nvkm_volt_map()
138 result = info.min; in nvkm_volt_map()
142 return -ENODEV; in nvkm_volt_map()
145 result = min(max(result, (s64)info.min), (s64)info.max); in nvkm_volt_map()
156 return id ? id * 10000 : -ENODEV; in nvkm_volt_map()
165 if (volt->func->set_id) in nvkm_volt_set_id()
166 return volt->func->set_id(volt, id, condition); in nvkm_volt_set_id()
174 int min = nvkm_volt_map(volt, min_id, temp); in nvkm_volt_set_id() local
175 if (min >= 0) in nvkm_volt_set_id()
176 ret = max(min, ret); in nvkm_volt_set_id()
188 struct nvkm_subdev *subdev = &bios->subdev; in nvkm_volt_parse_bios()
191 u8 ver, hdr, cnt, len; in nvkm_volt_parse_bios() local
195 data = nvbios_volt_parse(bios, &ver, &hdr, &cnt, &len, &info); in nvkm_volt_parse_bios()
198 volt->min_uv = info.min; in nvkm_volt_parse_bios()
199 volt->max_uv = info.max; in nvkm_volt_parse_bios()
201 if (info.base >= info.min && in nvkm_volt_parse_bios()
203 volt->vid[volt->vid_nr].uv = info.base; in nvkm_volt_parse_bios()
204 volt->vid[volt->vid_nr].vid = i; in nvkm_volt_parse_bios()
205 volt->vid_nr++; in nvkm_volt_parse_bios()
209 volt->vid_mask = info.vidmask; in nvkm_volt_parse_bios()
212 volt->min_uv = 0xffffffff; in nvkm_volt_parse_bios()
213 volt->max_uv = 0; in nvkm_volt_parse_bios()
218 volt->vid[volt->vid_nr].uv = ivid.voltage; in nvkm_volt_parse_bios()
219 volt->vid[volt->vid_nr].vid = ivid.vid; in nvkm_volt_parse_bios()
220 volt->vid_nr++; in nvkm_volt_parse_bios()
221 volt->min_uv = min(volt->min_uv, ivid.voltage); in nvkm_volt_parse_bios()
222 volt->max_uv = max(volt->max_uv, ivid.voltage); in nvkm_volt_parse_bios()
225 volt->vid_mask = info.vidmask; in nvkm_volt_parse_bios()
227 volt->min_uv = info.base; in nvkm_volt_parse_bios()
228 volt->max_uv = info.base + info.pwm_range; in nvkm_volt_parse_bios()
235 if (volt->func->speedo_read) in nvkm_volt_speedo_read()
236 return volt->func->speedo_read(volt); in nvkm_volt_speedo_read()
237 return -EINVAL; in nvkm_volt_speedo_read()
246 if (ret != -ENODEV) in nvkm_volt_init()
259 volt->speedo = nvkm_volt_speedo_read(volt); in nvkm_volt_oneinit()
260 if (volt->speedo > 0) in nvkm_volt_oneinit()
261 nvkm_debug(&volt->subdev, "speedo %x\n", volt->speedo); in nvkm_volt_oneinit()
263 if (volt->func->oneinit) in nvkm_volt_oneinit()
264 return volt->func->oneinit(volt); in nvkm_volt_oneinit()
286 struct nvkm_bios *bios = device->bios; in nvkm_volt_ctor()
289 nvkm_subdev_ctor(&nvkm_volt, device, type, inst, &volt->subdev); in nvkm_volt_ctor()
290 volt->func = func; in nvkm_volt_ctor()
292 /* Assuming the non-bios device should build the voltage table later */ in nvkm_volt_ctor()
294 u8 ver, hdr, cnt, len; in nvkm_volt_ctor() local
298 nvkm_debug(&volt->subdev, "min: %iuv max: %iuv\n", in nvkm_volt_ctor()
299 volt->min_uv, volt->max_uv); in nvkm_volt_ctor()
301 if (nvbios_vmap_parse(bios, &ver, &hdr, &cnt, &len, &vmap)) { in nvkm_volt_ctor()
302 volt->max0_id = vmap.max0; in nvkm_volt_ctor()
303 volt->max1_id = vmap.max1; in nvkm_volt_ctor()
304 volt->max2_id = vmap.max2; in nvkm_volt_ctor()
306 volt->max0_id = 0xff; in nvkm_volt_ctor()
307 volt->max1_id = 0xff; in nvkm_volt_ctor()
308 volt->max2_id = 0xff; in nvkm_volt_ctor()
312 if (volt->vid_nr) { in nvkm_volt_ctor()
313 for (i = 0; i < volt->vid_nr; i++) { in nvkm_volt_ctor()
314 nvkm_debug(&volt->subdev, "VID %02x: %duv\n", in nvkm_volt_ctor()
315 volt->vid[i].vid, volt->vid[i].uv); in nvkm_volt_ctor()
325 return -ENOMEM; in nvkm_volt_new_()