Commit 88ac7939 authored by Jani Nikula's avatar Jani Nikula Committed by Daniel Vetter

drm/i915: base gmbus pin validity check on the gmbus pin map array

This will be helpful for adding future platforms. It is better to keep
the information in the single point of truth (the table) instead of
duplicating it into the validity function.

While at it, add dev_priv parameter to the function, also to prepare for
adding future platform support.
Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 5ea6e5e3
...@@ -3064,10 +3064,8 @@ void i915_teardown_sysfs(struct drm_device *dev_priv); ...@@ -3064,10 +3064,8 @@ void i915_teardown_sysfs(struct drm_device *dev_priv);
/* intel_i2c.c */ /* intel_i2c.c */
extern int intel_setup_gmbus(struct drm_device *dev); extern int intel_setup_gmbus(struct drm_device *dev);
extern void intel_teardown_gmbus(struct drm_device *dev); extern void intel_teardown_gmbus(struct drm_device *dev);
static inline bool intel_gmbus_is_valid_pin(unsigned int pin) extern bool intel_gmbus_is_valid_pin(struct drm_i915_private *dev_priv,
{ unsigned int pin);
return (pin >= GMBUS_PIN_SSC && pin <= GMBUS_PIN_DPD);
}
extern struct i2c_adapter * extern struct i2c_adapter *
intel_gmbus_get_adapter(struct drm_i915_private *dev_priv, unsigned int pin); intel_gmbus_get_adapter(struct drm_i915_private *dev_priv, unsigned int pin);
......
...@@ -438,7 +438,7 @@ parse_general_definitions(struct drm_i915_private *dev_priv, ...@@ -438,7 +438,7 @@ parse_general_definitions(struct drm_i915_private *dev_priv,
if (block_size >= sizeof(*general)) { if (block_size >= sizeof(*general)) {
int bus_pin = general->crt_ddc_gmbus_pin; int bus_pin = general->crt_ddc_gmbus_pin;
DRM_DEBUG_KMS("crt_ddc_bus_pin: %d\n", bus_pin); DRM_DEBUG_KMS("crt_ddc_bus_pin: %d\n", bus_pin);
if (intel_gmbus_is_valid_pin(bus_pin)) if (intel_gmbus_is_valid_pin(dev_priv, bus_pin))
dev_priv->vbt.crt_ddc_pin = bus_pin; dev_priv->vbt.crt_ddc_pin = bus_pin;
} else { } else {
DRM_DEBUG_KMS("BDB_GD too small (%d). Invalid.\n", DRM_DEBUG_KMS("BDB_GD too small (%d). Invalid.\n",
......
...@@ -502,7 +502,7 @@ void intel_dvo_init(struct drm_device *dev) ...@@ -502,7 +502,7 @@ void intel_dvo_init(struct drm_device *dev)
* special cases, but otherwise default to what's defined * special cases, but otherwise default to what's defined
* in the spec. * in the spec.
*/ */
if (intel_gmbus_is_valid_pin(dvo->gpio)) if (intel_gmbus_is_valid_pin(dev_priv, dvo->gpio))
gpio = dvo->gpio; gpio = dvo->gpio;
else if (dvo->type == INTEL_DVO_CHIP_LVDS) else if (dvo->type == INTEL_DVO_CHIP_LVDS)
gpio = GMBUS_PIN_SSC; gpio = GMBUS_PIN_SSC;
......
...@@ -49,6 +49,12 @@ static const struct gmbus_pin gmbus_pins[] = { ...@@ -49,6 +49,12 @@ static const struct gmbus_pin gmbus_pins[] = {
[GMBUS_PIN_DPD] = { "dpd", GPIOF }, [GMBUS_PIN_DPD] = { "dpd", GPIOF },
}; };
bool intel_gmbus_is_valid_pin(struct drm_i915_private *dev_priv,
unsigned int pin)
{
return pin < ARRAY_SIZE(gmbus_pins) && gmbus_pins[pin].reg;
}
/* Intel GPIO access functions */ /* Intel GPIO access functions */
#define I2C_RISEFALL_TIME 10 #define I2C_RISEFALL_TIME 10
...@@ -534,7 +540,7 @@ int intel_setup_gmbus(struct drm_device *dev) ...@@ -534,7 +540,7 @@ int intel_setup_gmbus(struct drm_device *dev)
init_waitqueue_head(&dev_priv->gmbus_wait_queue); init_waitqueue_head(&dev_priv->gmbus_wait_queue);
for (pin = 0; pin < ARRAY_SIZE(dev_priv->gmbus); pin++) { for (pin = 0; pin < ARRAY_SIZE(dev_priv->gmbus); pin++) {
if (!intel_gmbus_is_valid_pin(pin)) if (!intel_gmbus_is_valid_pin(dev_priv, pin))
continue; continue;
bus = &dev_priv->gmbus[pin]; bus = &dev_priv->gmbus[pin];
...@@ -571,7 +577,7 @@ int intel_setup_gmbus(struct drm_device *dev) ...@@ -571,7 +577,7 @@ int intel_setup_gmbus(struct drm_device *dev)
err: err:
while (--pin) { while (--pin) {
if (!intel_gmbus_is_valid_pin(pin)) if (!intel_gmbus_is_valid_pin(dev_priv, pin))
continue; continue;
bus = &dev_priv->gmbus[pin]; bus = &dev_priv->gmbus[pin];
...@@ -583,7 +589,7 @@ int intel_setup_gmbus(struct drm_device *dev) ...@@ -583,7 +589,7 @@ int intel_setup_gmbus(struct drm_device *dev)
struct i2c_adapter *intel_gmbus_get_adapter(struct drm_i915_private *dev_priv, struct i2c_adapter *intel_gmbus_get_adapter(struct drm_i915_private *dev_priv,
unsigned int pin) unsigned int pin)
{ {
if (WARN_ON(!intel_gmbus_is_valid_pin(pin))) if (WARN_ON(!intel_gmbus_is_valid_pin(dev_priv, pin)))
return NULL; return NULL;
return &dev_priv->gmbus[pin].adapter; return &dev_priv->gmbus[pin].adapter;
...@@ -613,7 +619,7 @@ void intel_teardown_gmbus(struct drm_device *dev) ...@@ -613,7 +619,7 @@ void intel_teardown_gmbus(struct drm_device *dev)
unsigned int pin; unsigned int pin;
for (pin = 0; pin < ARRAY_SIZE(dev_priv->gmbus); pin++) { for (pin = 0; pin < ARRAY_SIZE(dev_priv->gmbus); pin++) {
if (!intel_gmbus_is_valid_pin(pin)) if (!intel_gmbus_is_valid_pin(dev_priv, pin))
continue; continue;
bus = &dev_priv->gmbus[pin]; bus = &dev_priv->gmbus[pin];
......
...@@ -781,7 +781,7 @@ static bool lvds_is_present_in_vbt(struct drm_device *dev, ...@@ -781,7 +781,7 @@ static bool lvds_is_present_in_vbt(struct drm_device *dev,
child->device_type != DEVICE_TYPE_LFP) child->device_type != DEVICE_TYPE_LFP)
continue; continue;
if (intel_gmbus_is_valid_pin(child->i2c_pin)) if (intel_gmbus_is_valid_pin(dev_priv, child->i2c_pin))
*i2c_pin = child->i2c_pin; *i2c_pin = child->i2c_pin;
/* However, we cannot trust the BIOS writers to populate /* However, we cannot trust the BIOS writers to populate
......
...@@ -2291,7 +2291,8 @@ intel_sdvo_select_i2c_bus(struct drm_i915_private *dev_priv, ...@@ -2291,7 +2291,8 @@ intel_sdvo_select_i2c_bus(struct drm_i915_private *dev_priv,
else else
mapping = &dev_priv->sdvo_mappings[1]; mapping = &dev_priv->sdvo_mappings[1];
if (mapping->initialized && intel_gmbus_is_valid_pin(mapping->i2c_pin)) if (mapping->initialized &&
intel_gmbus_is_valid_pin(dev_priv, mapping->i2c_pin))
pin = mapping->i2c_pin; pin = mapping->i2c_pin;
else else
pin = GMBUS_PIN_DPB; pin = GMBUS_PIN_DPB;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment