Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 29e2b8a6 authored by David Collins's avatar David Collins
Browse files

regulator: cpr3-regulator: add support for per speed bin property values



Add support for parsing CPR3 regulator device tree properties
which are specified per speed bin as opposed to per fuse
combination.  This allows for significant reductions in device
tree property sizes in cases where all fuse combos associated
with a given speed bin utilize the same set of values.

Change-Id: Ieea1244e3e61ce9ec357ab2f92340558fb1fe38c
Signed-off-by: default avatarDavid Collins <collinsd@codeaurora.org>
parent ea53c1ea
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -165,6 +165,15 @@ HMSS specific properties:
		    values 0 to 7.  The last 8 fuse combos correspond to speed
		    bin fuse value 1 along with CPR revision fuse values 0 to 7.

- qcom,cpr-speed-bins
	Usage:      optional
	Value type: <u32>
	Definition: Specifies the number of speed bins being supported by the
		    device.  This value is utilized by several other properties.
		    Supported values are 1 up to the maximum possible for a
		    given regulator type.  For HMSS the maximum supported value
		    is 2.

- qcom,ldo-headroom-voltage
	Usage:      required if qcom,vdd-threadN-ldo-supply is specified for the
		    CPR3 thread containing this CPR3 regulator and this CPR3
+24 −13
Original line number Diff line number Diff line
@@ -72,6 +72,15 @@ MMSS specific properties:
		    supported value is 8.  These combos correspond to CPR
		    revision fuse values from 0 to 7 in order.

- qcom,cpr-speed-bins
	Usage:      optional
	Value type: <u32>
	Definition: Specifies the number of speed bins being supported by the
		    device.  This value is utilized by several other properties.
		    Supported values are 1 up to the maximum possible for a
		    given regulator type.  For MMSS the maximum supported value
		    is 1.

- qcom,cpr-target-quotients
	Usage:      required
	Value type: <prop-encoded-array>
@@ -82,18 +91,20 @@ MMSS specific properties:
		    RO15 in order.  If a given RO is unused for a corner, then
		    its target quotient should be specified as 0.

		    The tuple list grouping must contain qcom,cpr-fuse-combos
		    number of tuple lists in which case the lists are matched to
		    fuse combinations 1-to-1 or qcom,cpr-speed-bins number of
		    tuples lists in which case the lists are matched to speed
		    bins 1-to-1 or exactly 1 list which is used regardless of
		    the fuse combination and speed bin found on a given chip.

		    Each tuple list must contain the number of tuples defined in
		    the corresponding element of the qcom,cpr-corners property.
		    A single tuple list may only be specified if all of the
		    corner counts in qcom,cpr-corners are the same.  The tuples
		    in a given list are ordered from the lowest corner to the
		    highest corner.

		    The tuple list grouping must contain either
		    qcom,cpr-fuse-combos number of tuple lists in which case the
		    lists are matched to fuse combinations 1-to-1 or the
		    grouping must contain exactly 1 list which is used
		    regardless of the fuse combination found on a given chip.
		    the corresponding element of the qcom,cpr-corners property
		    or the qcom,cpr-speed-bins property.  A single tuple list
		    may only be specified if all of the corner counts in
		    qcom,cpr-corners and are qcom,cpr-speed-bins the same.
		    The tuples in a given list are ordered from the lowest
		    corner to the highest corner.

- qcom,cpr-ro-scaling-factor
	Usage:      required if qcom,cpr-closed-loop-voltage-adjustment is
@@ -105,8 +116,8 @@ MMSS specific properties:

		    Each tuple list must contain the number of tuples defined in
		    the corresponding element of the qcom,cpr-corners property
		    as opposed to the value of the qcom,cpr-fuse-corners
		    property.
		    or the qcom,cpr-speed-bins property as opposed to the value
		    of the qcom,cpr-fuse-corners property.

Note that the qcom,cpr-closed-loop-voltage-fuse-adjustment property is not
meaningful for MMSS CPR3 regulator nodes since target quotients are not defined
+74 −88
Original line number Diff line number Diff line
@@ -239,6 +239,19 @@ Platform independent properties:
		    possible for a given regulator type.  See platform specific
		    binding files for further details.

