Lines Matching defs:corner

212 struct corner {
233 struct corner *corner;
242 struct corner *corners;
304 static void cpr_ctl_enable(struct cpr_drv *drv, struct corner *corner)
317 corner->save_ctl);
318 cpr_irq_set(drv, corner->save_irq);
320 if (cpr_is_allowed(drv) && corner->max_uV > corner->min_uV)
357 static void cpr_corner_save(struct cpr_drv *drv, struct corner *corner)
359 corner->save_ctl = cpr_read(drv, REG_RBCPR_CTL);
360 corner->save_irq = cpr_read(drv, REG_RBIF_IRQ_EN(0));
363 static void cpr_corner_restore(struct cpr_drv *drv, struct corner *corner)
366 struct fuse_corner *fuse = corner->fuse_corner;
372 gcnt |= fuse->quot - corner->quot_adjust;
384 ctl = corner->save_ctl;
386 irq = corner->save_irq;
411 struct fuse_corner *prev_fuse_corner = drv->corner->fuse_corner;
423 struct fuse_corner *prev_fuse_corner = drv->corner->fuse_corner;
431 static int cpr_scale_voltage(struct cpr_drv *drv, struct corner *corner,
435 struct fuse_corner *fuse_corner = corner->fuse_corner;
457 return drv->corner ? drv->corner - drv->corners + 1 : 0;
464 struct corner *corner;
474 corner = drv->corner;
480 last_uV = corner->last_uV;
494 if (last_uV >= corner->max_uV) {
514 new_uV = min(new_uV, corner->max_uV);
531 if (last_uV <= corner->min_uV) {
551 new_uV = max(new_uV, corner->min_uV);
558 ret = cpr_scale_voltage(drv, corner, new_uV, dir);
563 drv->corner->last_uV = new_uV;
635 /* Save register values for the corner */
636 cpr_corner_save(drv, drv->corner);
654 if (cpr_is_allowed(drv) && drv->corner) {
656 cpr_corner_restore(drv, drv->corner);
657 cpr_ctl_enable(drv, drv->corner);
683 struct corner *corner;
730 corner = &drv->corners[i];
731 corner->save_ctl = val;
732 corner->save_irq = CPR_INT_DEFAULT;
748 struct corner *corner, *end;
758 * Determine new corner we're going to.
761 corner = drv->corners + state - 1;
763 if (corner > end || corner < drv->corners) {
769 if (drv->corner > corner)
771 else if (drv->corner < corner)
777 new_uV = corner->last_uV;
779 new_uV = corner->uV;
784 ret = cpr_scale_voltage(drv, corner, new_uV, dir);
790 if (drv->corner != corner)
791 cpr_corner_restore(drv, corner);
792 cpr_ctl_enable(drv, corner);
795 drv->corner = corner;
892 * Allow the highest fuse corner's PVS voltage to
893 * define the ceiling voltage for that corner in order
917 * Restrict all fuse corner PVS voltages based upon per corner
931 "min uV: %d (fuse corner: %d) not supported by regulator\n",
941 "max uV: %d (fuse corner: %d) not supported by regulator\n",
947 "fuse corner %d: [%d %d %d] RO%hhu quot %d squot %d\n",
958 const struct corner *corner)
966 fuse = corner->fuse_corner;
986 static int cpr_interpolate(const struct corner *corner, int step_volt,
994 fuse = corner->fuse_corner;
1001 f_diff = fuse->max_freq - corner->freq;
1008 if (f_high <= f_low || uV_high <= uV_low || f_high <= corner->freq)
1009 return corner->uV;
1083 struct corner *corner, *end;
1095 corner = drv->corners;
1096 end = &corner[drv->num_corners - 1];
1105 * Store maximum frequency for each fuse corner based on the frequency
1140 * QUOT(corner_N): quotient read from fuse for fuse corner N
1141 * QUOT(corner_N-1): quotient read from fuse for fuse corner (N - 1)
1142 * freq(corner_N): max frequency in MHz supported by fuse corner N
1143 * freq(corner_N-1): max frequency in MHz supported by fuse corner
1146 * Then walk through the corners mapped to each fuse corner
1152 * freq_max: max frequency in MHz supported by the fuse corner
1153 * freq_corner: frequency in MHz corresponding to the corner
1167 * corner corner
1169 * c = corner
1170 * f = fuse corner
1173 for (apply_scaling = false, i = 0; corner <= end; corner++, i++) {
1183 corner->fuse_corner = fuse;
1184 corner->freq = cdata[i].freq;
1185 corner->uV = fuse->uV;
1189 fdata, corner);
1194 } else if (corner->freq == fuse->max_freq) {
1195 /* This is a fuse corner; don't scale anything */
1200 freq_diff = fuse->max_freq - corner->freq;
1202 corner->quot_adjust = scaling * freq_diff_mhz / 1000;
1204 corner->uV = cpr_interpolate(corner, step_volt, fdata);
1207 corner->max_uV = fuse->max_uV;
1208 corner->min_uV = fuse->min_uV;
1209 corner->uV = clamp(corner->uV, corner->min_uV, corner->max_uV);
1210 corner->last_uV = corner->uV;
1213 if (desc->reduce_to_corner_uV && corner->uV < corner->max_uV)
1214 corner->max_uV = corner->uV;
1215 else if (desc->reduce_to_fuse_uV && fuse->uV < corner->max_uV)
1216 corner->max_uV = max(corner->min_uV, fuse->uV);
1218 dev_dbg(drv->dev, "corner %d: [%d %d %d] quot %d\n", i,
1219 corner->min_uV, corner->uV, corner->max_uV,
1220 fuse->quot - corner->quot_adjust);
1301 const struct corner *end;
1302 struct corner *iter;
1329 drv->corner = iter;
1333 drv->corner = iter;
1336 if (!drv->corner) {
1337 dev_err(drv->dev, "boot up corner not found\n");
1363 /* fuse corner 0 */
1376 /* fuse corner 1 */
1389 /* fuse corner 2 */
1492 * the maximum frequency for each fuse corner, and this is only
1495 * frequency associated with each fuse corner.
1562 struct corner *corner;
1564 corner = drv->corner;
1565 fuse_corner = corner->fuse_corner;
1567 seq_printf(s, "corner, current_volt = %d uV\n",
1568 corner->last_uV);