Lines Matching defs:corner

213 struct corner {
234 struct corner *corner;
243 struct corner *corners;
305 static void cpr_ctl_enable(struct cpr_drv *drv, struct corner *corner)
318 corner->save_ctl);
319 cpr_irq_set(drv, corner->save_irq);
321 if (cpr_is_allowed(drv) && corner->max_uV > corner->min_uV)
358 static void cpr_corner_save(struct cpr_drv *drv, struct corner *corner)
360 corner->save_ctl = cpr_read(drv, REG_RBCPR_CTL);
361 corner->save_irq = cpr_read(drv, REG_RBIF_IRQ_EN(0));
364 static void cpr_corner_restore(struct cpr_drv *drv, struct corner *corner)
367 struct fuse_corner *fuse = corner->fuse_corner;
373 gcnt |= fuse->quot - corner->quot_adjust;
385 ctl = corner->save_ctl;
387 irq = corner->save_irq;
412 struct fuse_corner *prev_fuse_corner = drv->corner->fuse_corner;
424 struct fuse_corner *prev_fuse_corner = drv->corner->fuse_corner;
432 static int cpr_scale_voltage(struct cpr_drv *drv, struct corner *corner,
436 struct fuse_corner *fuse_corner = corner->fuse_corner;
458 return drv->corner ? drv->corner - drv->corners + 1 : 0;
465 struct corner *corner;
475 corner = drv->corner;
481 last_uV = corner->last_uV;
495 if (last_uV >= corner->max_uV) {
515 new_uV = min(new_uV, corner->max_uV);
532 if (last_uV <= corner->min_uV) {
552 new_uV = max(new_uV, corner->min_uV);
559 ret = cpr_scale_voltage(drv, corner, new_uV, dir);
564 drv->corner->last_uV = new_uV;
636 /* Save register values for the corner */
637 cpr_corner_save(drv, drv->corner);
655 if (cpr_is_allowed(drv) && drv->corner) {
657 cpr_corner_restore(drv, drv->corner);
658 cpr_ctl_enable(drv, drv->corner);
684 struct corner *corner;
731 corner = &drv->corners[i];
732 corner->save_ctl = val;
733 corner->save_irq = CPR_INT_DEFAULT;
749 struct corner *corner, *end;
759 * Determine new corner we're going to.
762 corner = drv->corners + state - 1;
764 if (corner > end || corner < drv->corners) {
770 if (drv->corner > corner)
772 else if (drv->corner < corner)
778 new_uV = corner->last_uV;
780 new_uV = corner->uV;
785 ret = cpr_scale_voltage(drv, corner, new_uV, dir);
791 if (drv->corner != corner)
792 cpr_corner_restore(drv, corner);
793 cpr_ctl_enable(drv, corner);
796 drv->corner = corner;
926 * Allow the highest fuse corner's PVS voltage to
927 * define the ceiling voltage for that corner in order
951 * Restrict all fuse corner PVS voltages based upon per corner
965 "min uV: %d (fuse corner: %d) not supported by regulator\n",
975 "max uV: %d (fuse corner: %d) not supported by regulator\n",
981 "fuse corner %d: [%d %d %d] RO%hhu quot %d squot %d\n",
992 const struct corner *corner)
1000 fuse = corner->fuse_corner;
1020 static int cpr_interpolate(const struct corner *corner, int step_volt,
1028 fuse = corner->fuse_corner;
1035 f_diff = fuse->max_freq - corner->freq;
1042 if (f_high <= f_low || uV_high <= uV_low || f_high <= corner->freq)
1043 return corner->uV;
1117 struct corner *corner, *end;
1129 corner = drv->corners;
1130 end = &corner[drv->num_corners - 1];
1139 * Store maximum frequency for each fuse corner based on the frequency
1174 * QUOT(corner_N): quotient read from fuse for fuse corner N
1175 * QUOT(corner_N-1): quotient read from fuse for fuse corner (N - 1)
1176 * freq(corner_N): max frequency in MHz supported by fuse corner N
1177 * freq(corner_N-1): max frequency in MHz supported by fuse corner
1180 * Then walk through the corners mapped to each fuse corner
1186 * freq_max: max frequency in MHz supported by the fuse corner
1187 * freq_corner: frequency in MHz corresponding to the corner
1201 * corner corner
1203 * c = corner
1204 * f = fuse corner
1207 for (apply_scaling = false, i = 0; corner <= end; corner++, i++) {
1217 corner->fuse_corner = fuse;
1218 corner->freq = cdata[i].freq;
1219 corner->uV = fuse->uV;
1223 fdata, corner);
1228 } else if (corner->freq == fuse->max_freq) {
1229 /* This is a fuse corner; don't scale anything */
1234 freq_diff = fuse->max_freq - corner->freq;
1236 corner->quot_adjust = scaling * freq_diff_mhz / 1000;
1238 corner->uV = cpr_interpolate(corner, step_volt, fdata);
1241 corner->max_uV = fuse->max_uV;
1242 corner->min_uV = fuse->min_uV;
1243 corner->uV = clamp(corner->uV, corner->min_uV, corner->max_uV);
1244 corner->last_uV = corner->uV;
1247 if (desc->reduce_to_corner_uV && corner->uV < corner->max_uV)
1248 corner->max_uV = corner->uV;
1249 else if (desc->reduce_to_fuse_uV && fuse->uV < corner->max_uV)
1250 corner->max_uV = max(corner->min_uV, fuse->uV);
1252 dev_dbg(drv->dev, "corner %d: [%d %d %d] quot %d\n", i,
1253 corner->min_uV, corner->uV, corner->max_uV,
1254 fuse->quot - corner->quot_adjust);
1335 const struct corner *end;
1336 struct corner *iter;
1363 drv->corner = iter;
1367 drv->corner = iter;
1370 if (!drv->corner) {
1371 dev_err(drv->dev, "boot up corner not found\n");
1397 /* fuse corner 0 */
1410 /* fuse corner 1 */
1423 /* fuse corner 2 */
1526 * the maximum frequency for each fuse corner, and this is only
1529 * frequency associated with each fuse corner.
1596 struct corner *corner;
1598 corner = drv->corner;
1599 fuse_corner = corner->fuse_corner;
1601 seq_printf(s, "corner, current_volt = %d uV\n",
1602 corner->last_uV);