- qcom,cpr-speed-bins
	Usage:      optional
	Value type: <u32>
	Definition: Specifies the number of speed bins being supported by the
		    device.  This value is utilized by several other properties.
		    Supported values are 1 up to the maximum possible for a
		    given regulator type.  See platform specific binding files
		    for further details.

		    This property can only be utilized if the number of corners
		    for all fuse combinations associated with a given speed bin
		    is the same.

- qcom,cpr-corners
	Usage:      required
	Value type: <prop-encoded-array>
@@ -250,19 +263,30 @@ Platform independent properties:
		    element which is used regardless of the fuse combination
		    found on a given chip.

- qcom,cpr-speed-bin-corners
	Usage:      required if qcom,cpr-speed-bins is specified
	Value type: <prop-encoded-array>
	Definition: A list of integers which defines how many voltage corners
		    are to be used for each speed bin.  The list must contain
		    qcom,cpr-speed-bins number of elements.

- qcom,cpr-corner-fmax-map
	Usage:      required
	Value type: <prop-encoded-array>
	Definition: A list of integer tuples which each define the highest
		    (i.e. maximum frequency) 1-based corner value associated
		    with each fuse-corner.  Each tuple must have a number of
		    elements equal to the value of the qcom,cpr-fuse-corners
		    property.  The elements of a tuple are ordered from lowest
		    to highest fuse corner.  The list must contain either
		    qcom,cpr-fuse-combos number of tuples in which case the
		    tuple mappings are applied to fuse combinations 1-to-1 or
		    the list must contain exactly 1 tuple which is used
		    regardless of the fuse combination found on a given chip.
		    with each fuse-corner.

		    Each tuple must have a number of elements equal to the value
		    of the qcom,cpr-fuse-corners property.  The elements of a
		    tuple are ordered from lowest to highest fuse corner.

		    The list must contain qcom,cpr-fuse-combos number of tuples
		    in which case the tuples are matched to fuse combinations
		    1-to-1 or qcom,cpr-speed-bins number of tuples in which case
		    the tuples are matched to speed bins 1-to-1 or exactly 1
		    tuple which is used regardless of the fuse combination and
		    speed bin found on a given chip.

- qcom,cpr-voltage-ceiling
	Usage:      required
@@ -271,16 +295,18 @@ Platform independent properties:
		    voltage in microvolts for each voltage corner in order from
		    lowest to highest.

		    The list must contain either qcom,cpr-fuse-combos number of
		    tuples in which case the tuples are matched to fuse
		    combinations 1-to-1 or the list must contain exactly 1 tuple
		    which is used regardless of the fuse combination found on a
		    given chip.
		    The list must contain qcom,cpr-fuse-combos number of tuples
		    in which case the tuples are matched to fuse combinations
		    1-to-1 or qcom,cpr-speed-bins number of tuples in which case
		    the tuples are matched to speed bins 1-to-1 or exactly 1
		    tuple which is used regardless of the fuse combination and
		    speed bin found on a given chip.

		    Each tuple must be of the length defined in the
		    corresponding element of the qcom,cpr-corners property.  A
		    single tuple may only be specified if all of the corner
		    counts in qcom,cpr-corners are the same.
		    corresponding element of the qcom,cpr-corners property or
		    the qcom,cpr-speed-bins property.  A single tuple may only
		    be specified if all of the corner counts in qcom,cpr-corners
		    are the same.

- qcom,cpr-voltage-floor
	Usage:      required
@@ -353,14 +379,8 @@ Platform independent properties:
		    applied to the values read from fuses before the values are
		    used in interpolation for intermediate corners.

		    The list must contain either qcom,cpr-fuse-combos number of
		    tuples in which case the tuples are matched to fuse
		    combinations 1-to-1 or the list must contain exactly 1 tuple
		    which is used regardless of the fuse combination found on a
		    given chip.

		    Each tuple must have a number of elements equal to the value
		    of the qcom,cpr-fuse-corners property.
		    The list and tuples must meet the same size requirements as
		    those specified for qcom,cpr-corner-fmax-map above.

		    The open-loop voltage for a given fuse corner corresponds to
		    the voltage that is safe to use under all circumstances.
