lkml.org 
[lkml]   [2023]   [Oct]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 4/7] drm/i915/dsi: Extract common soc_gpio_exec() helper
    Date
    Extract a common soc_gpio_exec() helper that may be used by a few SoCs.

    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    ---
    drivers/gpu/drm/i915/display/intel_dsi_vbt.c | 49 +++++++++++---------
    1 file changed, 27 insertions(+), 22 deletions(-)

    diff --git a/drivers/gpu/drm/i915/display/intel_dsi_vbt.c b/drivers/gpu/drm/i915/display/intel_dsi_vbt.c
    index 1014051a6866..3fb85b6d320e 100644
    --- a/drivers/gpu/drm/i915/display/intel_dsi_vbt.c
    +++ b/drivers/gpu/drm/i915/display/intel_dsi_vbt.c
    @@ -243,6 +243,32 @@ static const u8 *mipi_exec_delay(struct intel_dsi *intel_dsi, const u8 *data)
    return data;
    }

    +static void soc_exec_gpio(struct intel_connector *connector, const char *con_id,
    + u8 gpio_index, bool value)
    +{
    + struct drm_i915_private *dev_priv = to_i915(connector->base.dev);
    + /* XXX: this table is a quick ugly hack. */
    + static struct gpio_desc *soc_gpio_table[U8_MAX + 1];
    + struct gpio_desc *gpio_desc = soc_gpio_table[gpio_index];
    +
    + if (gpio_desc) {
    + gpiod_set_value(gpio_desc, value);
    + } else {
    + gpio_desc = devm_gpiod_get_index(dev_priv->drm.dev,
    + con_id, gpio_index,
    + value ? GPIOD_OUT_LOW :
    + GPIOD_OUT_HIGH);
    + if (IS_ERR(gpio_desc)) {
    + drm_err(&dev_priv->drm,
    + "GPIO index %u request failed (%pe)\n",
    + gpio_index, gpio_desc);
    + return;
    + }
    +
    + soc_gpio_table[gpio_index] = gpio_desc;
    + }
    +}
    +
    static void vlv_exec_gpio(struct intel_connector *connector,
    u8 gpio_source, u8 gpio_index, bool value)
    {
    @@ -348,28 +374,7 @@ static void chv_exec_gpio(struct intel_connector *connector,
    static void bxt_exec_gpio(struct intel_connector *connector,
    u8 gpio_source, u8 gpio_index, bool value)
    {
    - struct drm_i915_private *dev_priv = to_i915(connector->base.dev);
    - /* XXX: this table is a quick ugly hack. */
    - static struct gpio_desc *bxt_gpio_table[U8_MAX + 1];
    - struct gpio_desc *gpio_desc = bxt_gpio_table[gpio_index];
    -
    - if (!gpio_desc) {
    - gpio_desc = devm_gpiod_get_index(dev_priv->drm.dev,
    - NULL, gpio_index,
    - value ? GPIOD_OUT_LOW :
    - GPIOD_OUT_HIGH);
    -
    - if (IS_ERR_OR_NULL(gpio_desc)) {
    - drm_err(&dev_priv->drm,
    - "GPIO index %u request failed (%ld)\n",
    - gpio_index, PTR_ERR(gpio_desc));
    - return;
    - }
    -
    - bxt_gpio_table[gpio_index] = gpio_desc;
    - }
    -
    - gpiod_set_value(gpio_desc, value);
    + soc_exec_gpio(connector, NULL, gpio_index, value);
    }

    static void icl_exec_gpio(struct intel_connector *connector,
    --
    2.40.0.1.gaa8946217a0b
    \
     
     \ /
      Last update: 2023-10-24 17:58    [W:2.609 / U:0.116 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site