drm/i915/intel_i2c: refactor using intel_gmbus_get_adapter
Instead of letting other modules directly access the ->gmbus array, introduce intel_gmbus_get_adapter() for looking up an i2c_adapter for a given gmbus port identifier. This will enable later refactoring of the gmbus port list. Note: Before requesting an adapter for a given gmbus port number, the driver must first check its validity using i2c_intel_gmbus_is_port_valid(). If this check fails, a call to intel_gmbus_get_adapter() will WARN_ON and return NULL. This is relevant for parts of the driver that read a port from VBIOS, which might be improperly initialized and contain an invalid port. In these cases, the driver must fall back to using a safer default port. Signed-off-by: Daniel Kurtz <djkurtz@chromium.org> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:

committed by
Daniel Vetter

parent
489fbc107f
commit
3bd7d90938
@@ -243,7 +243,7 @@ static int intel_dvo_get_modes(struct drm_connector *connector)
|
||||
* that's not the case.
|
||||
*/
|
||||
intel_ddc_get_modes(connector,
|
||||
&dev_priv->gmbus[GMBUS_PORT_DPC].adapter);
|
||||
intel_gmbus_get_adapter(dev_priv, GMBUS_PORT_DPC));
|
||||
if (!list_empty(&connector->probed_modes))
|
||||
return 1;
|
||||
|
||||
@@ -375,7 +375,7 @@ void intel_dvo_init(struct drm_device *dev)
|
||||
* special cases, but otherwise default to what's defined
|
||||
* in the spec.
|
||||
*/
|
||||
if (dvo->gpio != 0)
|
||||
if (intel_gmbus_is_port_valid(dvo->gpio))
|
||||
gpio = dvo->gpio;
|
||||
else if (dvo->type == INTEL_DVO_CHIP_LVDS)
|
||||
gpio = GMBUS_PORT_SSC;
|
||||
@@ -386,7 +386,7 @@ void intel_dvo_init(struct drm_device *dev)
|
||||
* It appears that everything is on GPIOE except for panels
|
||||
* on i830 laptops, which are on GPIOB (DVOA).
|
||||
*/
|
||||
i2c = &dev_priv->gmbus[gpio].adapter;
|
||||
i2c = intel_gmbus_get_adapter(dev_priv, gpio);
|
||||
|
||||
intel_dvo->dev = *dvo;
|
||||
if (!dvo->dev_ops->init(&intel_dvo->dev, i2c))
|
||||
|
Reference in New Issue
Block a user