@@ -376,16 +396,8 @@ Platform independent properties:
		    the open-loop voltage values after they have been
		    interpolated for intermediate corners.

		    The list must contain either qcom,cpr-fuse-combos number of
		    tuples in which case the tuples are matched to fuse
		    combinations 1-to-1 or the list must contain exactly 1 tuple
		    which is used regardless of the fuse combination found on a
		    given chip.

		    Each tuple must be of the length defined in the
		    corresponding element of the qcom,cpr-corners property.  A
		    single tuple may only be specified if all of the corner
		    counts in qcom,cpr-corners are the same.
		    The list and tuples must meet the same size requirements as
		    those specified for qcom,cpr-voltage-ceiling above.

- qcom,cpr-open-loop-voltage-min-diff
	Usage:      optional; only meaningful if the
@@ -406,16 +418,8 @@ Platform independent properties:
		    voltage values have been interpolated for intermediate
		    corners and after adjustments have been applied.

		    The list must contain either qcom,cpr-fuse-combos number of
		    tuples in which case the tuples are matched to fuse
		    combinations 1-to-1 or the list must contain exactly 1 tuple
		    which is used regardless of the fuse combination found on a
		    given chip.

		    Each tuple must be of the length defined in the
		    corresponding element of the qcom,cpr-corners property.  A
		    single tuple may only be specified if all of the corner
		    counts in qcom,cpr-corners are the same.
		    The list and tuples must meet the same size requirements as
		    those specified for qcom,cpr-voltage-ceiling above.

		    If this property is not specified, then the minimum
		    difference is assumed to be 0 uV for all corners.
@@ -429,16 +433,11 @@ Platform independent properties:
		    applied to the values read from fuses before the values are
		    used in interpolation for intermediate corners.

		    The list must contain either qcom,cpr-fuse-combos number of
		    tuples in which case the tuples are matched to fuse
		    combinations 1-to-1 or the list must contain exactly 1 tuple
		    which is used regardless of the fuse combination found on a
		    given chip.
		    The list and tuples must meet the same size requirements as
		    those specified for qcom,cpr-corner-fmax-map above.

		    Each tuple must have a number of elements equal to the value
		    of the qcom,cpr-fuse-corners property.
		    The qcom,cpr-ro-scaling-factor property must be specified
		    in order to utilize this property.
		    The qcom,cpr-ro-scaling-factor property must be specified in
		    order to utilize this property.

		    The closed-loop voltage for a given fuse corner corresponds
		    to the voltage that the CPR controller settles the VDD
@@ -454,17 +453,10 @@ Platform independent properties:
		    target quotient values after they have been interpolated
		    for intermediate corners.

		    The list must contain either qcom,cpr-fuse-combos number of
		    tuples in which case the tuples are matched to fuse
		    combinations 1-to-1 or the list must contain exactly 1 tuple
		    which is used regardless of the fuse combination found on a
		    given chip.
		    The list and tuples must meet the same size requirements as
		    those specified for qcom,cpr-voltage-ceiling above.

		    Each tuple must be of the length defined in the
		    corresponding element of the qcom,cpr-corners property.  A
		    single tuple may only be specified if all of the corner
		    counts in qcom,cpr-corners are the same.  The
		    qcom,cpr-ro-scaling-factor property must be specified in
		    The qcom,cpr-ro-scaling-factor property must be specified in
		    order to utilize this property.

- qcom,cpr-ro-scaling-factor
@@ -485,11 +477,12 @@ Platform independent properties:
		    list are ordered from the lowest fuse corner to the highest
		    fuse corner.

		    The tuple list grouping must contain either
		    qcom,cpr-fuse-combos number of tuple lists in which case the
		    lists are matched to fuse combinations 1-to-1 or the
		    grouping must contain exactly 1 list which is used
		    regardless of the fuse combination found on a given chip.
		    The tuple list grouping must contain qcom,cpr-fuse-combos
		    number of tuple lists in which case the lists are matched to
		    fuse combinations 1-to-1 or qcom,cpr-speed-bins number of
		    tuple lists in which case the lists are matched to
		    speed bins 1-to-1 or exactly 1 list which is used regardless
		    of the fuse combination and speed bin found on a given chip.

		    The target quotient adjustment to apply for each RO of a
		    given corner is determined by multiplying the adjustment
