From patchwork Sat Jun 27 23:29:28 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Linus Walleij X-Patchwork-Id: 191955 Delivered-To: patch@linaro.org Received: by 2002:a54:3249:0:0:0:0:0 with SMTP id g9csp1521262ecs; Sat, 27 Jun 2020 16:29:39 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyz2G/d1nnf5kDqmaGmKz7eiAmEvbONYX1Zr72I+4e+g3OB7btkwm89acHjS2SqsOTZ7jhf X-Received: by 2002:a17:90a:e2c7:: with SMTP id fr7mr6628304pjb.103.1593300579317; Sat, 27 Jun 2020 16:29:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1593300579; cv=none; d=google.com; s=arc-20160816; b=a6CA2V6L5xsZVHK2fbhIxnt7Fkk1XIo3z7/pMQdFiprjzcbGbxmvFHP3YB2f0Zqc07 MIYip10NYoNQ03eaM/g1T4Ronzng9nGgyw5sjnCLteGlE6M298Hit5qPO53F7c5gycO5 Yyr2i21bDcsgv3NRfSxiQxIhDJ5ex4/QTyabtWoend4+Ov4DwWqvAyoNgPXAmMlJNzB/ 1HofQNz4SZhTKKEUSJbdiydppW+vcL+3YBQ7GmUhRKnRHUX+w9xgvA9mNLONPnEreEKc 5xvX7vz7D6SS25Rm1tfBzOIFLXHjM718CqQ//IVjmqhl6Dd7hotvoJj5aseCHpVl/Ks9 NaCQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:list-subscribe:list-help :list-post:list-archive:list-unsubscribe:list-id:precedence :mime-version:message-id:date:subject:to:from:dkim-signature :delivered-to; bh=q2ZvOqJEqK0pleOcwBZVNTE5Que0mvkAusfkvErg9fQ=; b=zIis6/KgCEdIHw/wRldq5uK2WEoUVr4bTMOMzo7cJQ3HGwzf/i/vfwxpjdAiN9MslX VuDNJpERwDywmPy+6gXm1ER1+5SixYi5h3EK6FW6ft0A9pKAyQpMtrxPPdl4cDs5gWyz fDa9/cImg20LT6lY3ft9StWfgpG7nD8Hqhcr3yJYgVjFFPSQbBOxr8EAmq2zWCtsT1Hf BEQCrUi+neRecmTjOLSOPTTD/J8uzVcDIATRWDOgbOEFXEpPPpyA/N8w1qiO6jlUGesP lzv4ef69jSiIZ9PcOWBpME+f00qNOZ4w4C0oRz5iuadz+HK0CSJrNxZvsxJ1BQ1gG6tS hbPg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=yybUkKnh; spf=pass (google.com: best guess record for domain of dri-devel-bounces@lists.freedesktop.org designates 2610:10:20:722:a800:ff:fe36:1795 as permitted sender) smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from gabe.freedesktop.org (gabe.freedesktop.org. [2610:10:20:722:a800:ff:fe36:1795]) by mx.google.com with ESMTPS id ei18si1122820pjb.148.2020.06.27.16.29.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 27 Jun 2020 16:29:39 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of dri-devel-bounces@lists.freedesktop.org designates 2610:10:20:722:a800:ff:fe36:1795 as permitted sender) client-ip=2610:10:20:722:a800:ff:fe36:1795; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=yybUkKnh; spf=pass (google.com: best guess record for domain of dri-devel-bounces@lists.freedesktop.org designates 2610:10:20:722:a800:ff:fe36:1795 as permitted sender) smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id A1EDF6E195; Sat, 27 Jun 2020 23:29:36 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-lj1-x243.google.com (mail-lj1-x243.google.com [IPv6:2a00:1450:4864:20::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id C78806E195 for ; Sat, 27 Jun 2020 23:29:35 +0000 (UTC) Received: by mail-lj1-x243.google.com with SMTP id q7so800847ljm.1 for ; Sat, 27 Jun 2020 16:29:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=AS4roLWc588NrDVBWwvtIDKxmiE/S4XwzoTaolYHArw=; b=yybUkKnhAtdRe02WbJgs7OH9wQgBQq+o0KmmEWxnxvlYYkzuBiBNKB468kW3V8qwdy lMZWlSwT/kHvKn+gYTMqvch59xsen0hbX3Q3M4g1UI6Ava7tE8XXqsZ6PX9CbtCU4xke WkSsFV1Bf79RDvlCMt+gsbkcdQJ+jzG3cPMRiPaEYAJoSn8hEQb5HbC+cCc7mzR2uw4J 8wzQAuUlnXsdKap1+7LhMXbtHTrD9N9HRAan/wyirmPHEu+j3DXnWV9XniwVhXsO4rvy KY3wOsp81J0TFX/TT3AQHvuY+KegxmCh0VXSREYLk53PsTrCkuosDejQTieQcqNJqQE+ KZGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=AS4roLWc588NrDVBWwvtIDKxmiE/S4XwzoTaolYHArw=; b=rfyF6Qye23RCD5sserZe/vgQqhrc1Oe+UuSTcXIdR1h8cpAC0uuAtux8+TMjJoDK8F wFzDFX6lTM0pHmUR8LaEgJcMCMNkX/3AyC69jLulUtJ6dNLf1CCJKU3Xv2s1NtwBIZUM X56BobgQ3e+k/Jy2NP7cpsTOkEWwUpSORDI4UpXab0Sapu8ydE9s/xuQ4xl0qR4RiHLi lVX+bZTNhZ7Msq0wvVF5ib3rP+asxJXxgNb+YWaswoGjEs0pCbwDtDqlGLlIV25X+PkW EHCblV6LRBTRgR7SkQc3FdIBnuvKZgrDlxO+wvm98KTSjUAWP/pCalUmef/SbBriyJmi jQxw== X-Gm-Message-State: AOAM530GzqjQaNE8RAKOTH4mN9SL7Z252SmcTlerBib//EKdkWbzoRZh /a3LpMt3QmIrp6/TvNjwe8B3AiCG8i0= X-Received: by 2002:a2e:9c95:: with SMTP id x21mr4855969lji.435.1593300573887; Sat, 27 Jun 2020 16:29:33 -0700 (PDT) Received: from genomnajs.lan (c-d63ee155.152980-0-69706f6e6c79.bbcust.telenor.se. [85.225.62.214]) by smtp.gmail.com with ESMTPSA id m14sm9151041lfp.18.2020.06.27.16.29.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 27 Jun 2020 16:29:33 -0700 (PDT) From: Linus Walleij To: dri-devel@lists.freedesktop.org, Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Subject: [PATCH] drm: gma500: Convert to GPIO descriptors Date: Sun, 28 Jun 2020 01:29:28 +0200 Message-Id: <20200627232928.696195-1-linus.walleij@linaro.org> X-Mailer: git-send-email 2.25.4 MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Finalize he conversion of GMA500 to use only GPIO descriptors. The GPIO look-up-table is associated with the device directly in the GMA500 Medfield chip driver since no explicit platform type device (such as in x86/platform/intel-mid) exists: the GMA500 probes directly from the PCI device. Apparently GPIOs 88 and 34 are used on all of these so just go ahead and register those for resetting the DSI pipes. Cc: Patrik Jakobsson Signed-off-by: Linus Walleij --- drivers/gpu/drm/gma500/mdfld_device.c | 20 +++++++++ drivers/gpu/drm/gma500/mdfld_dsi_dpi.c | 2 +- drivers/gpu/drm/gma500/mdfld_dsi_output.c | 51 ++++++++++++----------- drivers/gpu/drm/gma500/mdfld_dsi_output.h | 2 +- drivers/gpu/drm/gma500/mdfld_output.h | 2 +- drivers/gpu/drm/gma500/psb_intel_drv.h | 1 - 6 files changed, 49 insertions(+), 29 deletions(-) -- 2.25.4 _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel Acked-by: Patrik Jakobsson diff --git a/drivers/gpu/drm/gma500/mdfld_device.c b/drivers/gpu/drm/gma500/mdfld_device.c index b718efccdcf2..be9cf6b1e3b3 100644 --- a/drivers/gpu/drm/gma500/mdfld_device.c +++ b/drivers/gpu/drm/gma500/mdfld_device.c @@ -6,6 +6,7 @@ **************************************************************************/ #include +#include #include @@ -505,12 +506,31 @@ static const struct psb_offset mdfld_regmap[3] = { }, }; +/* + * The GPIO lines for resetting DSI pipe 0 and 2 are available in the + * PCI device 0000:00:0c.0 on the Medfield. + */ +static struct gpiod_lookup_table mdfld_dsi_pipe_gpio_table = { + .table = { + GPIO_LOOKUP("0000:00:0c.0", 128, "dsi-pipe0-reset", + GPIO_ACTIVE_HIGH), + GPIO_LOOKUP("0000:00:0c.0", 34, "dsi-pipe2-reset", + GPIO_ACTIVE_HIGH), + { }, + }, +}; + static int mdfld_chip_setup(struct drm_device *dev) { struct drm_psb_private *dev_priv = dev->dev_private; if (pci_enable_msi(dev->pdev)) dev_warn(dev->dev, "Enabling MSI failed!\n"); dev_priv->regmap = mdfld_regmap; + + /* Associate the GPIO lines with the DRM device */ + mdfld_dsi_pipe_gpio_table.dev_id = dev_name(dev->dev); + gpiod_add_lookup_table(&mdfld_dsi_pipe_gpio_table); + return mid_chip_setup(dev); } diff --git a/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c b/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c index c976a9dd9240..ae1223f631a7 100644 --- a/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c +++ b/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c @@ -955,7 +955,7 @@ struct mdfld_dsi_encoder *mdfld_dsi_dpi_init(struct drm_device *dev, /* panel hard-reset */ if (p_funcs->reset) { - ret = p_funcs->reset(pipe); + ret = p_funcs->reset(dev, pipe); if (ret) { DRM_ERROR("Panel %d hard-reset failed\n", pipe); return NULL; diff --git a/drivers/gpu/drm/gma500/mdfld_dsi_output.c b/drivers/gpu/drm/gma500/mdfld_dsi_output.c index f350ac1ead18..c9478261964a 100644 --- a/drivers/gpu/drm/gma500/mdfld_dsi_output.c +++ b/drivers/gpu/drm/gma500/mdfld_dsi_output.c @@ -28,6 +28,7 @@ #include #include #include +#include #include @@ -432,42 +433,42 @@ static int mdfld_dsi_get_default_config(struct drm_device *dev, return 0; } -int mdfld_dsi_panel_reset(int pipe) +int mdfld_dsi_panel_reset(struct drm_device *ddev, int pipe) { - unsigned gpio; - int ret = 0; - + struct device *dev = ddev->dev; + struct gpio_desc *gpiod; + + /* + * Raise the GPIO reset line for the corresponding pipe to HIGH, + * this is probably because it is active low so this takes the + * respective pipe out of reset. (We have no code to put it back + * into reset in this driver.) + */ switch (pipe) { case 0: - gpio = 128; + gpiod = gpiod_get(dev, "dsi-pipe0-reset", GPIOD_OUT_HIGH); + if (IS_ERR(gpiod)) + return PTR_ERR(gpiod); break; case 2: - gpio = 34; + gpiod = gpiod_get(dev, "dsi-pipe2-reset", GPIOD_OUT_HIGH); + if (IS_ERR(gpiod)) + return PTR_ERR(gpiod); break; default: - DRM_ERROR("Invalid output\n"); + DRM_DEV_ERROR(dev, "Invalid output pipe\n"); return -EINVAL; } + gpiod_put(gpiod); - ret = gpio_request(gpio, "gfx"); - if (ret) { - DRM_ERROR("gpio_rqueset failed\n"); - return ret; - } - - ret = gpio_direction_output(gpio, 1); - if (ret) { - DRM_ERROR("gpio_direction_output failed\n"); - goto gpio_error; - } + /* Always read the pipe0 GPIO line, FIXME: explain why! */ + gpiod = gpiod_get(dev, "dsi-pipe0-reset", GPIOD_ASIS); + if (IS_ERR(gpiod)) + return PTR_ERR(gpiod); + gpiod_get_value(gpiod); + gpiod_put(gpiod); - gpio_get_value(128); - -gpio_error: - if (gpio_is_valid(gpio)) - gpio_free(gpio); - - return ret; + return 0; } /* diff --git a/drivers/gpu/drm/gma500/mdfld_dsi_output.h b/drivers/gpu/drm/gma500/mdfld_dsi_output.h index 0cccfe400a98..5c0db3c2903f 100644 --- a/drivers/gpu/drm/gma500/mdfld_dsi_output.h +++ b/drivers/gpu/drm/gma500/mdfld_dsi_output.h @@ -372,6 +372,6 @@ extern void mdfld_dsi_controller_init(struct mdfld_dsi_config *dsi_config, extern int mdfld_dsi_get_power_mode(struct mdfld_dsi_config *dsi_config, u32 *mode, bool hs); -extern int mdfld_dsi_panel_reset(int pipe); +extern int mdfld_dsi_panel_reset(struct drm_device *dev, int pipe); #endif /*__MDFLD_DSI_OUTPUT_H__*/ diff --git a/drivers/gpu/drm/gma500/mdfld_output.h b/drivers/gpu/drm/gma500/mdfld_output.h index 17a944d70add..37a516cc56be 100644 --- a/drivers/gpu/drm/gma500/mdfld_output.h +++ b/drivers/gpu/drm/gma500/mdfld_output.h @@ -54,7 +54,7 @@ struct panel_funcs { const struct drm_encoder_helper_funcs *encoder_helper_funcs; struct drm_display_mode * (*get_config_mode)(struct drm_device *); int (*get_panel_info)(struct drm_device *, int, struct panel_info *); - int (*reset)(int pipe); + int (*reset)(struct drm_device *, int); void (*drv_ic_init)(struct mdfld_dsi_config *dsi_config, int pipe); }; diff --git a/drivers/gpu/drm/gma500/psb_intel_drv.h b/drivers/gpu/drm/gma500/psb_intel_drv.h index fb601983cef0..9221d1f545b0 100644 --- a/drivers/gpu/drm/gma500/psb_intel_drv.h +++ b/drivers/gpu/drm/gma500/psb_intel_drv.h @@ -13,7 +13,6 @@ #include #include #include -#include #include "gma_display.h" /*