On Wed, Mar 16, 2016 at 12:43:29PM +0200, Jani Nikula wrote: > Hide knowledge about VBT child devices in intel_bios.c. > > v2: also move int_tv_support check to intel_bios.c (Sivakumar) > > Signed-off-by: Jani Nikula <jani.nikula@xxxxxxxxx> Reviewed-by: Daniel Vetter <daniel.vetter@xxxxxxxx> > --- > drivers/gpu/drm/i915/i915_drv.h | 1 + > drivers/gpu/drm/i915/intel_bios.c | 41 ++++++++++++++++++++++++++++++++++ > drivers/gpu/drm/i915/intel_tv.c | 46 +-------------------------------------- > 3 files changed, 43 insertions(+), 45 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h > index 80b14f1ba302..f314d2737b4e 100644 > --- a/drivers/gpu/drm/i915/i915_drv.h > +++ b/drivers/gpu/drm/i915/i915_drv.h > @@ -3334,6 +3334,7 @@ extern void intel_i2c_reset(struct drm_device *dev); > /* intel_bios.c */ > int intel_bios_init(struct drm_i915_private *dev_priv); > bool intel_bios_is_valid_vbt(const void *buf, size_t size); > +bool intel_bios_is_tv_present(struct drm_i915_private *dev_priv); > > /* intel_opregion.c */ > #ifdef CONFIG_ACPI > diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c > index bf62a19c8f69..d5e6da01adaa 100644 > --- a/drivers/gpu/drm/i915/intel_bios.c > +++ b/drivers/gpu/drm/i915/intel_bios.c > @@ -1431,3 +1431,44 @@ intel_bios_init(struct drm_i915_private *dev_priv) > > return 0; > } > + > +/** > + * intel_bios_is_tv_present - is integrated TV present in VBT > + * @dev_priv: i915 device instance > + * > + * Return true if TV is present. If no child devices were parsed from VBT, > + * assume TV is present. > + */ > +bool intel_bios_is_tv_present(struct drm_i915_private *dev_priv) > +{ > + union child_device_config *p_child; > + int i; > + > + if (!dev_priv->vbt.int_tv_support) > + return false; > + > + if (!dev_priv->vbt.child_dev_num) > + return true; > + > + for (i = 0; i < dev_priv->vbt.child_dev_num; i++) { > + p_child = dev_priv->vbt.child_dev + i; > + /* > + * If the device type is not TV, continue. > + */ > + switch (p_child->old.device_type) { > + case DEVICE_TYPE_INT_TV: > + case DEVICE_TYPE_TV: > + case DEVICE_TYPE_TV_SVIDEO_COMPOSITE: > + break; > + default: > + continue; > + } > + /* Only when the addin_offset is non-zero, it is regarded > + * as present. > + */ > + if (p_child->old.addin_offset) > + return true; > + } > + > + return false; > +} > diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c > index d5570c859009..223129d3c765 100644 > --- a/drivers/gpu/drm/i915/intel_tv.c > +++ b/drivers/gpu/drm/i915/intel_tv.c > @@ -1519,47 +1519,6 @@ static const struct drm_encoder_funcs intel_tv_enc_funcs = { > .destroy = intel_encoder_destroy, > }; > > -/* > - * Enumerate the child dev array parsed from VBT to check whether > - * the integrated TV is present. > - * If it is present, return 1. > - * If it is not present, return false. > - * If no child dev is parsed from VBT, it assumes that the TV is present. > - */ > -static int tv_is_present_in_vbt(struct drm_device *dev) > -{ > - struct drm_i915_private *dev_priv = dev->dev_private; > - union child_device_config *p_child; > - int i, ret; > - > - if (!dev_priv->vbt.child_dev_num) > - return 1; > - > - ret = 0; > - for (i = 0; i < dev_priv->vbt.child_dev_num; i++) { > - p_child = dev_priv->vbt.child_dev + i; > - /* > - * If the device type is not TV, continue. > - */ > - switch (p_child->old.device_type) { > - case DEVICE_TYPE_INT_TV: > - case DEVICE_TYPE_TV: > - case DEVICE_TYPE_TV_SVIDEO_COMPOSITE: > - break; > - default: > - continue; > - } > - /* Only when the addin_offset is non-zero, it is regarded > - * as present. > - */ > - if (p_child->old.addin_offset) { > - ret = 1; > - break; > - } > - } > - return ret; > -} > - > void > intel_tv_init(struct drm_device *dev) > { > @@ -1575,13 +1534,10 @@ intel_tv_init(struct drm_device *dev) > if ((I915_READ(TV_CTL) & TV_FUSE_STATE_MASK) == TV_FUSE_STATE_DISABLED) > return; > > - if (!tv_is_present_in_vbt(dev)) { > + if (!intel_bios_is_tv_present(dev_priv)) { > DRM_DEBUG_KMS("Integrated TV is not present.\n"); > return; > } > - /* Even if we have an encoder we may not have a connector */ > - if (!dev_priv->vbt.int_tv_support) > - return; > > /* > * Sanity check the TV output by checking to see if the > -- > 2.1.4 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx