ARM: OMAP: Explicitly mask VPVOLTAGE field
Subsystems (3)
PATCH 1/1 ARM: OMAP: Explicitly mask VPVOLTAGE field
Reading the VPVOLTAGE field of PRM_VP_*_VOLTAGE registers currently relies on a u32 -> u8 conversion to mask off the FORCEUPDATEWAIT field in the upper bits. Make this explicit using the mask and shift symbols already defined, added as new fields in struct omap_vp_common.
--- arch/arm/mach-omap2/vp.c | 3 ++- arch/arm/mach-omap2/vp.h | 4 ++++ arch/arm/mach-omap2/vp3xxx_data.c | 3 +++ arch/arm/mach-omap2/vp44xx_data.c | 2 ++ 4 files changed, 11 insertions(+), 1 deletions(-)
arch/arm/mach-omap2/vp.c +2 -1
@@ -227,7 +227,8 @@ unsigned long omap_vp_get_curr_volt(struct voltagedomain *voltdm)return 0 ; } - curr_vsel = voltdm->read (vp->voltage); + curr_vsel = (voltdm->read (vp->voltage) & vp->common->vpvoltage_mask) + >> vp->common->vpvoltage_shift;if (!voltdm->pmic || !voltdm->pmic->vsel_to_uv) { pr_warning("%s: PMIC function to convert vsel to voltage"
arch/arm/mach-omap2/vp.h +4 -0
@@ -63,6 +63,8 @@ struct omap_vp_ops {* @vlimitto_vddmin_shift: VDDMIN field shift in PRM_VP*_VLIMITTO reg * @vlimitto_vddmax_shift: VDDMAX field shift in PRM_VP*_VLIMITTO reg * @vlimitto_timeout_shift: TIMEOUT field shift in PRM_VP*_VLIMITTO reg +* @vpvoltage_mask: VPVOLTAGE field mask in PRM_VP*_VOLTAGE reg +* @vpvoltage_shift: VPVOLTAGE field shift in PRM_VP*_VOLTAGE reg */ struct omap_vp_common {u32 vpconfig_erroroffset_mask;
@@ -79,6 +81,8 @@ struct omap_vp_common {u8 vlimitto_vddmin_shift;u8 vlimitto_vddmax_shift;u8 vlimitto_timeout_shift; +u8 vpvoltage_mask; +u8 vpvoltage_shift;const struct omap_vp_ops *ops; };
arch/arm/mach-omap2/vp3xxx_data.c +3 -0
@@ -51,6 +51,9 @@ static const struct omap_vp_common omap3_vp_common = { .vlimitto_vddmin_shift = OMAP3430_VDDMIN_SHIFT, .vlimitto_vddmax_shift = OMAP3430_VDDMAX_SHIFT, .vlimitto_timeout_shift = OMAP3430_TIMEOUT_SHIFT, + .vpvoltage_mask = OMAP3430_VPVOLTAGE_MASK, + .vpvoltage_shift = OMAP3430_VPVOLTAGE_SHIFT, + .ops = &omap3_vp_ops, };
arch/arm/mach-omap2/vp44xx_data.c +2 -0
@@ -51,6 +51,8 @@ static const struct omap_vp_common omap4_vp_common = { .vlimitto_vddmin_shift = OMAP4430_VDDMIN_SHIFT, .vlimitto_vddmax_shift = OMAP4430_VDDMAX_SHIFT, .vlimitto_timeout_shift = OMAP4430_TIMEOUT_SHIFT, + .vpvoltage_mask = OMAP4430_VPVOLTAGE_MASK, + .vpvoltage_shift = OMAP4430_VPVOLTAGE_SHIFT, .ops = &omap4_vp_ops, };
Signature · 1 line
1.7.3.1
Hi Todd,
Quoted 6 lines · Todd Poynor
Reading the VPVOLTAGE field of PRM_VP_*_VOLTAGE registers currently relies on a u32 -> u8 conversion to mask off the FORCEUPDATEWAIT field in the upper bits. Make this explicit using the mask and shift symbols already defined, added as new fields in struct
omap_vp_common.Signed-off-by Todd Poynor <[email protected]>
Thanks for the patch. Indeed it's better to make this explict.
Minor nit: we don't need both the mask and the shift defined. Just add the mask, and the code can use __ffs(mask) to get the shift value. This is what I've done in the rest of the VC/VP code.
Also, can you make the subject prefix 'OMAP: VP: ...'
Thanks,
Kevin
Quoted 69 lines
--- arch/arm/mach-omap2/vp.c | 3 ++- arch/arm/mach-omap2/vp.h | 4 ++++ arch/arm/mach-omap2/vp3xxx_data.c | 3 +++ arch/arm/mach-omap2/vp44xx_data.c | 2 ++ 4 files changed, 11 insertions(+), 1 deletions(-)arch/arm/mach-omap2/vp.c +2
-1@@ -227,7 +227,8 @@ unsigned long omap_vp_get_curr_volt(struct voltagedomain *voltdm)return 0 ; } - curr_vsel = voltdm->read (vp->voltage); + curr_vsel = (voltdm->read (vp->voltage) & vp->common->vpvoltage_mask) + >> vp->common->vpvoltage_shift;if (!voltdm->pmic || !voltdm->pmic->vsel_to_uv) { pr_warning("%s: PMIC function to convert vsel to voltage"arch/arm/mach-omap2/vp.h +4
-0@@ -63,6 +63,8 @@ struct omap_vp_ops {* @vlimitto_vddmin_shift: VDDMIN field shift in PRM_VP*_VLIMITTO reg * @vlimitto_vddmax_shift: VDDMAX field shift in PRM_VP*_VLIMITTO reg * @vlimitto_timeout_shift: TIMEOUT field shift in PRM_VP*_VLIMITTO reg +* @vpvoltage_mask: VPVOLTAGE field mask in PRM_VP*_VOLTAGE reg +* @vpvoltage_shift: VPVOLTAGE field shift in PRM_VP*_VOLTAGE reg */ struct omap_vp_common {u32 vpconfig_erroroffset_mask;@@ -79,6 +81,8 @@ struct omap_vp_common {u8 vlimitto_vddmin_shift;u8 vlimitto_vddmax_shift;u8 vlimitto_timeout_shift; +u8 vpvoltage_mask; +u8 vpvoltage_shift;const struct omap_vp_ops *ops; };arch/arm/mach-omap2/vp3xxx_data.c +3
-0@@ -51,6 +51,9 @@ static const struct omap_vp_common omap3_vp_common = { .vlimitto_vddmin_shift = OMAP3430_VDDMIN_SHIFT, .vlimitto_vddmax_shift = OMAP3430_VDDMAX_SHIFT, .vlimitto_timeout_shift = OMAP3430_TIMEOUT_SHIFT, + .vpvoltage_mask = OMAP3430_VPVOLTAGE_MASK, + .vpvoltage_shift = OMAP3430_VPVOLTAGE_SHIFT, + .ops = &omap3_vp_ops, };arch/arm/mach-omap2/vp44xx_data.c +2
-0@@ -51,6 +51,8 @@ static const struct omap_vp_common omap4_vp_common = { .vlimitto_vddmin_shift = OMAP4430_VDDMIN_SHIFT, .vlimitto_vddmax_shift = OMAP4430_VDDMAX_SHIFT, .vlimitto_timeout_shift = OMAP4430_TIMEOUT_SHIFT, + .vpvoltage_mask = OMAP4430_VPVOLTAGE_MASK, + .vpvoltage_shift = OMAP4430_VPVOLTAGE_SHIFT, .ops = &omap4_vp_ops, };