@@ -506,11 +499,13 @@ Platform independent properties:
			0 - do not perform CPR aging adjustment
			1 - perform CPR aging adjustment

		    The list must contain either qcom,cpr-fuse-combos number of
		    elements in which case the elements are applied to fuse
		    combinations 1-to-1 or the list must contain exactly 1
		    element which is used regardless of the fuse combination
		    found on a given chip.
		    The list must contain qcom,cpr-fuse-combos number of
		    elements in which case the elements are matched to fuse
		    combinations 1-to-1 or qcom,cpr-speed-bins number of
		    elements in which case the elements are matched to
		    speed bins 1-to-1 or exactly 1 element which is used
		    regardless of the fuse combination and speed bin found
		    on a given chip.

- qcom,cpr-aging-max-voltage-adjustment
	Usage:      required if qcom,allow-aging-voltage-adjustment is specified
@@ -521,11 +516,8 @@ Platform independent properties:
		    and the adjustment specified is greater than 0, then aging
		    adjustments are required for this regulator.

		    The list must contain either qcom,cpr-fuse-combos number of
		    elements in which case the max adjustments are applied to
		    fuse combinations 1-to-1 or the list must contain exactly 1
		    element which is used regardless of the fuse combination
		    found on a given chip.
		    The list must meet the same size requirements as those
		    specified for qcom,allow-aging-voltage-adjustment above.

- qcom,cpr-aging-ref-corner
	Usage:      required if qcom,allow-aging-voltage-adjustment is specified
@@ -534,11 +526,8 @@ Platform independent properties:
		    for this regulator to use during aging measurements for each
		    fuse combination.

		    The list must contain either qcom,cpr-fuse-combos number of
		    elements in which case the max adjustments are applied to
		    fuse combinations 1-to-1 or the list must contain exactly 1
		    element which is used regardless of the fuse combination
		    found on a given chip.
		    The list must meet the same size requirements as those
		    specified for qcom,allow-aging-voltage-adjustment above.

- qcom,cpr-aging-ro-scaling-factor
	Usage:      required if qcom,allow-aging-voltage-adjustment is specified
@@ -547,11 +536,8 @@ Platform independent properties:
		    oscillator (RO) scaling factor with units of QUOT/V to use
		    during aging measurements for each fuse combination.

		    The list must contain either qcom,cpr-fuse-combos number of
		    elements in which case the scaling factors are applied to
		    fuse combinations 1-to-1 or the list must contain exactly 1
		    element which is used regardless of the fuse combination
		    found on a given chip.
		    The list must meet the same size requirements as those
		    specified for qcom,allow-aging-voltage-adjustment above.

- qcom,cpr-aging-derate
	Usage:      optional, though only meaningful if
+17 −46
Original line number Diff line number Diff line
@@ -562,19 +562,14 @@ static int cpr3_msm8996_hmss_read_fuse_data(struct cpr3_regulator *vreg)
 * cpr3_hmss_parse_corner_data() - parse HMSS corner data from device tree
 *		properties of the CPR3 regulator's device node
 * @vreg:		Pointer to the CPR3 regulator
 * @corner_sum:		Pointer which is output with the sum of the corner
 *			counts across all fuse combos
 * @combo_offset:	Pointer which is output with the array offset for the
 *			selected fuse combo
 *
 * Return: 0 on success, errno on failure
 */
static int cpr3_hmss_parse_corner_data(struct cpr3_regulator *vreg,
			int *corner_sum, int *combo_offset)
