Commit 69669455 authored by Jean Delvare's avatar Jean Delvare Committed by Chris Wilson

drm/i915: Fix I2C adapter registration

Fix many small bugs in I2C adapter registration:
* Properly reject unsupported GPIO pin.
* Fix improper use of I2C_NAME_SIZE (which is the size of
  i2c_client.name, not i2c_adapter.name.)
* Prefix adapter names with "i915" so that the user knows what the
  I2C channel is connected to.
* Fix swapped characters in the string used to name the GPIO-based
  adapter.
* Add missing comma in gmbus name table.
Signed-off-by: default avatarJean Delvare <khali@linux-fr.org>
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
parent 3f8ff0e7
...@@ -160,7 +160,7 @@ intel_gpio_create(struct drm_i915_private *dev_priv, u32 pin) ...@@ -160,7 +160,7 @@ intel_gpio_create(struct drm_i915_private *dev_priv, u32 pin)
}; };
struct intel_gpio *gpio; struct intel_gpio *gpio;
if (pin < 1 || pin > 7) if (pin >= ARRAY_SIZE(map_pin_to_reg) || !map_pin_to_reg[pin])
return NULL; return NULL;
gpio = kzalloc(sizeof(struct intel_gpio), GFP_KERNEL); gpio = kzalloc(sizeof(struct intel_gpio), GFP_KERNEL);
...@@ -172,7 +172,8 @@ intel_gpio_create(struct drm_i915_private *dev_priv, u32 pin) ...@@ -172,7 +172,8 @@ intel_gpio_create(struct drm_i915_private *dev_priv, u32 pin)
gpio->reg += PCH_GPIOA - GPIOA; gpio->reg += PCH_GPIOA - GPIOA;
gpio->dev_priv = dev_priv; gpio->dev_priv = dev_priv;
snprintf(gpio->adapter.name, I2C_NAME_SIZE, "GPIO%c", "?BACDEF?"[pin]); snprintf(gpio->adapter.name, sizeof(gpio->adapter.name),
"i915 GPIO%c", "?BACDE?F"[pin]);
gpio->adapter.owner = THIS_MODULE; gpio->adapter.owner = THIS_MODULE;
gpio->adapter.algo_data = &gpio->algo; gpio->adapter.algo_data = &gpio->algo;
gpio->adapter.dev.parent = &dev_priv->dev->pdev->dev; gpio->adapter.dev.parent = &dev_priv->dev->pdev->dev;
...@@ -349,7 +350,7 @@ int intel_setup_gmbus(struct drm_device *dev) ...@@ -349,7 +350,7 @@ int intel_setup_gmbus(struct drm_device *dev)
"panel", "panel",
"dpc", "dpc",
"dpb", "dpb",
"reserved" "reserved",
"dpd", "dpd",
}; };
struct drm_i915_private *dev_priv = dev->dev_private; struct drm_i915_private *dev_priv = dev->dev_private;
...@@ -366,8 +367,8 @@ int intel_setup_gmbus(struct drm_device *dev) ...@@ -366,8 +367,8 @@ int intel_setup_gmbus(struct drm_device *dev)
bus->adapter.owner = THIS_MODULE; bus->adapter.owner = THIS_MODULE;
bus->adapter.class = I2C_CLASS_DDC; bus->adapter.class = I2C_CLASS_DDC;
snprintf(bus->adapter.name, snprintf(bus->adapter.name,
I2C_NAME_SIZE, sizeof(bus->adapter.name),
"gmbus %s", "i915 gmbus %s",
names[i]); names[i]);
bus->adapter.dev.parent = &dev->pdev->dev; bus->adapter.dev.parent = &dev->pdev->dev;
......
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