static int cpr3_hmss_parse_corner_data(struct cpr3_regulator *vreg)
{
	int rc;

	rc = cpr3_parse_common_corner_data(vreg, corner_sum, combo_offset);
	rc = cpr3_parse_common_corner_data(vreg);
	if (rc) {
		cpr3_err(vreg, "error reading corner data, rc=%d\n", rc);
		return rc;
@@ -587,8 +582,6 @@ static int cpr3_hmss_parse_corner_data(struct cpr3_regulator *vreg,
 * cpr3_msm8996_hmss_calculate_open_loop_voltages() - calculate the open-loop
 *		voltage for each corner of a CPR3 regulator
 * @vreg:		Pointer to the CPR3 regulator
 * @corner_sum:		Sum of the corner counts across all fuse combos
 * @combo_offset:	Array offset for the selected fuse combo
 *
 * If open-loop voltage interpolation is allowed in both device tree and in
 * hardware fuses, then this function calculates the open-loop voltage for a
@@ -603,8 +596,7 @@ static int cpr3_hmss_parse_corner_data(struct cpr3_regulator *vreg,
 * Return: 0 on success, errno on failure
 */
static int cpr3_msm8996_hmss_calculate_open_loop_voltages(
			struct cpr3_regulator *vreg, int corner_sum,
			int combo_offset)
			struct cpr3_regulator *vreg)
{
	struct device_node *node = vreg->of_node;
	struct cpr3_msm8996_hmss_fuses *fuse = vreg->platform_fuses;
@@ -734,8 +726,7 @@ done:
			cpr3_debug(vreg, "open-loop[%2d] = %d uV\n", i,
				vreg->corner[i].open_loop_volt);

		rc = cpr3_adjust_open_loop_voltages(vreg, corner_sum,
			combo_offset);
		rc = cpr3_adjust_open_loop_voltages(vreg);
		if (rc)
			cpr3_err(vreg, "open-loop voltage adjustment failed, rc=%d\n",
				rc);
@@ -821,8 +812,6 @@ static int cpr3_hmss_adjust_voltages_for_apm(struct cpr3_regulator *vreg)
 * cpr3_hmss_parse_closed_loop_voltage_adjustments() - load per-fuse-corner and
 *		per-corner closed-loop adjustment values from device tree
 * @vreg:		Pointer to the CPR3 regulator
 * @corner_sum:		Sum of the corner counts across all fuse combos
 * @combo_offset:	Array offset for the selected fuse combo
 * @volt_adjust:	Pointer to array which will be filled with the
 *			per-corner closed-loop adjustment voltages
 * @volt_adjust_fuse:	Pointer to array which will be filled with the
@@ -834,8 +823,7 @@ static int cpr3_hmss_adjust_voltages_for_apm(struct cpr3_regulator *vreg)
 * Return: 0 on success, errno on failure
 */
static int cpr3_hmss_parse_closed_loop_voltage_adjustments(
			struct cpr3_regulator *vreg, int corner_sum,
			int combo_offset, int *volt_adjust,
			struct cpr3_regulator *vreg, int *volt_adjust,
			int *volt_adjust_fuse, int *ro_scale)
{
	struct cpr3_msm8996_hmss_fuses *fuse = vreg->platform_fuses;
@@ -861,11 +849,7 @@ static int cpr3_hmss_parse_closed_loop_voltage_adjustments(
		return -ENOMEM;

	rc = cpr3_parse_array_property(vreg, "qcom,cpr-ro-scaling-factor",
		vreg->fuse_corner_count * CPR3_RO_COUNT,
		vreg->fuse_combos_supported * vreg->fuse_corner_count
			* CPR3_RO_COUNT,
		vreg->fuse_combo * vreg->fuse_corner_count * CPR3_RO_COUNT,
		ro_all_scale);
		vreg->fuse_corner_count * CPR3_RO_COUNT, ro_all_scale);
	if (rc) {
		cpr3_err(vreg, "could not load RO scaling factors, rc=%d\n",
			rc);
@@ -884,11 +868,7 @@ static int cpr3_hmss_parse_closed_loop_voltage_adjustments(
			"qcom,cpr-closed-loop-voltage-fuse-adjustment", NULL)) {
		rc = cpr3_parse_array_property(vreg,
			"qcom,cpr-closed-loop-voltage-fuse-adjustment",
			vreg->fuse_corner_count,
			vreg->fuse_combos_supported
				* vreg->fuse_corner_count,
			vreg->fuse_combo * vreg->fuse_corner_count,
			volt_adjust_fuse);
			vreg->fuse_corner_count, volt_adjust_fuse);
		if (rc) {
			cpr3_err(vreg, "could not load closed-loop fused voltage adjustments, rc=%d\n",
				rc);
@@ -898,10 +878,9 @@ static int cpr3_hmss_parse_closed_loop_voltage_adjustments(

	if (of_find_property(vreg->of_node,
			"qcom,cpr-closed-loop-voltage-adjustment", NULL)) {
		rc = cpr3_parse_array_property(vreg,
		rc = cpr3_parse_corner_array_property(vreg,
			"qcom,cpr-closed-loop-voltage-adjustment",
			vreg->corner_count, corner_sum, combo_offset,
			volt_adjust);
			1, volt_adjust);
		if (rc) {
			cpr3_err(vreg, "could not load closed-loop voltage adjustments, rc=%d\n",
				rc);
@@ -956,8 +935,6 @@ static int cpr3_msm8996_hmss_set_no_interpolation_quotients(
 * cpr3_msm8996_hmss_calculate_target_quotients() - calculate the CPR target
 *		quotient for each corner of a CPR3 regulator
 * @vreg:		Pointer to the CPR3 regulator
 * @corner_sum:		Sum of the corner counts across all fuse combos
 * @combo_offset:	Array offset for the selected fuse combo
 *
 * If target quotient interpolation is allowed in both device tree and in
 * hardware fuses, then this function calculates the target quotient for a
@@ -972,8 +949,7 @@ static int cpr3_msm8996_hmss_set_no_interpolation_quotients(
 * Return: 0 on success, errno on failure
 */
static int cpr3_msm8996_hmss_calculate_target_quotients(
			struct cpr3_regulator *vreg, int corner_sum,
			int combo_offset)
			struct cpr3_regulator *vreg)
{
	struct cpr3_msm8996_hmss_fuses *fuse = vreg->platform_fuses;
	int rc;
@@ -1021,8 +997,8 @@ static int cpr3_msm8996_hmss_calculate_target_quotients(
		goto done;
	}

	rc = cpr3_hmss_parse_closed_loop_voltage_adjustments(vreg, corner_sum,
		combo_offset, volt_adjust, volt_adjust_fuse, ro_scale);
	rc = cpr3_hmss_parse_closed_loop_voltage_adjustments(vreg, volt_adjust,
			volt_adjust_fuse, ro_scale);
	if (rc) {
		cpr3_err(vreg, "could not load closed-loop voltage adjustments, rc=%d\n",
			rc);
@@ -1386,8 +1362,6 @@ static int cpr3_hmss_kvreg_init(struct cpr3_regulator *vreg)
static int cpr3_hmss_init_regulator(struct cpr3_regulator *vreg)
{
	struct cpr3_msm8996_hmss_fuses *fuse;
	int corner_sum = 0;
	int combo_offset = 0;
	int rc;

	rc = cpr3_msm8996_hmss_read_fuse_data(vreg);
@@ -1421,15 +1395,14 @@ static int cpr3_hmss_init_regulator(struct cpr3_regulator *vreg)
		return rc;
	}

	rc = cpr3_hmss_parse_corner_data(vreg, &corner_sum, &combo_offset);
	rc = cpr3_hmss_parse_corner_data(vreg);
	if (rc) {
		cpr3_err(vreg, "unable to read CPR corner data from device tree, rc=%d\n",
			rc);
		return rc;
	}

	rc = cpr3_msm8996_hmss_calculate_open_loop_voltages(vreg, corner_sum,
			combo_offset);
	rc = cpr3_msm8996_hmss_calculate_open_loop_voltages(vreg);
	if (rc) {
		cpr3_err(vreg, "unable to calculate open-loop voltages, rc=%d\n",
			rc);
@@ -1452,14 +1425,13 @@ static int cpr3_hmss_init_regulator(struct cpr3_regulator *vreg)

	cpr3_open_loop_voltage_as_ceiling(vreg);

	rc = cpr3_limit_floor_voltages(vreg, corner_sum, combo_offset);
	rc = cpr3_limit_floor_voltages(vreg);
	if (rc) {
		cpr3_err(vreg, "unable to limit floor voltages, rc=%d\n", rc);
		return rc;
	}

	rc = cpr3_msm8996_hmss_calculate_target_quotients(vreg, corner_sum,
			combo_offset);
	rc = cpr3_msm8996_hmss_calculate_target_quotients(vreg);
	if (rc) {
		cpr3_err(vreg, "unable to calculate target quotients, rc=%d\n",
			rc);
@@ -1553,8 +1525,7 @@ static int cpr3_hmss_init_aging(struct cpr3_controller *ctrl)
		return 0;

	rc = cpr3_parse_array_property(vreg, "qcom,cpr-aging-ro-scaling-factor",
					1, vreg->fuse_combos_supported,
					vreg->fuse_combo, &aging_ro_scale);
					1, &aging_ro_scale);
	if (rc)
		return rc;

+16 −39

File changed.

Preview size limit exceeded, changes collapsed.

Loading