From patchwork Wed Jun 1 09:23:04 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrik Jakobsson X-Patchwork-Id: 12866537 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D1C5FC433F5 for ; Wed, 1 Jun 2022 09:23:21 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B0DF810E95E; Wed, 1 Jun 2022 09:23:17 +0000 (UTC) Received: from mail-lj1-x22a.google.com (mail-lj1-x22a.google.com [IPv6:2a00:1450:4864:20::22a]) by gabe.freedesktop.org (Postfix) with ESMTPS id 32F1410E957 for ; Wed, 1 Jun 2022 09:23:16 +0000 (UTC) Received: by mail-lj1-x22a.google.com with SMTP id g12so1321509lja.3 for ; Wed, 01 Jun 2022 02:23:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=lHg+elX4lln4pSU+PqI79Ffz0qaGQYq82S03QUpNFuI=; b=qrs5V6KqNR3h495zI7obnWysAHQrxjB+jAjYznWqtjtLLHPJomCtCMBVFhmwt+Qu4S sjnah9uRGBrbRIhGh4KlH4rsyJf48VFBa39/iYXmX8qxrnOon35z1MkYZIf0+i9HB0BS mx3c2yczbayBktEqCmqGhc0qZoXNvNB0Y2HGktcnswletPDmpYmTvNOdNjE1TI8Mn2oi CvJDdT/FSFDRMlCC8rT595OX1ykwYajwbHQmllp2UylTryxNnB9Ue8rIJqcgnzqU5p1P M9YtS858+CP3XANmvgWr8+Phps2ShkeI1vt/9U7OnmgbcO2mVC/cj8c4ugchNIagOqD/ czZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=lHg+elX4lln4pSU+PqI79Ffz0qaGQYq82S03QUpNFuI=; b=lxxjw2A19WGTXxT9qCQLAeZF0otmHQxfp9ZyvbMRb3WY6a8SuJ9uhxLH/2XY6YBNm/ ET222DCAQnNNlsYQEON8iXzFXdM6C17WgsmpVgmwyGO1ITZ+UtsCstl/4XLVWg+4b2vF g5/Bk1TPa7t3HXtW7fJGSRmZvoqZFFeCt0x3UtfmRHrTx2oF6okkyQ3/leSDtR578yYL 19sSlcdJr35Mk73Udk8+Jg7G+YO06hqzZtOJLu6SxNdqNQDHuUZDmritB1PonTcwAfPm BqravcmLJvFvbSj2u0ldgpRk8wohwK5wjs+MMjZ936hyXocnM/86aNPC43+9Yq/QVNgQ +ccg== X-Gm-Message-State: AOAM531o3cJCDb4IUb3+vFf5O7T/kUuX76O08mGyPHAGTaUqMOIMrNH8 UNA/5nYd418iTIhYsP8a9Pf2cyeV2pg= X-Google-Smtp-Source: ABdhPJwv2N8OetYlAVmCOWlnojmkCrBDZofM8X1kpQUq/C99HK294W0eT0/vo0V0q+7H/rvSO+vxXQ== X-Received: by 2002:a05:651c:102b:b0:255:5ca3:8983 with SMTP id w11-20020a05651c102b00b002555ca38983mr4605670ljm.423.1654075393959; Wed, 01 Jun 2022 02:23:13 -0700 (PDT) Received: from localhost.localdomain (81-226-149-122-no518.tbcn.telia.com. [81.226.149.122]) by smtp.gmail.com with ESMTPSA id z14-20020a056512308e00b00478f60ca3a4sm257065lfd.56.2022.06.01.02.23.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Jun 2022 02:23:13 -0700 (PDT) From: Patrik Jakobsson To: dri-devel@lists.freedesktop.org Subject: [PATCH 1/8] drm/gma500: Use gma_ prefix for our i2c abstraction Date: Wed, 1 Jun 2022 11:23:04 +0200 Message-Id: <20220601092311.22648-2-patrik.r.jakobsson@gmail.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220601092311.22648-1-patrik.r.jakobsson@gmail.com> References: <20220601092311.22648-1-patrik.r.jakobsson@gmail.com> 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: , Cc: tzimmermann@suse.de Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" psb_intel_i2c_chan is used by all chips so use the correct prefix. Signed-off-by: Patrik Jakobsson --- drivers/gpu/drm/gma500/cdv_intel_crt.c | 4 ++-- drivers/gpu/drm/gma500/cdv_intel_hdmi.c | 6 +++--- drivers/gpu/drm/gma500/cdv_intel_lvds.c | 14 +++++--------- drivers/gpu/drm/gma500/intel_i2c.c | 22 +++++++++++----------- drivers/gpu/drm/gma500/oaktrail_lvds.c | 2 +- drivers/gpu/drm/gma500/oaktrail_lvds_i2c.c | 12 ++++++------ drivers/gpu/drm/gma500/psb_drv.h | 2 +- drivers/gpu/drm/gma500/psb_intel_drv.h | 12 ++++++------ drivers/gpu/drm/gma500/psb_intel_lvds.c | 16 ++++++++-------- 9 files changed, 43 insertions(+), 47 deletions(-) diff --git a/drivers/gpu/drm/gma500/cdv_intel_crt.c b/drivers/gpu/drm/gma500/cdv_intel_crt.c index 6bcd18c63c31..36c72a379d9f 100644 --- a/drivers/gpu/drm/gma500/cdv_intel_crt.c +++ b/drivers/gpu/drm/gma500/cdv_intel_crt.c @@ -194,7 +194,7 @@ static void cdv_intel_crt_destroy(struct drm_connector *connector) struct gma_connector *gma_connector = to_gma_connector(connector); struct gma_encoder *gma_encoder = gma_attached_encoder(connector); - psb_intel_i2c_destroy(gma_encoder->ddc_bus); + gma_i2c_destroy(gma_encoder->ddc_bus); drm_connector_cleanup(connector); kfree(gma_connector); } @@ -267,7 +267,7 @@ void cdv_intel_crt_init(struct drm_device *dev, gma_connector_attach_encoder(gma_connector, gma_encoder); /* Set up the DDC bus. */ - gma_encoder->ddc_bus = psb_intel_i2c_create(dev, GPIOA, "CRTDDC_A"); + gma_encoder->ddc_bus = gma_i2c_create(dev, GPIOA, "CRTDDC_A"); if (!gma_encoder->ddc_bus) { dev_printk(KERN_ERR, dev->dev, "DDC bus registration failed.\n"); goto failed_ddc; diff --git a/drivers/gpu/drm/gma500/cdv_intel_hdmi.c b/drivers/gpu/drm/gma500/cdv_intel_hdmi.c index 8987e555e113..e87272c9d358 100644 --- a/drivers/gpu/drm/gma500/cdv_intel_hdmi.c +++ b/drivers/gpu/drm/gma500/cdv_intel_hdmi.c @@ -245,7 +245,7 @@ static void cdv_hdmi_destroy(struct drm_connector *connector) struct gma_connector *gma_connector = to_gma_connector(connector); struct gma_encoder *gma_encoder = gma_attached_encoder(connector); - psb_intel_i2c_destroy(gma_encoder->i2c_bus); + gma_i2c_destroy(gma_encoder->i2c_bus); drm_connector_cleanup(connector); kfree(gma_connector); } @@ -342,8 +342,8 @@ void cdv_hdmi_init(struct drm_device *dev, break; } - gma_encoder->i2c_bus = psb_intel_i2c_create(dev, - ddc_bus, (reg == SDVOB) ? "HDMIB" : "HDMIC"); + gma_encoder->i2c_bus = gma_i2c_create(dev, ddc_bus, + (reg == SDVOB) ? "HDMIB" : "HDMIC"); if (!gma_encoder->i2c_bus) { dev_err(dev->dev, "No ddc adapter available!\n"); diff --git a/drivers/gpu/drm/gma500/cdv_intel_lvds.c b/drivers/gpu/drm/gma500/cdv_intel_lvds.c index 98d9f5483a7c..02dedf5dfa62 100644 --- a/drivers/gpu/drm/gma500/cdv_intel_lvds.c +++ b/drivers/gpu/drm/gma500/cdv_intel_lvds.c @@ -329,7 +329,7 @@ static void cdv_intel_lvds_destroy(struct drm_connector *connector) struct gma_connector *gma_connector = to_gma_connector(connector); struct gma_encoder *gma_encoder = gma_attached_encoder(connector); - psb_intel_i2c_destroy(gma_encoder->i2c_bus); + gma_i2c_destroy(gma_encoder->i2c_bus); drm_connector_cleanup(connector); kfree(gma_connector); } @@ -550,9 +550,7 @@ void cdv_intel_lvds_init(struct drm_device *dev, * Set up I2C bus * FIXME: distroy i2c_bus when exit */ - gma_encoder->i2c_bus = psb_intel_i2c_create(dev, - GPIOB, - "LVDSBLC_B"); + gma_encoder->i2c_bus = gma_i2c_create(dev, GPIOB, "LVDSBLC_B"); if (!gma_encoder->i2c_bus) { dev_printk(KERN_ERR, dev->dev, "I2C bus registration failed.\n"); @@ -572,9 +570,7 @@ void cdv_intel_lvds_init(struct drm_device *dev, */ /* Set up the DDC bus. */ - gma_encoder->ddc_bus = psb_intel_i2c_create(dev, - GPIOC, - "LVDSDDC_C"); + gma_encoder->ddc_bus = gma_i2c_create(dev, GPIOC, "LVDSDDC_C"); if (!gma_encoder->ddc_bus) { dev_printk(KERN_ERR, dev->dev, "DDC bus registration " "failed.\n"); @@ -652,10 +648,10 @@ void cdv_intel_lvds_init(struct drm_device *dev, failed_find: mutex_unlock(&dev->mode_config.mutex); pr_err("Failed find\n"); - psb_intel_i2c_destroy(gma_encoder->ddc_bus); + gma_i2c_destroy(gma_encoder->ddc_bus); failed_ddc: pr_err("Failed DDC\n"); - psb_intel_i2c_destroy(gma_encoder->i2c_bus); + gma_i2c_destroy(gma_encoder->i2c_bus); failed_blc_i2c: pr_err("Failed BLC\n"); drm_encoder_cleanup(encoder); diff --git a/drivers/gpu/drm/gma500/intel_i2c.c b/drivers/gpu/drm/gma500/intel_i2c.c index 5e1b4d70c317..6e9e2061ff3b 100644 --- a/drivers/gpu/drm/gma500/intel_i2c.c +++ b/drivers/gpu/drm/gma500/intel_i2c.c @@ -22,7 +22,7 @@ static int get_clock(void *data) { - struct psb_intel_i2c_chan *chan = data; + struct gma_i2c_chan *chan = data; struct drm_device *dev = chan->drm_dev; u32 val; @@ -32,7 +32,7 @@ static int get_clock(void *data) static int get_data(void *data) { - struct psb_intel_i2c_chan *chan = data; + struct gma_i2c_chan *chan = data; struct drm_device *dev = chan->drm_dev; u32 val; @@ -42,7 +42,7 @@ static int get_data(void *data) static void set_clock(void *data, int state_high) { - struct psb_intel_i2c_chan *chan = data; + struct gma_i2c_chan *chan = data; struct drm_device *dev = chan->drm_dev; u32 reserved = 0, clock_bits; @@ -62,7 +62,7 @@ static void set_clock(void *data, int state_high) static void set_data(void *data, int state_high) { - struct psb_intel_i2c_chan *chan = data; + struct gma_i2c_chan *chan = data; struct drm_device *dev = chan->drm_dev; u32 reserved = 0, data_bits; @@ -83,7 +83,7 @@ static void set_data(void *data, int state_high) } /** - * psb_intel_i2c_create - instantiate an Intel i2c bus using the specified GPIO reg + * gma_i2c_create - instantiate an Intel i2c bus using the specified GPIO reg * @dev: DRM device * @reg: GPIO reg to use * @name: name for this bus @@ -102,12 +102,12 @@ static void set_data(void *data, int state_high) * %GPIOH * see PRM for details on how these different busses are used. */ -struct psb_intel_i2c_chan *psb_intel_i2c_create(struct drm_device *dev, - const u32 reg, const char *name) +struct gma_i2c_chan *gma_i2c_create(struct drm_device *dev, const u32 reg, + const char *name) { - struct psb_intel_i2c_chan *chan; + struct gma_i2c_chan *chan; - chan = kzalloc(sizeof(struct psb_intel_i2c_chan), GFP_KERNEL); + chan = kzalloc(sizeof(struct gma_i2c_chan), GFP_KERNEL); if (!chan) goto out_free; @@ -143,12 +143,12 @@ struct psb_intel_i2c_chan *psb_intel_i2c_create(struct drm_device *dev, } /** - * psb_intel_i2c_destroy - unregister and free i2c bus resources + * gma_i2c_destroy - unregister and free i2c bus resources * @chan: channel to free * * Unregister the adapter from the i2c layer, then free the structure. */ -void psb_intel_i2c_destroy(struct psb_intel_i2c_chan *chan) +void gma_i2c_destroy(struct gma_i2c_chan *chan) { if (!chan) return; diff --git a/drivers/gpu/drm/gma500/oaktrail_lvds.c b/drivers/gpu/drm/gma500/oaktrail_lvds.c index aed5de8f8245..58b38e359098 100644 --- a/drivers/gpu/drm/gma500/oaktrail_lvds.c +++ b/drivers/gpu/drm/gma500/oaktrail_lvds.c @@ -408,7 +408,7 @@ void oaktrail_lvds_init(struct drm_device *dev, dev_dbg(dev->dev, "No LVDS modes found, disabling.\n"); if (gma_encoder->ddc_bus) { - psb_intel_i2c_destroy(gma_encoder->ddc_bus); + gma_i2c_destroy(gma_encoder->ddc_bus); gma_encoder->ddc_bus = NULL; } diff --git a/drivers/gpu/drm/gma500/oaktrail_lvds_i2c.c b/drivers/gpu/drm/gma500/oaktrail_lvds_i2c.c index d1ae91fcd224..9a6de6ff8b0c 100644 --- a/drivers/gpu/drm/gma500/oaktrail_lvds_i2c.c +++ b/drivers/gpu/drm/gma500/oaktrail_lvds_i2c.c @@ -65,7 +65,7 @@ static int get_clock(void *data) { - struct psb_intel_i2c_chan *chan = data; + struct gma_i2c_chan *chan = data; u32 val; val = LPC_READ_REG(chan, RGIO); @@ -79,7 +79,7 @@ static int get_clock(void *data) static int get_data(void *data) { - struct psb_intel_i2c_chan *chan = data; + struct gma_i2c_chan *chan = data; u32 val; val = LPC_READ_REG(chan, RGIO); @@ -93,7 +93,7 @@ static int get_data(void *data) static void set_clock(void *data, int state_high) { - struct psb_intel_i2c_chan *chan = data; + struct gma_i2c_chan *chan = data; u32 val; if (state_high) { @@ -112,7 +112,7 @@ static void set_clock(void *data, int state_high) static void set_data(void *data, int state_high) { - struct psb_intel_i2c_chan *chan = data; + struct gma_i2c_chan *chan = data; u32 val; if (state_high) { @@ -134,9 +134,9 @@ void oaktrail_lvds_i2c_init(struct drm_encoder *encoder) struct drm_device *dev = encoder->dev; struct gma_encoder *gma_encoder = to_gma_encoder(encoder); struct drm_psb_private *dev_priv = to_drm_psb_private(dev); - struct psb_intel_i2c_chan *chan; + struct gma_i2c_chan *chan; - chan = kzalloc(sizeof(struct psb_intel_i2c_chan), GFP_KERNEL); + chan = kzalloc(sizeof(struct gma_i2c_chan), GFP_KERNEL); if (!chan) return; diff --git a/drivers/gpu/drm/gma500/psb_drv.h b/drivers/gpu/drm/gma500/psb_drv.h index 0ddfec1a0851..0ea3d23575f3 100644 --- a/drivers/gpu/drm/gma500/psb_drv.h +++ b/drivers/gpu/drm/gma500/psb_drv.h @@ -469,7 +469,7 @@ struct drm_psb_private { struct drm_display_mode *sdvo_lvds_vbt_mode; struct bdb_lvds_backlight *lvds_bl; /* LVDS backlight info from VBT */ - struct psb_intel_i2c_chan *lvds_i2c_bus; /* FIXME: Remove this? */ + struct gma_i2c_chan *lvds_i2c_bus; /* FIXME: Remove this? */ /* Feature bits from the VBIOS */ unsigned int int_tv_support:1; diff --git a/drivers/gpu/drm/gma500/psb_intel_drv.h b/drivers/gpu/drm/gma500/psb_intel_drv.h index db3e757328fe..72585a3df25d 100644 --- a/drivers/gpu/drm/gma500/psb_intel_drv.h +++ b/drivers/gpu/drm/gma500/psb_intel_drv.h @@ -78,7 +78,7 @@ struct psb_intel_mode_device { uint32_t saveBLC_PWM_CTL; }; -struct psb_intel_i2c_chan { +struct gma_i2c_chan { /* for getting at dev. private (mmio etc.) */ struct drm_device *drm_dev; u32 reg; /* GPIO reg */ @@ -103,8 +103,8 @@ struct gma_encoder { /* FIXME: Either make SDVO and LVDS store it's i2c here or give CDV it's own set of output privates */ - struct psb_intel_i2c_chan *i2c_bus; - struct psb_intel_i2c_chan *ddc_bus; + struct gma_i2c_chan *i2c_bus; + struct gma_i2c_chan *ddc_bus; }; struct gma_connector { @@ -176,9 +176,9 @@ struct gma_crtc { #define to_psb_intel_framebuffer(x) \ container_of(x, struct psb_intel_framebuffer, base) -struct psb_intel_i2c_chan *psb_intel_i2c_create(struct drm_device *dev, - const u32 reg, const char *name); -void psb_intel_i2c_destroy(struct psb_intel_i2c_chan *chan); +struct gma_i2c_chan *gma_i2c_create(struct drm_device *dev, const u32 reg, + const char *name); +void gma_i2c_destroy(struct gma_i2c_chan *chan); int psb_intel_ddc_get_modes(struct drm_connector *connector, struct i2c_adapter *adapter); extern bool psb_intel_ddc_probe(struct i2c_adapter *adapter); diff --git a/drivers/gpu/drm/gma500/psb_intel_lvds.c b/drivers/gpu/drm/gma500/psb_intel_lvds.c index cad00380b386..07631891531a 100644 --- a/drivers/gpu/drm/gma500/psb_intel_lvds.c +++ b/drivers/gpu/drm/gma500/psb_intel_lvds.c @@ -49,8 +49,8 @@ struct psb_intel_lvds_priv { uint32_t savePFIT_PGM_RATIOS; uint32_t saveBLC_PWM_CTL; - struct psb_intel_i2c_chan *i2c_bus; - struct psb_intel_i2c_chan *ddc_bus; + struct gma_i2c_chan *i2c_bus; + struct gma_i2c_chan *ddc_bus; }; @@ -90,7 +90,7 @@ static int psb_lvds_i2c_set_brightness(struct drm_device *dev, { struct drm_psb_private *dev_priv = to_drm_psb_private(dev); - struct psb_intel_i2c_chan *lvds_i2c_bus = dev_priv->lvds_i2c_bus; + struct gma_i2c_chan *lvds_i2c_bus = dev_priv->lvds_i2c_bus; u8 out_buf[2]; unsigned int blc_i2c_brightness; @@ -525,7 +525,7 @@ void psb_intel_lvds_destroy(struct drm_connector *connector) struct gma_encoder *gma_encoder = gma_attached_encoder(connector); struct psb_intel_lvds_priv *lvds_priv = gma_encoder->dev_priv; - psb_intel_i2c_destroy(lvds_priv->ddc_bus); + gma_i2c_destroy(lvds_priv->ddc_bus); drm_connector_cleanup(connector); kfree(gma_connector); } @@ -695,7 +695,7 @@ void psb_intel_lvds_init(struct drm_device *dev, * Set up I2C bus * FIXME: distroy i2c_bus when exit */ - lvds_priv->i2c_bus = psb_intel_i2c_create(dev, GPIOB, "LVDSBLC_B"); + lvds_priv->i2c_bus = gma_i2c_create(dev, GPIOB, "LVDSBLC_B"); if (!lvds_priv->i2c_bus) { dev_printk(KERN_ERR, dev->dev, "I2C bus registration failed.\n"); @@ -715,7 +715,7 @@ void psb_intel_lvds_init(struct drm_device *dev, */ /* Set up the DDC bus. */ - lvds_priv->ddc_bus = psb_intel_i2c_create(dev, GPIOC, "LVDSDDC_C"); + lvds_priv->ddc_bus = gma_i2c_create(dev, GPIOC, "LVDSDDC_C"); if (!lvds_priv->ddc_bus) { dev_printk(KERN_ERR, dev->dev, "DDC bus registration " "failed.\n"); @@ -786,9 +786,9 @@ void psb_intel_lvds_init(struct drm_device *dev, failed_find: mutex_unlock(&dev->mode_config.mutex); - psb_intel_i2c_destroy(lvds_priv->ddc_bus); + gma_i2c_destroy(lvds_priv->ddc_bus); failed_ddc: - psb_intel_i2c_destroy(lvds_priv->i2c_bus); + gma_i2c_destroy(lvds_priv->i2c_bus); failed_blc_i2c: drm_encoder_cleanup(encoder); drm_connector_cleanup(connector); From patchwork Wed Jun 1 09:23:05 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrik Jakobsson X-Patchwork-Id: 12866538 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 9670AC433EF for ; Wed, 1 Jun 2022 09:23:25 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B1DC610E986; Wed, 1 Jun 2022 09:23:18 +0000 (UTC) Received: from mail-lj1-x231.google.com (mail-lj1-x231.google.com [IPv6:2a00:1450:4864:20::231]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5D3E010E95E for ; Wed, 1 Jun 2022 09:23:17 +0000 (UTC) Received: by mail-lj1-x231.google.com with SMTP id y29so1310652ljd.7 for ; Wed, 01 Jun 2022 02:23:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=7azJM45SL/Q3qWDcQfpnV0v+091eG9XqVPjE0cyc92I=; b=clV6rLrNVctGw6fjD2UL0JQy5qvexBYWTxk5quYTQySnDp/VapDmHBa+++usbXtr99 A3xWXzSL5k6F60cAGUlPqbFWJ1J6TOeeWxP/BetzZZm6cvIAyFRDckkmf8ajved/e1AM UWUGVEXq7BOrHF/J/vmsN8r44qnzyoIQGtg8RFUaZRlDwE5vtz3ZSCk4B0EKvC+tsEuQ TXpJElW5tHmvS/RD7TWHcv0NPJxSfJJMshMs6yCYAKn6ND0rc1jsVISlHeBLxGO0AFM6 kt2wrC1+TQwEKg59LALZ6bGG2jNiOBREycWvlofiNmeDE8jvy7/OD02KWWhjqnxjWrMy LBIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=7azJM45SL/Q3qWDcQfpnV0v+091eG9XqVPjE0cyc92I=; b=PANaGcxuBjrowrQXFtrFGQYe/tOT7RlqdIMPv9NO21aS5n6h9EonfFRBZAy0t/mmOH EUZUbmOxawLuK+fLOUcHfK+/U+C7OXxWXKJe6YX+9mn/bJ8DCOE9F3hReZfpjFdfh6Xb 3dHZtsGG8YDynFG3cm6vnrsEqq/oBCyCtEiy/Gd5qMxuPW8KmylRZs6Uu+Rg/hxWo16l CgW/ScX9LiXYybQgv/pLCBMiOq5lkJDctBrEiGHrEVcLhapWziwm0TZbQsMFILIb3Guk a2qpAoL86HitaEYg1y6I9F8Y6YS7a6DDHHR2+swORF0gDety4P++UjT5AIB4mwRjLKuE INCg== X-Gm-Message-State: AOAM531ulKfeu8AMQEAKCjhJimen7+CC5irj6S21YrYUJFRrqnPfeU3i nsF0FQn6se366LdexjFoSCSAF28XFf0= X-Google-Smtp-Source: ABdhPJwTs9Mjz6sKH7s7CUdCGNFTg5bOCL+qhW+FMejtoLrviECrAawNnHmn1jRzkp1PdiyigQ4byQ== X-Received: by 2002:a2e:87c8:0:b0:255:6d59:ebce with SMTP id v8-20020a2e87c8000000b002556d59ebcemr815250ljj.455.1654075394977; Wed, 01 Jun 2022 02:23:14 -0700 (PDT) Received: from localhost.localdomain (81-226-149-122-no518.tbcn.telia.com. [81.226.149.122]) by smtp.gmail.com with ESMTPSA id z14-20020a056512308e00b00478f60ca3a4sm257065lfd.56.2022.06.01.02.23.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Jun 2022 02:23:14 -0700 (PDT) From: Patrik Jakobsson To: dri-devel@lists.freedesktop.org Subject: [PATCH 2/8] drm/gma500: Make gma_i2c_chan a subclass of i2c_adapter Date: Wed, 1 Jun 2022 11:23:05 +0200 Message-Id: <20220601092311.22648-3-patrik.r.jakobsson@gmail.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220601092311.22648-1-patrik.r.jakobsson@gmail.com> References: <20220601092311.22648-1-patrik.r.jakobsson@gmail.com> 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: , Cc: tzimmermann@suse.de Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" This makes it easier to get at the full gma_i2c_chan when having an i2c_adapter from eg. drm_connector->ddc. Signed-off-by: Patrik Jakobsson --- drivers/gpu/drm/gma500/cdv_intel_crt.c | 2 +- drivers/gpu/drm/gma500/cdv_intel_hdmi.c | 6 +++--- drivers/gpu/drm/gma500/cdv_intel_lvds.c | 4 ++-- drivers/gpu/drm/gma500/intel_i2c.c | 14 +++++++------- drivers/gpu/drm/gma500/oaktrail_lvds.c | 2 +- drivers/gpu/drm/gma500/oaktrail_lvds_i2c.c | 12 ++++++------ drivers/gpu/drm/gma500/psb_intel_drv.h | 11 +++++++---- drivers/gpu/drm/gma500/psb_intel_lvds.c | 6 +++--- 8 files changed, 30 insertions(+), 27 deletions(-) diff --git a/drivers/gpu/drm/gma500/cdv_intel_crt.c b/drivers/gpu/drm/gma500/cdv_intel_crt.c index 36c72a379d9f..be0d6a4591bf 100644 --- a/drivers/gpu/drm/gma500/cdv_intel_crt.c +++ b/drivers/gpu/drm/gma500/cdv_intel_crt.c @@ -203,7 +203,7 @@ static int cdv_intel_crt_get_modes(struct drm_connector *connector) { struct gma_encoder *gma_encoder = gma_attached_encoder(connector); return psb_intel_ddc_get_modes(connector, - &gma_encoder->ddc_bus->adapter); + &gma_encoder->ddc_bus->base); } static int cdv_intel_crt_set_property(struct drm_connector *connector, diff --git a/drivers/gpu/drm/gma500/cdv_intel_hdmi.c b/drivers/gpu/drm/gma500/cdv_intel_hdmi.c index e87272c9d358..bd6791522160 100644 --- a/drivers/gpu/drm/gma500/cdv_intel_hdmi.c +++ b/drivers/gpu/drm/gma500/cdv_intel_hdmi.c @@ -130,7 +130,7 @@ static enum drm_connector_status cdv_hdmi_detect( struct edid *edid = NULL; enum drm_connector_status status = connector_status_disconnected; - edid = drm_get_edid(connector, &gma_encoder->i2c_bus->adapter); + edid = drm_get_edid(connector, &gma_encoder->i2c_bus->base); hdmi_priv->has_hdmi_sink = false; hdmi_priv->has_hdmi_audio = false; @@ -212,7 +212,7 @@ static int cdv_hdmi_get_modes(struct drm_connector *connector) struct edid *edid = NULL; int ret = 0; - edid = drm_get_edid(connector, &gma_encoder->i2c_bus->adapter); + edid = drm_get_edid(connector, &gma_encoder->i2c_bus->base); if (edid) { drm_connector_update_edid_property(connector, edid); ret = drm_add_edid_modes(connector, edid); @@ -350,7 +350,7 @@ void cdv_hdmi_init(struct drm_device *dev, goto failed_ddc; } - hdmi_priv->hdmi_i2c_adapter = &(gma_encoder->i2c_bus->adapter); + hdmi_priv->hdmi_i2c_adapter = &gma_encoder->i2c_bus->base; hdmi_priv->dev = dev; return; diff --git a/drivers/gpu/drm/gma500/cdv_intel_lvds.c b/drivers/gpu/drm/gma500/cdv_intel_lvds.c index 02dedf5dfa62..d76c3ecc951c 100644 --- a/drivers/gpu/drm/gma500/cdv_intel_lvds.c +++ b/drivers/gpu/drm/gma500/cdv_intel_lvds.c @@ -302,7 +302,7 @@ static int cdv_intel_lvds_get_modes(struct drm_connector *connector) struct psb_intel_mode_device *mode_dev = &dev_priv->mode_dev; int ret; - ret = psb_intel_ddc_get_modes(connector, &gma_encoder->i2c_bus->adapter); + ret = psb_intel_ddc_get_modes(connector, &gma_encoder->i2c_bus->base); if (ret) return ret; @@ -583,7 +583,7 @@ void cdv_intel_lvds_init(struct drm_device *dev, */ mutex_lock(&dev->mode_config.mutex); psb_intel_ddc_get_modes(connector, - &gma_encoder->ddc_bus->adapter); + &gma_encoder->ddc_bus->base); list_for_each_entry(scan, &connector->probed_modes, head) { if (scan->type & DRM_MODE_TYPE_PREFERRED) { mode_dev->panel_fixed_mode = diff --git a/drivers/gpu/drm/gma500/intel_i2c.c b/drivers/gpu/drm/gma500/intel_i2c.c index 6e9e2061ff3b..9d02a7b6d9a3 100644 --- a/drivers/gpu/drm/gma500/intel_i2c.c +++ b/drivers/gpu/drm/gma500/intel_i2c.c @@ -113,10 +113,10 @@ struct gma_i2c_chan *gma_i2c_create(struct drm_device *dev, const u32 reg, chan->drm_dev = dev; chan->reg = reg; - snprintf(chan->adapter.name, I2C_NAME_SIZE, "intel drm %s", name); - chan->adapter.owner = THIS_MODULE; - chan->adapter.algo_data = &chan->algo; - chan->adapter.dev.parent = dev->dev; + snprintf(chan->base.name, I2C_NAME_SIZE, "intel drm %s", name); + chan->base.owner = THIS_MODULE; + chan->base.algo_data = &chan->algo; + chan->base.dev.parent = dev->dev; chan->algo.setsda = set_data; chan->algo.setscl = set_clock; chan->algo.getsda = get_data; @@ -125,9 +125,9 @@ struct gma_i2c_chan *gma_i2c_create(struct drm_device *dev, const u32 reg, chan->algo.timeout = usecs_to_jiffies(2200); chan->algo.data = chan; - i2c_set_adapdata(&chan->adapter, chan); + i2c_set_adapdata(&chan->base, chan); - if (i2c_bit_add_bus(&chan->adapter)) + if (i2c_bit_add_bus(&chan->base)) goto out_free; /* JJJ: raise SCL and SDA? */ @@ -153,6 +153,6 @@ void gma_i2c_destroy(struct gma_i2c_chan *chan) if (!chan) return; - i2c_del_adapter(&chan->adapter); + i2c_del_adapter(&chan->base); kfree(chan); } diff --git a/drivers/gpu/drm/gma500/oaktrail_lvds.c b/drivers/gpu/drm/gma500/oaktrail_lvds.c index 58b38e359098..8609f6249c4c 100644 --- a/drivers/gpu/drm/gma500/oaktrail_lvds.c +++ b/drivers/gpu/drm/gma500/oaktrail_lvds.c @@ -359,7 +359,7 @@ void oaktrail_lvds_init(struct drm_device *dev, if (edid == NULL && dev_priv->lpc_gpio_base) { oaktrail_lvds_i2c_init(encoder); if (gma_encoder->ddc_bus != NULL) { - i2c_adap = &gma_encoder->ddc_bus->adapter; + i2c_adap = &gma_encoder->ddc_bus->base; edid = drm_get_edid(connector, i2c_adap); } } diff --git a/drivers/gpu/drm/gma500/oaktrail_lvds_i2c.c b/drivers/gpu/drm/gma500/oaktrail_lvds_i2c.c index 9a6de6ff8b0c..ee163fb972d9 100644 --- a/drivers/gpu/drm/gma500/oaktrail_lvds_i2c.c +++ b/drivers/gpu/drm/gma500/oaktrail_lvds_i2c.c @@ -142,10 +142,10 @@ void oaktrail_lvds_i2c_init(struct drm_encoder *encoder) chan->drm_dev = dev; chan->reg = dev_priv->lpc_gpio_base; - strncpy(chan->adapter.name, "gma500 LPC", I2C_NAME_SIZE - 1); - chan->adapter.owner = THIS_MODULE; - chan->adapter.algo_data = &chan->algo; - chan->adapter.dev.parent = dev->dev; + strncpy(chan->base.name, "gma500 LPC", I2C_NAME_SIZE - 1); + chan->base.owner = THIS_MODULE; + chan->base.algo_data = &chan->algo; + chan->base.dev.parent = dev->dev; chan->algo.setsda = set_data; chan->algo.setscl = set_clock; chan->algo.getsda = get_data; @@ -154,13 +154,13 @@ void oaktrail_lvds_i2c_init(struct drm_encoder *encoder) chan->algo.timeout = usecs_to_jiffies(2200); chan->algo.data = chan; - i2c_set_adapdata(&chan->adapter, chan); + i2c_set_adapdata(&chan->base, chan); set_data(chan, 1); set_clock(chan, 1); udelay(50); - if (i2c_bit_add_bus(&chan->adapter)) { + if (i2c_bit_add_bus(&chan->base)) { kfree(chan); return; } diff --git a/drivers/gpu/drm/gma500/psb_intel_drv.h b/drivers/gpu/drm/gma500/psb_intel_drv.h index 72585a3df25d..1c28288f36a0 100644 --- a/drivers/gpu/drm/gma500/psb_intel_drv.h +++ b/drivers/gpu/drm/gma500/psb_intel_drv.h @@ -79,12 +79,13 @@ struct psb_intel_mode_device { }; struct gma_i2c_chan { - /* for getting at dev. private (mmio etc.) */ - struct drm_device *drm_dev; - u32 reg; /* GPIO reg */ - struct i2c_adapter adapter; + struct i2c_adapter base; struct i2c_algo_bit_data algo; u8 slave_addr; + + /* for getting at dev. private (mmio etc.) */ + struct drm_device *drm_dev; + u32 reg; /* GPIO reg */ }; struct gma_encoder { @@ -175,6 +176,8 @@ struct gma_crtc { container_of(x, struct gma_encoder, base) #define to_psb_intel_framebuffer(x) \ container_of(x, struct psb_intel_framebuffer, base) +#define to_gma_i2c_chan(x) \ + container_of(x, struct gma_i2c_chan, base) struct gma_i2c_chan *gma_i2c_create(struct drm_device *dev, const u32 reg, const char *name); diff --git a/drivers/gpu/drm/gma500/psb_intel_lvds.c b/drivers/gpu/drm/gma500/psb_intel_lvds.c index 07631891531a..c28fabdcfd73 100644 --- a/drivers/gpu/drm/gma500/psb_intel_lvds.c +++ b/drivers/gpu/drm/gma500/psb_intel_lvds.c @@ -113,7 +113,7 @@ static int psb_lvds_i2c_set_brightness(struct drm_device *dev, out_buf[0] = dev_priv->lvds_bl->brightnesscmd; out_buf[1] = (u8)blc_i2c_brightness; - if (i2c_transfer(&lvds_i2c_bus->adapter, msgs, 1) == 1) { + if (i2c_transfer(&lvds_i2c_bus->base, msgs, 1) == 1) { dev_dbg(dev->dev, "I2C set brightness.(command, value) (%d, %d)\n", dev_priv->lvds_bl->brightnesscmd, blc_i2c_brightness); @@ -497,7 +497,7 @@ static int psb_intel_lvds_get_modes(struct drm_connector *connector) int ret = 0; if (!IS_MRST(dev)) - ret = psb_intel_ddc_get_modes(connector, &lvds_priv->i2c_bus->adapter); + ret = psb_intel_ddc_get_modes(connector, &lvds_priv->i2c_bus->base); if (ret) return ret; @@ -727,7 +727,7 @@ void psb_intel_lvds_init(struct drm_device *dev, * preferred mode is the right one. */ mutex_lock(&dev->mode_config.mutex); - psb_intel_ddc_get_modes(connector, &lvds_priv->ddc_bus->adapter); + psb_intel_ddc_get_modes(connector, &lvds_priv->ddc_bus->base); list_for_each_entry(scan, &connector->probed_modes, head) { if (scan->type & DRM_MODE_TYPE_PREFERRED) { mode_dev->panel_fixed_mode = From patchwork Wed Jun 1 09:23:06 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrik Jakobsson X-Patchwork-Id: 12866539 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 44698C433EF for ; Wed, 1 Jun 2022 09:23:28 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 8EBCA10E99E; Wed, 1 Jun 2022 09:23:19 +0000 (UTC) Received: from mail-lf1-x133.google.com (mail-lf1-x133.google.com [IPv6:2a00:1450:4864:20::133]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2FFB910E97D for ; Wed, 1 Jun 2022 09:23:18 +0000 (UTC) Received: by mail-lf1-x133.google.com with SMTP id l30so1734696lfj.3 for ; Wed, 01 Jun 2022 02:23:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=K6Ae9vGYAWngrRXmarItqL5ftbFrETC6GaMuHnW6nDA=; b=P/dDGZYdHJUDuPcGz30S/uRScIrmdesCYQaSKxIEwbG+BE+3EwIOy34nIQNf4JS31f xdGuHDNq/vM15KMRlw1lMWGC7ZxWy/M+QVAezBonIxqewYeY0mFdyEffmH/4Z6EAhXgE QEZsnnAJRi9s7wB+pJanX8SEviQ8EW6eVIhm2QOmf0n+se0HN5X0A5nozw0p9/NhVOo2 efIC7fM9lvOiQ6gO34imJp8i8uRsBuUI96zG1R26rbxR4rWrR1GDooRQUFFdTkmKyGtL dVHDEp24vVxWPjTI87CZlL5Pjj4DdgC+yHi0G+HNclSiN80XsoXX/n6xVchGzaovqx86 JAfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=K6Ae9vGYAWngrRXmarItqL5ftbFrETC6GaMuHnW6nDA=; b=KkBMrUMYAidh+L6rpfDBFbApvKZj8pePMsRmqY5oehFhrue88VTYI97XgekMmaMR4k u2sAMmJzdfsjDazIe0GIa+xmvIwc8Qj2X6CA1VVzgxoThL+fp/bxxZjtu5yNt9cVsJPN 0PKlXtdzsqCElUUm6PZA8cplSec9AqwF6fLaQ1i3e/HUob5CIdsmLwbpTtmzwbbiaDmx h2es9ruC1A3k3auGAt0xGYZTkj4QkXkrTMY9Whhgq9Cr09QqFEbBk0EoqeOmbjhh8v5b jiqnZZ/ewOaTom66jtxnRpIGyIbI/+LNM3p0wCb72saDYaG5CCviJ1uFJzJOH4oirO4c BZQA== X-Gm-Message-State: AOAM531d9GwSO3Z1/D5mQptGNdn/h7MxwfQDYr9zTdXAnZBRLZTT8A/N n+bABHPDdtdCNF5jbWM7qwvN1ZgCix8= X-Google-Smtp-Source: ABdhPJwaOMFoGuQxHQcN56c3pCHyDaroU6lT8+yNTKkl9HryEuIXfdqPAxpW1ExZ4szP7oCbHEGhHw== X-Received: by 2002:a19:501d:0:b0:479:46c:2917 with SMTP id e29-20020a19501d000000b00479046c2917mr1299679lfb.160.1654075396111; Wed, 01 Jun 2022 02:23:16 -0700 (PDT) Received: from localhost.localdomain (81-226-149-122-no518.tbcn.telia.com. [81.226.149.122]) by smtp.gmail.com with ESMTPSA id z14-20020a056512308e00b00478f60ca3a4sm257065lfd.56.2022.06.01.02.23.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Jun 2022 02:23:15 -0700 (PDT) From: Patrik Jakobsson To: dri-devel@lists.freedesktop.org Subject: [PATCH 3/8] drm/gma500: Make cdv lvds use ddc adapter from drm_connector Date: Wed, 1 Jun 2022 11:23:06 +0200 Message-Id: <20220601092311.22648-4-patrik.r.jakobsson@gmail.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220601092311.22648-1-patrik.r.jakobsson@gmail.com> References: <20220601092311.22648-1-patrik.r.jakobsson@gmail.com> 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: , Cc: tzimmermann@suse.de Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" We're moving all uses of ddc_bus to drm_connector where they belong. Also, add missing call to destroy ddc bus when destroying the connector and cleanup the error handling in cdv_intel_lvds_init(). Signed-off-by: Patrik Jakobsson --- drivers/gpu/drm/gma500/cdv_intel_lvds.c | 67 ++++++++++++------------- 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/drivers/gpu/drm/gma500/cdv_intel_lvds.c b/drivers/gpu/drm/gma500/cdv_intel_lvds.c index d76c3ecc951c..846ce1546030 100644 --- a/drivers/gpu/drm/gma500/cdv_intel_lvds.c +++ b/drivers/gpu/drm/gma500/cdv_intel_lvds.c @@ -317,18 +317,12 @@ static int cdv_intel_lvds_get_modes(struct drm_connector *connector) return 0; } -/** - * cdv_intel_lvds_destroy - unregister and free LVDS structures - * @connector: connector to free - * - * Unregister the DDC bus for this connector then free the driver private - * structure. - */ static void cdv_intel_lvds_destroy(struct drm_connector *connector) { struct gma_connector *gma_connector = to_gma_connector(connector); struct gma_encoder *gma_encoder = gma_attached_encoder(connector); + gma_i2c_destroy(to_gma_i2c_chan(connector->ddc)); gma_i2c_destroy(gma_encoder->i2c_bus); drm_connector_cleanup(connector); kfree(gma_connector); @@ -487,8 +481,10 @@ void cdv_intel_lvds_init(struct drm_device *dev, struct drm_display_mode *scan; struct drm_crtc *crtc; struct drm_psb_private *dev_priv = to_drm_psb_private(dev); + struct gma_i2c_chan *ddc_bus; u32 lvds; int pipe; + int ret; u8 pin; if (!dev_priv->lvds_enabled_in_vbt) @@ -508,11 +504,11 @@ void cdv_intel_lvds_init(struct drm_device *dev, gma_connector = kzalloc(sizeof(struct gma_connector), GFP_KERNEL); if (!gma_connector) - goto failed_connector; + goto err_free_encoder; lvds_priv = kzalloc(sizeof(struct cdv_intel_lvds_priv), GFP_KERNEL); if (!lvds_priv) - goto failed_lvds_priv; + goto err_free_connector; gma_encoder->dev_priv = lvds_priv; @@ -521,12 +517,24 @@ void cdv_intel_lvds_init(struct drm_device *dev, gma_connector->restore = cdv_intel_lvds_restore; encoder = &gma_encoder->base; + /* Set up the DDC bus. */ + ddc_bus = gma_i2c_create(dev, GPIOC, "LVDSDDC_C"); + if (!ddc_bus) { + dev_printk(KERN_ERR, dev->dev, + "DDC bus registration " "failed.\n"); + goto err_free_lvds_priv; + } - drm_connector_init(dev, connector, - &cdv_intel_lvds_connector_funcs, - DRM_MODE_CONNECTOR_LVDS); + ret = drm_connector_init_with_ddc(dev, connector, + &cdv_intel_lvds_connector_funcs, + DRM_MODE_CONNECTOR_LVDS, + &ddc_bus->base); + if (ret) + goto err_destroy_ddc; - drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_LVDS); + ret = drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_LVDS); + if (ret) + goto err_connector_cleanup; gma_connector_attach_encoder(gma_connector, gma_encoder); gma_encoder->type = INTEL_OUTPUT_LVDS; @@ -554,7 +562,7 @@ void cdv_intel_lvds_init(struct drm_device *dev, if (!gma_encoder->i2c_bus) { dev_printk(KERN_ERR, dev->dev, "I2C bus registration failed.\n"); - goto failed_blc_i2c; + goto err_encoder_cleanup; } gma_encoder->i2c_bus->slave_addr = 0x2C; dev_priv->lvds_i2c_bus = gma_encoder->i2c_bus; @@ -569,21 +577,13 @@ void cdv_intel_lvds_init(struct drm_device *dev, * if closed, act like it's not there for now */ - /* Set up the DDC bus. */ - gma_encoder->ddc_bus = gma_i2c_create(dev, GPIOC, "LVDSDDC_C"); - if (!gma_encoder->ddc_bus) { - dev_printk(KERN_ERR, dev->dev, - "DDC bus registration " "failed.\n"); - goto failed_ddc; - } - /* * Attempt to get the fixed panel mode from DDC. Assume that the * preferred mode is the right one. */ mutex_lock(&dev->mode_config.mutex); - psb_intel_ddc_get_modes(connector, - &gma_encoder->ddc_bus->base); + psb_intel_ddc_get_modes(connector, &ddc_bus->base); + list_for_each_entry(scan, &connector->probed_modes, head) { if (scan->type & DRM_MODE_TYPE_PREFERRED) { mode_dev->panel_fixed_mode = @@ -625,7 +625,7 @@ void cdv_intel_lvds_init(struct drm_device *dev, if (!mode_dev->panel_fixed_mode) { DRM_DEBUG ("Found no modes on the lvds, ignoring the LVDS\n"); - goto failed_find; + goto err_unlock; } /* setup PWM */ @@ -645,20 +645,19 @@ void cdv_intel_lvds_init(struct drm_device *dev, mutex_unlock(&dev->mode_config.mutex); return; -failed_find: +err_unlock: mutex_unlock(&dev->mode_config.mutex); - pr_err("Failed find\n"); - gma_i2c_destroy(gma_encoder->ddc_bus); -failed_ddc: - pr_err("Failed DDC\n"); gma_i2c_destroy(gma_encoder->i2c_bus); -failed_blc_i2c: - pr_err("Failed BLC\n"); +err_encoder_cleanup: drm_encoder_cleanup(encoder); +err_connector_cleanup: drm_connector_cleanup(connector); +err_destroy_ddc: + gma_i2c_destroy(ddc_bus); +err_free_lvds_priv: kfree(lvds_priv); -failed_lvds_priv: +err_free_connector: kfree(gma_connector); -failed_connector: +err_free_encoder: kfree(gma_encoder); } From patchwork Wed Jun 1 09:23:07 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrik Jakobsson X-Patchwork-Id: 12866540 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 8053EC433EF for ; Wed, 1 Jun 2022 09:23:30 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 08B3510E95F; Wed, 1 Jun 2022 09:23:20 +0000 (UTC) Received: from mail-lf1-x134.google.com (mail-lf1-x134.google.com [IPv6:2a00:1450:4864:20::134]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3F67B10E99E for ; Wed, 1 Jun 2022 09:23:19 +0000 (UTC) Received: by mail-lf1-x134.google.com with SMTP id j10so1692569lfe.12 for ; Wed, 01 Jun 2022 02:23:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=mOVAfwhDy0bXBwhe29HSXkSaSCvHiTQB2/CH6MOKHnk=; b=Vnubb0EPwv3Ve2NKl8I7i1GlUj9davSgicMOLcQEXQoC0tFuRyCTu0uEQJrauRJJAC ci3vs8HjY8ixd9AoU2lbzplUmOPVmoEpiQBZEgUga7ZzQ9Q49w0ACYVYeXPQGm4sDyjx 83LOxFnvfgvgYnLotREwQoM6ES6rHU9WXgLDNdFeCscPrFzwSceUXwg4W4ryJDnAWYFK 8okQw0MnMdszpbuhyqjBQ9iuc8nkqQIECNf0zkP9ynvhlBV61y31PGknqTImx7qHvgFx cw9q8jRQg9EQ3iqbG5bp6qt52Faen8/PqFhrzOQLjj52gBO9gx8XjHlxOCHM4NydyxBY fc+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=mOVAfwhDy0bXBwhe29HSXkSaSCvHiTQB2/CH6MOKHnk=; b=fK/JkoPuX6Uv9iaF9JJzlUq+d8bZY/M5kR2UuSnELJJCLo8opdvcAfvGNptfavndf0 p0i6u/Kh6OGPEtG5LPoS7oqKv5BlhKBz28Gg5bBBS9c1WVi6/ftQyu1R7y/JLk4DIfEI G0yyuY2yoOq21Hy9TjvkNbS5XnQm56Bk8RIZGJy2aSMpGN3Dja2chN/h9F1ZJ6n6Aapd 0FrjSnaWwW7EKqUZs8sAmkbedUTJCDJcwkkcLLypzF3YnCCv9PBQv0Q6btfd47YvxQ92 lh8HIthl7yBhQWwAizx9HnFh7/1OMc5KytXOmbMaxVncsmQfEeGbqN6wkHMmP4ZUUbZ8 qLvg== X-Gm-Message-State: AOAM532syNjjxzS7bX4BtM580v97ihPL3spCWKpcy2FNuRvzAm80QY+5 0pVGtjOihmTRh7L9Y92z655j+dVin2Y= X-Google-Smtp-Source: ABdhPJw1m4/f+o3LNqTOIpdXtGOZwMOh7Q51NRuQb5qh9u5gyMsAGBl1FISTHeRHawXuOaXyn//Gzg== X-Received: by 2002:a05:6512:33cb:b0:477:aa55:5f3e with SMTP id d11-20020a05651233cb00b00477aa555f3emr48309849lfg.488.1654075397066; Wed, 01 Jun 2022 02:23:17 -0700 (PDT) Received: from localhost.localdomain (81-226-149-122-no518.tbcn.telia.com. [81.226.149.122]) by smtp.gmail.com with ESMTPSA id z14-20020a056512308e00b00478f60ca3a4sm257065lfd.56.2022.06.01.02.23.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Jun 2022 02:23:16 -0700 (PDT) From: Patrik Jakobsson To: dri-devel@lists.freedesktop.org Subject: [PATCH 4/8] drm/gma500: Make cdv hdmi use ddc adapter from drm_connector Date: Wed, 1 Jun 2022 11:23:07 +0200 Message-Id: <20220601092311.22648-5-patrik.r.jakobsson@gmail.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220601092311.22648-1-patrik.r.jakobsson@gmail.com> References: <20220601092311.22648-1-patrik.r.jakobsson@gmail.com> 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: , Cc: tzimmermann@suse.de Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" We're moving all uses of ddc_bus from gma_encoder to drm_connector where they belong. Also, cleanup the error handling in cdv_hdmi_init() and remove unused i2c pointer in mid_intel_hdmi_priv. Signed-off-by: Patrik Jakobsson --- drivers/gpu/drm/gma500/cdv_intel_hdmi.c | 98 ++++++++++++------------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/drivers/gpu/drm/gma500/cdv_intel_hdmi.c b/drivers/gpu/drm/gma500/cdv_intel_hdmi.c index bd6791522160..29ef45f14169 100644 --- a/drivers/gpu/drm/gma500/cdv_intel_hdmi.c +++ b/drivers/gpu/drm/gma500/cdv_intel_hdmi.c @@ -53,7 +53,6 @@ struct mid_intel_hdmi_priv { bool has_hdmi_audio; /* Should set this when detect hotplug */ bool hdmi_device_connected; - struct i2c_adapter *hdmi_i2c_adapter; /* for control functions */ struct drm_device *dev; }; @@ -130,7 +129,7 @@ static enum drm_connector_status cdv_hdmi_detect( struct edid *edid = NULL; enum drm_connector_status status = connector_status_disconnected; - edid = drm_get_edid(connector, &gma_encoder->i2c_bus->base); + edid = drm_get_edid(connector, connector->ddc); hdmi_priv->has_hdmi_sink = false; hdmi_priv->has_hdmi_audio = false; @@ -208,11 +207,10 @@ static int cdv_hdmi_set_property(struct drm_connector *connector, */ static int cdv_hdmi_get_modes(struct drm_connector *connector) { - struct gma_encoder *gma_encoder = gma_attached_encoder(connector); struct edid *edid = NULL; int ret = 0; - edid = drm_get_edid(connector, &gma_encoder->i2c_bus->base); + edid = drm_get_edid(connector, connector->ddc); if (edid) { drm_connector_update_edid_property(connector, edid); ret = drm_add_edid_modes(connector, edid); @@ -243,9 +241,9 @@ static enum drm_mode_status cdv_hdmi_mode_valid(struct drm_connector *connector, static void cdv_hdmi_destroy(struct drm_connector *connector) { struct gma_connector *gma_connector = to_gma_connector(connector); - struct gma_encoder *gma_encoder = gma_attached_encoder(connector); + struct gma_i2c_chan *ddc_bus = to_gma_i2c_chan(connector->ddc); - gma_i2c_destroy(gma_encoder->i2c_bus); + gma_i2c_destroy(ddc_bus); drm_connector_cleanup(connector); kfree(gma_connector); } @@ -278,37 +276,60 @@ void cdv_hdmi_init(struct drm_device *dev, struct gma_encoder *gma_encoder; struct gma_connector *gma_connector; struct drm_connector *connector; - struct drm_encoder *encoder; struct mid_intel_hdmi_priv *hdmi_priv; - int ddc_bus; + struct gma_i2c_chan *ddc_bus; + int ddc_reg; + int ret; gma_encoder = kzalloc(sizeof(struct gma_encoder), GFP_KERNEL); - if (!gma_encoder) return; - gma_connector = kzalloc(sizeof(struct gma_connector), - GFP_KERNEL); - + gma_connector = kzalloc(sizeof(struct gma_connector), GFP_KERNEL); if (!gma_connector) - goto err_connector; + goto err_free_encoder; hdmi_priv = kzalloc(sizeof(struct mid_intel_hdmi_priv), GFP_KERNEL); - if (!hdmi_priv) - goto err_priv; + goto err_free_connector; connector = &gma_connector->base; connector->polled = DRM_CONNECTOR_POLL_HPD; gma_connector->save = cdv_hdmi_save; gma_connector->restore = cdv_hdmi_restore; - encoder = &gma_encoder->base; - drm_connector_init(dev, connector, - &cdv_hdmi_connector_funcs, - DRM_MODE_CONNECTOR_DVID); + switch (reg) { + case SDVOB: + ddc_reg = GPIOE; + gma_encoder->ddi_select = DDI0_SELECT; + break; + case SDVOC: + ddc_reg = GPIOD; + gma_encoder->ddi_select = DDI1_SELECT; + break; + default: + DRM_ERROR("unknown reg 0x%x for HDMI\n", reg); + goto err_free_hdmi_priv; + } + + ddc_bus = gma_i2c_create(dev, ddc_reg, + (reg == SDVOB) ? "HDMIB" : "HDMIC"); + if (!ddc_bus) { + dev_err(dev->dev, "No ddc adapter available!\n"); + goto err_free_hdmi_priv; + } - drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_TMDS); + ret = drm_connector_init_with_ddc(dev, connector, + &cdv_hdmi_connector_funcs, + DRM_MODE_CONNECTOR_DVID, + &ddc_bus->base); + if (ret) + goto err_ddc_destroy; + + ret = drm_simple_encoder_init(dev, &gma_encoder->base, + DRM_MODE_ENCODER_TMDS); + if (ret) + goto err_connector_cleanup; gma_connector_attach_encoder(gma_connector, gma_encoder); gma_encoder->type = INTEL_OUTPUT_HDMI; @@ -316,7 +337,7 @@ void cdv_hdmi_init(struct drm_device *dev, hdmi_priv->has_hdmi_sink = false; gma_encoder->dev_priv = hdmi_priv; - drm_encoder_helper_add(encoder, &cdv_hdmi_helper_funcs); + drm_encoder_helper_add(&gma_encoder->base, &cdv_hdmi_helper_funcs); drm_connector_helper_add(connector, &cdv_hdmi_connector_helper_funcs); connector->display_info.subpixel_order = SubPixelHorizontalRGB; @@ -327,38 +348,17 @@ void cdv_hdmi_init(struct drm_device *dev, dev->mode_config.scaling_mode_property, DRM_MODE_SCALE_FULLSCREEN); - switch (reg) { - case SDVOB: - ddc_bus = GPIOE; - gma_encoder->ddi_select = DDI0_SELECT; - break; - case SDVOC: - ddc_bus = GPIOD; - gma_encoder->ddi_select = DDI1_SELECT; - break; - default: - DRM_ERROR("unknown reg 0x%x for HDMI\n", reg); - goto failed_ddc; - break; - } - - gma_encoder->i2c_bus = gma_i2c_create(dev, ddc_bus, - (reg == SDVOB) ? "HDMIB" : "HDMIC"); - - if (!gma_encoder->i2c_bus) { - dev_err(dev->dev, "No ddc adapter available!\n"); - goto failed_ddc; - } - - hdmi_priv->hdmi_i2c_adapter = &gma_encoder->i2c_bus->base; hdmi_priv->dev = dev; return; -failed_ddc: - drm_encoder_cleanup(encoder); +err_connector_cleanup: drm_connector_cleanup(connector); -err_priv: +err_ddc_destroy: + gma_i2c_destroy(ddc_bus); +err_free_hdmi_priv: + kfree(hdmi_priv); +err_free_connector: kfree(gma_connector); -err_connector: +err_free_encoder: kfree(gma_encoder); } From patchwork Wed Jun 1 09:23:08 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrik Jakobsson X-Patchwork-Id: 12866541 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id E3326C433F5 for ; Wed, 1 Jun 2022 09:23:32 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 6290F10E9A2; Wed, 1 Jun 2022 09:23:21 +0000 (UTC) Received: from mail-lf1-x135.google.com (mail-lf1-x135.google.com [IPv6:2a00:1450:4864:20::135]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2C82D10E9A6 for ; Wed, 1 Jun 2022 09:23:20 +0000 (UTC) Received: by mail-lf1-x135.google.com with SMTP id s6so1686185lfo.13 for ; Wed, 01 Jun 2022 02:23:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=u14NcMCzMoxfVhtmSzN6klKYjRycl/r6BX5iYHIUlFc=; b=Q2IEGTlptMPaBrU12QprQKD2yNB3NUkQi3S2Yj7AOy3QIj0gsCU8vnPE1wwD1IxPeK GhzMcJ2lISeF673HQy3mmnOqwqAGlVbw1rPOl2i0p9hhTbGhnUy1EPAaIxfyID+C9rfd IXxBTAjasRzS6Nm1qQzzdgiw2qOmM4E1WqPREFYqf9FAKE342N0X08Q6TsEfjYa82qep U8QEKOjheIM6HkDGjzUJvaLXKqvXHI7nn7gtL9nqiYRFAo86Xruj1C3YusJTtXHAnVlk 3QHhxYwJhc7cW3Y2y2Hxu7lPY2FZZGzh43ur9ey06cdWsTcWYBNVjPPXYitwJyWrDU0Q yWmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=u14NcMCzMoxfVhtmSzN6klKYjRycl/r6BX5iYHIUlFc=; b=ONxU0B/mEacwiGz1CD8+qrHwMsSO3VMOtLxXfp11pmCi4kC2TW80/kiiDd1BiN8kZE 9Ccq+4Vh74bQ6l7nFQ2VAJA7/cz1vae6x2hDYKsvqt4+/oWsS5ZBgB/Qb1oBe8j7z4ui fupSGkYxqVKj6XE+Lc6p3E/YQSeK1NCjCnu29GY0v2R6cihic91NBpZs8WAYGgOPZndU P9IZR2LEOQavABWhFvdj9JJ1BWFE1nv82djTerEzawJvOI9vkMohLphy3A3CM9CiUH/2 XGmu80CMKLCiwDdaM6VjmpkP1ztzth4u7jc4n+poUWQXZEy8iCXrIZ4hHtfmX9N3oSTT w99g== X-Gm-Message-State: AOAM5321ngsO9rtNLp2fbZHylSu3Ta7qO+OKmVnhqnuoYYBosbTnOvZ8 q53+C9Cjz8QbFIcbbpl6daFkiW/8vO0= X-Google-Smtp-Source: ABdhPJzVnh17iz72q2OpSI54WYbj17mqk6lIamVRwUZn5sNnQcRKRrPCcfdbM1hXJRevELwbWu4g6Q== X-Received: by 2002:a05:6512:b1e:b0:44a:9b62:3201 with SMTP id w30-20020a0565120b1e00b0044a9b623201mr48794032lfu.42.1654075398012; Wed, 01 Jun 2022 02:23:18 -0700 (PDT) Received: from localhost.localdomain (81-226-149-122-no518.tbcn.telia.com. [81.226.149.122]) by smtp.gmail.com with ESMTPSA id z14-20020a056512308e00b00478f60ca3a4sm257065lfd.56.2022.06.01.02.23.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Jun 2022 02:23:17 -0700 (PDT) From: Patrik Jakobsson To: dri-devel@lists.freedesktop.org Subject: [PATCH 5/8] drm/gma500: Make psb lvds use ddc adapter from drm_connector Date: Wed, 1 Jun 2022 11:23:08 +0200 Message-Id: <20220601092311.22648-6-patrik.r.jakobsson@gmail.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220601092311.22648-1-patrik.r.jakobsson@gmail.com> References: <20220601092311.22648-1-patrik.r.jakobsson@gmail.com> 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: , Cc: tzimmermann@suse.de Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" We're moving all uses of ddc_bus to drm_connector where they belong. Also cleanup the error handling in psb_intel_lvds_init() and remove unused ddc_bus in psb_intel_lvds_priv. Signed-off-by: Patrik Jakobsson --- drivers/gpu/drm/gma500/psb_intel_lvds.c | 72 +++++++++++++------------ 1 file changed, 37 insertions(+), 35 deletions(-) diff --git a/drivers/gpu/drm/gma500/psb_intel_lvds.c b/drivers/gpu/drm/gma500/psb_intel_lvds.c index c28fabdcfd73..1121bb155c5e 100644 --- a/drivers/gpu/drm/gma500/psb_intel_lvds.c +++ b/drivers/gpu/drm/gma500/psb_intel_lvds.c @@ -50,7 +50,6 @@ struct psb_intel_lvds_priv { uint32_t saveBLC_PWM_CTL; struct gma_i2c_chan *i2c_bus; - struct gma_i2c_chan *ddc_bus; }; @@ -512,20 +511,12 @@ static int psb_intel_lvds_get_modes(struct drm_connector *connector) return 0; } -/** - * psb_intel_lvds_destroy - unregister and free LVDS structures - * @connector: connector to free - * - * Unregister the DDC bus for this connector then free the driver private - * structure. - */ void psb_intel_lvds_destroy(struct drm_connector *connector) { struct gma_connector *gma_connector = to_gma_connector(connector); - struct gma_encoder *gma_encoder = gma_attached_encoder(connector); - struct psb_intel_lvds_priv *lvds_priv = gma_encoder->dev_priv; + struct gma_i2c_chan *ddc_bus = to_gma_i2c_chan(connector->ddc); - gma_i2c_destroy(lvds_priv->ddc_bus); + gma_i2c_destroy(ddc_bus); drm_connector_cleanup(connector); kfree(gma_connector); } @@ -639,25 +630,28 @@ void psb_intel_lvds_init(struct drm_device *dev, struct drm_display_mode *scan; /* *modes, *bios_mode; */ struct drm_crtc *crtc; struct drm_psb_private *dev_priv = to_drm_psb_private(dev); + struct gma_i2c_chan *ddc_bus; u32 lvds; int pipe; + int ret; gma_encoder = kzalloc(sizeof(struct gma_encoder), GFP_KERNEL); if (!gma_encoder) { dev_err(dev->dev, "gma_encoder allocation error\n"); return; } + encoder = &gma_encoder->base; gma_connector = kzalloc(sizeof(struct gma_connector), GFP_KERNEL); if (!gma_connector) { dev_err(dev->dev, "gma_connector allocation error\n"); - goto failed_encoder; + goto err_free_encoder; } lvds_priv = kzalloc(sizeof(struct psb_intel_lvds_priv), GFP_KERNEL); if (!lvds_priv) { dev_err(dev->dev, "LVDS private allocation error\n"); - goto failed_connector; + goto err_free_connector; } gma_encoder->dev_priv = lvds_priv; @@ -666,12 +660,24 @@ void psb_intel_lvds_init(struct drm_device *dev, gma_connector->save = psb_intel_lvds_save; gma_connector->restore = psb_intel_lvds_restore; - encoder = &gma_encoder->base; - drm_connector_init(dev, connector, - &psb_intel_lvds_connector_funcs, - DRM_MODE_CONNECTOR_LVDS); + /* Set up the DDC bus. */ + ddc_bus = gma_i2c_create(dev, GPIOC, "LVDSDDC_C"); + if (!ddc_bus) { + dev_printk(KERN_ERR, dev->dev, + "DDC bus registration " "failed.\n"); + goto err_free_lvds_priv; + } + + ret = drm_connector_init_with_ddc(dev, connector, + &psb_intel_lvds_connector_funcs, + DRM_MODE_CONNECTOR_LVDS, + &ddc_bus->base); + if (ret) + goto err_ddc_destroy; - drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_LVDS); + ret = drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_LVDS); + if (ret) + goto err_connector_cleanup; gma_connector_attach_encoder(gma_connector, gma_encoder); gma_encoder->type = INTEL_OUTPUT_LVDS; @@ -699,7 +705,7 @@ void psb_intel_lvds_init(struct drm_device *dev, if (!lvds_priv->i2c_bus) { dev_printk(KERN_ERR, dev->dev, "I2C bus registration failed.\n"); - goto failed_blc_i2c; + goto err_encoder_cleanup; } lvds_priv->i2c_bus->slave_addr = 0x2C; dev_priv->lvds_i2c_bus = lvds_priv->i2c_bus; @@ -714,20 +720,13 @@ void psb_intel_lvds_init(struct drm_device *dev, * if closed, act like it's not there for now */ - /* Set up the DDC bus. */ - lvds_priv->ddc_bus = gma_i2c_create(dev, GPIOC, "LVDSDDC_C"); - if (!lvds_priv->ddc_bus) { - dev_printk(KERN_ERR, dev->dev, - "DDC bus registration " "failed.\n"); - goto failed_ddc; - } - /* * Attempt to get the fixed panel mode from DDC. Assume that the * preferred mode is the right one. */ mutex_lock(&dev->mode_config.mutex); - psb_intel_ddc_get_modes(connector, &lvds_priv->ddc_bus->base); + psb_intel_ddc_get_modes(connector, &ddc_bus->base); + list_for_each_entry(scan, &connector->probed_modes, head) { if (scan->type & DRM_MODE_TYPE_PREFERRED) { mode_dev->panel_fixed_mode = @@ -773,7 +772,7 @@ void psb_intel_lvds_init(struct drm_device *dev, /* If we still don't have a mode after all that, give up. */ if (!mode_dev->panel_fixed_mode) { dev_err(dev->dev, "Found no modes on the lvds, ignoring the LVDS\n"); - goto failed_find; + goto err_unlock; } /* @@ -784,17 +783,20 @@ void psb_intel_lvds_init(struct drm_device *dev, mutex_unlock(&dev->mode_config.mutex); return; -failed_find: +err_unlock: mutex_unlock(&dev->mode_config.mutex); - gma_i2c_destroy(lvds_priv->ddc_bus); -failed_ddc: gma_i2c_destroy(lvds_priv->i2c_bus); -failed_blc_i2c: +err_encoder_cleanup: drm_encoder_cleanup(encoder); +err_connector_cleanup: drm_connector_cleanup(connector); -failed_connector: +err_ddc_destroy: + gma_i2c_destroy(ddc_bus); +err_free_lvds_priv: + kfree(lvds_priv); +err_free_connector: kfree(gma_connector); -failed_encoder: +err_free_encoder: kfree(gma_encoder); } From patchwork Wed Jun 1 09:23:09 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrik Jakobsson X-Patchwork-Id: 12866542 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id BBBFAC433EF for ; Wed, 1 Jun 2022 09:23:34 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 2F87D10E97D; Wed, 1 Jun 2022 09:23:23 +0000 (UTC) Received: from mail-lf1-x12e.google.com (mail-lf1-x12e.google.com [IPv6:2a00:1450:4864:20::12e]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6FE7C10E97D for ; Wed, 1 Jun 2022 09:23:21 +0000 (UTC) Received: by mail-lf1-x12e.google.com with SMTP id l13so1694269lfp.11 for ; Wed, 01 Jun 2022 02:23:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=a7A+mZsxmo75QXf97kG0BxS3odf33y0CUhZnMAM+Das=; b=jQK7mRTDxT3YiRRW1PtL6CjuMeo6BBHqqjAnlUyrp5PFu1M9VtizsmHJMeGfk3BV5B wsP5S9dLVsndNchYdSXESqUcWdP7ONxlM1t57b2nrALP8OJHJ3PgguE2tKSMe8bLM8Nw 7BM3A1+inDvD3y2t8b5TnufzBs4xVixU+QQ28DUpwIYtwyVK+KBU0Pnof9QOwI0/8jE5 A2iJ1EaDPybN6wdRvhHZ95majy711yxCi19YT35U0vRbOXL17jeOmRl3h5WgV+gLOPyR Q4VrYzhWRKgZapR+CQQsSy1Ad76InrXGmiqUPQFMWDXdf7EO1HbMjj2VpMQCBC44BRm3 aiag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=a7A+mZsxmo75QXf97kG0BxS3odf33y0CUhZnMAM+Das=; b=x+PHZ3DWWXbNf4SGhoDMckuSAIwl+HjeEdmctz/+G0KWHvm0oiF2Q1jspowem2ooJE 1HcDO3hLxnaLQI3JSpl5EqQqLYwjYOa+6LWUIRctUc+w1YbjCdHIQtZN7v6ieZrsvPCU rZcKhR052dTnkOBzhbNNL35lHTyBqW2tF5FBpDDkTZCtX+gLLWVQgJ3OWQZtYOJ3FpW5 aXpsf5eWNKnlQY9LksOKWmBNY5eJzPQcZR9JSylRwqvno15xiIXhwQ4fM6zaU1qNJyc2 Tyfgwr/XGrnYf/HEs2yVLJQdhGGjxjJxuMtgTFRPZ9AW99ImcHseIzUZznLLbScXXNYj L7cA== X-Gm-Message-State: AOAM531K/ijYY1kAtNZZA6pBk5AJ6vtQJTXyOD9c/ioYi01sXnO18+Uc 8WX9I75u3fYaxxrV9iaV0ZPxmb8nDi0= X-Google-Smtp-Source: ABdhPJyLKEu98+ERBg6qS3bJIjF6hQRJ9xtwYfrAY/O3HlgooCju+fKTA2czkVQUDxgojxhh3BLp9Q== X-Received: by 2002:a05:6512:1191:b0:473:c7c3:f6ff with SMTP id g17-20020a056512119100b00473c7c3f6ffmr44938534lfr.39.1654075399342; Wed, 01 Jun 2022 02:23:19 -0700 (PDT) Received: from localhost.localdomain (81-226-149-122-no518.tbcn.telia.com. [81.226.149.122]) by smtp.gmail.com with ESMTPSA id z14-20020a056512308e00b00478f60ca3a4sm257065lfd.56.2022.06.01.02.23.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Jun 2022 02:23:18 -0700 (PDT) From: Patrik Jakobsson To: dri-devel@lists.freedesktop.org Subject: [PATCH 6/8] drm/gma500: Make cdv crt use ddc adapter from drm_connector Date: Wed, 1 Jun 2022 11:23:09 +0200 Message-Id: <20220601092311.22648-7-patrik.r.jakobsson@gmail.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220601092311.22648-1-patrik.r.jakobsson@gmail.com> References: <20220601092311.22648-1-patrik.r.jakobsson@gmail.com> 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: , Cc: tzimmermann@suse.de Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" We're moving all uses of ddc_bus to drm_connector where they belong. Also cleanup the error handling in cdv_intel_crt_init(). Signed-off-by: Patrik Jakobsson --- drivers/gpu/drm/gma500/cdv_intel_crt.c | 47 +++++++++++++++----------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/drivers/gpu/drm/gma500/cdv_intel_crt.c b/drivers/gpu/drm/gma500/cdv_intel_crt.c index be0d6a4591bf..7ff1e5141150 100644 --- a/drivers/gpu/drm/gma500/cdv_intel_crt.c +++ b/drivers/gpu/drm/gma500/cdv_intel_crt.c @@ -192,18 +192,16 @@ static enum drm_connector_status cdv_intel_crt_detect( static void cdv_intel_crt_destroy(struct drm_connector *connector) { struct gma_connector *gma_connector = to_gma_connector(connector); - struct gma_encoder *gma_encoder = gma_attached_encoder(connector); + struct gma_i2c_chan *ddc_bus = to_gma_i2c_chan(connector->ddc); - gma_i2c_destroy(gma_encoder->ddc_bus); + gma_i2c_destroy(ddc_bus); drm_connector_cleanup(connector); kfree(gma_connector); } static int cdv_intel_crt_get_modes(struct drm_connector *connector) { - struct gma_encoder *gma_encoder = gma_attached_encoder(connector); - return psb_intel_ddc_get_modes(connector, - &gma_encoder->ddc_bus->base); + return psb_intel_ddc_get_modes(connector, connector->ddc); } static int cdv_intel_crt_set_property(struct drm_connector *connector, @@ -245,8 +243,10 @@ void cdv_intel_crt_init(struct drm_device *dev, struct gma_connector *gma_connector; struct gma_encoder *gma_encoder; + struct gma_i2c_chan *ddc_bus; struct drm_connector *connector; struct drm_encoder *encoder; + int ret; gma_encoder = kzalloc(sizeof(struct gma_encoder), GFP_KERNEL); if (!gma_encoder) @@ -254,25 +254,31 @@ void cdv_intel_crt_init(struct drm_device *dev, gma_connector = kzalloc(sizeof(struct gma_connector), GFP_KERNEL); if (!gma_connector) - goto failed_connector; + goto err_free_encoder; + + /* Set up the DDC bus. */ + ddc_bus = gma_i2c_create(dev, GPIOA, "CRTDDC_A"); + if (!ddc_bus) { + dev_printk(KERN_ERR, dev->dev, "DDC bus registration failed.\n"); + goto err_free_connector; + } connector = &gma_connector->base; connector->polled = DRM_CONNECTOR_POLL_HPD; - drm_connector_init(dev, connector, - &cdv_intel_crt_connector_funcs, DRM_MODE_CONNECTOR_VGA); + ret = drm_connector_init_with_ddc(dev, connector, + &cdv_intel_crt_connector_funcs, + DRM_MODE_CONNECTOR_VGA, + &ddc_bus->base); + if (ret) + goto err_ddc_destroy; encoder = &gma_encoder->base; - drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_DAC); + ret = drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_DAC); + if (ret) + goto err_connector_cleanup; gma_connector_attach_encoder(gma_connector, gma_encoder); - /* Set up the DDC bus. */ - gma_encoder->ddc_bus = gma_i2c_create(dev, GPIOA, "CRTDDC_A"); - if (!gma_encoder->ddc_bus) { - dev_printk(KERN_ERR, dev->dev, "DDC bus registration failed.\n"); - goto failed_ddc; - } - gma_encoder->type = INTEL_OUTPUT_ANALOG; connector->interlace_allowed = 0; connector->doublescan_allowed = 0; @@ -282,11 +288,14 @@ void cdv_intel_crt_init(struct drm_device *dev, &cdv_intel_crt_connector_helper_funcs); return; -failed_ddc: - drm_encoder_cleanup(&gma_encoder->base); + +err_connector_cleanup: drm_connector_cleanup(&gma_connector->base); +err_ddc_destroy: + gma_i2c_destroy(ddc_bus); +err_free_connector: kfree(gma_connector); -failed_connector: +err_free_encoder: kfree(gma_encoder); return; } From patchwork Wed Jun 1 09:23:10 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrik Jakobsson X-Patchwork-Id: 12866544 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 12626C433F5 for ; Wed, 1 Jun 2022 09:23:38 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 7380B10E9AE; Wed, 1 Jun 2022 09:23:26 +0000 (UTC) Received: from mail-lf1-x134.google.com (mail-lf1-x134.google.com [IPv6:2a00:1450:4864:20::134]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9915D10E97E for ; Wed, 1 Jun 2022 09:23:22 +0000 (UTC) Received: by mail-lf1-x134.google.com with SMTP id u26so1016377lfd.8 for ; Wed, 01 Jun 2022 02:23:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+DaxXNPexqLOJcjaXRNMEpEJGoHmbQc8dtYSnL+X+RE=; b=gasSJ3d3Qot2jqMMmBnEYmgNDMamzpcbNftw1XKPWE/OzL2QemmU6+0EUjE4Qi6OSl 2mCJqEs8fbjaDugMRwDLUWrI7Xmp7FTsNKQntnYTlTW//Lrbn7pr8ljeXbXPuCJJ3WnV 2nrdllnb6tbpm3GJ2+aPn+4Fhsh+odki2hsZNGUO/p4e5fPFPr4n+2NhyLnsTQNeM6BL U5VGT2ABcH54p8MID2NMu3TsbvWUZ4znc/qOLJaaB9Ir58j2Y3YIGzteM1BF8lCjfTH5 7zdBLQMfE+W71ahavkjrZ9fFUTz3fFDUKGfCSuCAqdmmQZHkLDWwpc4binzQ8OmH7LL9 9kjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+DaxXNPexqLOJcjaXRNMEpEJGoHmbQc8dtYSnL+X+RE=; b=HJT+vWN4E1vekEquRCuonAwp6IGkwawbxhTUxa4vUaycJKI7FvzMtBTem/SPB5a53Q bWBA1OrseA/WE/8Z3LjnG6/eLrFqLEf8ORowJ8X4wGEWkfwCboDqHhSTxXEBH1AzHdUb VNbaph3tC2JqskLu3z3WwhmYz1g9cD0KzLMF30rkfM0xjbUehQx0ZRUkNL7XxQy//BZ6 rbEl/j5P3kOzel5A4byPp2GhWme30917x0nhVo5fjKhsj2RT3nYm3Lqf/J5RBkXZDDXY pRBOHDdQiNB+j+KcmzbSebJENrscO1jbe1UiruwHrQiH9GTRn8qBRdUdrf+qUjLrQrjM ZYbQ== X-Gm-Message-State: AOAM533R79ud79ynItFPaOYwcbkxr3s2+1L0+UQbpH4EDmOZsRCLb2k+ PDlWdt0iRPgfJkbAFQqqTIMYaz6Jdm4= X-Google-Smtp-Source: ABdhPJxg2ZgoZkGaf4Dh5YcC1Z/s6XB6ncBRflEHronE0L+N+dqToF9YhEEW6xPsbwmdtAlSELaEag== X-Received: by 2002:a19:650f:0:b0:478:fe97:f761 with SMTP id z15-20020a19650f000000b00478fe97f761mr3044575lfb.673.1654075400547; Wed, 01 Jun 2022 02:23:20 -0700 (PDT) Received: from localhost.localdomain (81-226-149-122-no518.tbcn.telia.com. [81.226.149.122]) by smtp.gmail.com with ESMTPSA id z14-20020a056512308e00b00478f60ca3a4sm257065lfd.56.2022.06.01.02.23.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Jun 2022 02:23:20 -0700 (PDT) From: Patrik Jakobsson To: dri-devel@lists.freedesktop.org Subject: [PATCH 7/8] drm/gma500: Make oaktrail lvds use ddc adapter from drm_connector Date: Wed, 1 Jun 2022 11:23:10 +0200 Message-Id: <20220601092311.22648-8-patrik.r.jakobsson@gmail.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220601092311.22648-1-patrik.r.jakobsson@gmail.com> References: <20220601092311.22648-1-patrik.r.jakobsson@gmail.com> 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: , Cc: tzimmermann@suse.de Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" We're moving all uses of ddc_bus to drm_connector where they belong. The initialization of the gma_i2c_chan for Oaktrail is a bit backwards so it required improvements. Also cleanup the error handling in oaktrail_lvds_init(). Since this is the last user of gma_encoder->ddc_bus we can remove it. Signed-off-by: Patrik Jakobsson --- drivers/gpu/drm/gma500/oaktrail_lvds.c | 50 +++++++++++++--------- drivers/gpu/drm/gma500/oaktrail_lvds_i2c.c | 14 +++--- drivers/gpu/drm/gma500/psb_intel_drv.h | 3 +- 3 files changed, 38 insertions(+), 29 deletions(-) diff --git a/drivers/gpu/drm/gma500/oaktrail_lvds.c b/drivers/gpu/drm/gma500/oaktrail_lvds.c index 8609f6249c4c..9c9ebf8e29c4 100644 --- a/drivers/gpu/drm/gma500/oaktrail_lvds.c +++ b/drivers/gpu/drm/gma500/oaktrail_lvds.c @@ -293,12 +293,14 @@ void oaktrail_lvds_init(struct drm_device *dev, { struct gma_encoder *gma_encoder; struct gma_connector *gma_connector; + struct gma_i2c_chan *ddc_bus; struct drm_connector *connector; struct drm_encoder *encoder; struct drm_psb_private *dev_priv = to_drm_psb_private(dev); struct edid *edid; struct i2c_adapter *i2c_adap; struct drm_display_mode *scan; /* *modes, *bios_mode; */ + int ret; gma_encoder = kzalloc(sizeof(struct gma_encoder), GFP_KERNEL); if (!gma_encoder) @@ -306,16 +308,20 @@ void oaktrail_lvds_init(struct drm_device *dev, gma_connector = kzalloc(sizeof(struct gma_connector), GFP_KERNEL); if (!gma_connector) - goto failed_connector; + goto err_free_encoder; connector = &gma_connector->base; encoder = &gma_encoder->base; dev_priv->is_lvds_on = true; - drm_connector_init(dev, connector, - &psb_intel_lvds_connector_funcs, - DRM_MODE_CONNECTOR_LVDS); + ret = drm_connector_init(dev, connector, + &psb_intel_lvds_connector_funcs, + DRM_MODE_CONNECTOR_LVDS); + if (ret) + goto err_free_connector; - drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_LVDS); + ret = drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_LVDS); + if (ret) + goto err_connector_cleanup; gma_connector_attach_encoder(gma_connector, gma_encoder); gma_encoder->type = INTEL_OUTPUT_LVDS; @@ -353,16 +359,26 @@ void oaktrail_lvds_init(struct drm_device *dev, edid = NULL; mutex_lock(&dev->mode_config.mutex); + i2c_adap = i2c_get_adapter(dev_priv->ops->i2c_bus); if (i2c_adap) edid = drm_get_edid(connector, i2c_adap); + if (edid == NULL && dev_priv->lpc_gpio_base) { - oaktrail_lvds_i2c_init(encoder); - if (gma_encoder->ddc_bus != NULL) { - i2c_adap = &gma_encoder->ddc_bus->base; + ddc_bus = oaktrail_lvds_i2c_init(dev); + if (!IS_ERR(ddc_bus)) { + i2c_adap = &ddc_bus->base; edid = drm_get_edid(connector, i2c_adap); } } + + /* + * Due to the logic in probing for i2c buses above we do not know the + * i2c_adap until now. Hence we cannot use drm_connector_init_with_ddc() + * but must instead set connector->ddc manually here. + */ + connector->ddc = i2c_adap; + /* * Attempt to get the fixed panel mode from DDC. Assume that the * preferred mode is the right one. @@ -395,7 +411,7 @@ void oaktrail_lvds_init(struct drm_device *dev, /* If we still don't have a mode after all that, give up. */ if (!mode_dev->panel_fixed_mode) { dev_err(dev->dev, "Found no modes on the lvds, ignoring the LVDS\n"); - goto failed_find; + goto err_unlock; } out: @@ -403,21 +419,15 @@ void oaktrail_lvds_init(struct drm_device *dev, return; -failed_find: +err_unlock: mutex_unlock(&dev->mode_config.mutex); - - dev_dbg(dev->dev, "No LVDS modes found, disabling.\n"); - if (gma_encoder->ddc_bus) { - gma_i2c_destroy(gma_encoder->ddc_bus); - gma_encoder->ddc_bus = NULL; - } - -/* failed_ddc: */ - + gma_i2c_destroy(to_gma_i2c_chan(connector->ddc)); drm_encoder_cleanup(encoder); +err_connector_cleanup: drm_connector_cleanup(connector); +err_free_connector: kfree(gma_connector); -failed_connector: +err_free_encoder: kfree(gma_encoder); } diff --git a/drivers/gpu/drm/gma500/oaktrail_lvds_i2c.c b/drivers/gpu/drm/gma500/oaktrail_lvds_i2c.c index ee163fb972d9..06b5b2d70d48 100644 --- a/drivers/gpu/drm/gma500/oaktrail_lvds_i2c.c +++ b/drivers/gpu/drm/gma500/oaktrail_lvds_i2c.c @@ -129,16 +129,15 @@ static void set_data(void *data, int state_high) } } -void oaktrail_lvds_i2c_init(struct drm_encoder *encoder) +struct gma_i2c_chan *oaktrail_lvds_i2c_init(struct drm_device *dev) { - struct drm_device *dev = encoder->dev; - struct gma_encoder *gma_encoder = to_gma_encoder(encoder); struct drm_psb_private *dev_priv = to_drm_psb_private(dev); struct gma_i2c_chan *chan; + int ret; chan = kzalloc(sizeof(struct gma_i2c_chan), GFP_KERNEL); if (!chan) - return; + return ERR_PTR(-ENOMEM); chan->drm_dev = dev; chan->reg = dev_priv->lpc_gpio_base; @@ -160,10 +159,11 @@ void oaktrail_lvds_i2c_init(struct drm_encoder *encoder) set_clock(chan, 1); udelay(50); - if (i2c_bit_add_bus(&chan->base)) { + ret = i2c_bit_add_bus(&chan->base); + if (ret < 0) { kfree(chan); - return; + return ERR_PTR(ret); } - gma_encoder->ddc_bus = chan; + return chan; } diff --git a/drivers/gpu/drm/gma500/psb_intel_drv.h b/drivers/gpu/drm/gma500/psb_intel_drv.h index 1c28288f36a0..8ccba116821b 100644 --- a/drivers/gpu/drm/gma500/psb_intel_drv.h +++ b/drivers/gpu/drm/gma500/psb_intel_drv.h @@ -105,7 +105,6 @@ struct gma_encoder { /* FIXME: Either make SDVO and LVDS store it's i2c here or give CDV it's own set of output privates */ struct gma_i2c_chan *i2c_bus; - struct gma_i2c_chan *ddc_bus; }; struct gma_connector { @@ -200,7 +199,7 @@ extern void oaktrail_lvds_init(struct drm_device *dev, extern void oaktrail_wait_for_INTR_PKT_SENT(struct drm_device *dev); extern void oaktrail_dsi_init(struct drm_device *dev, struct psb_intel_mode_device *mode_dev); -extern void oaktrail_lvds_i2c_init(struct drm_encoder *encoder); +struct gma_i2c_chan *oaktrail_lvds_i2c_init(struct drm_device *dev); extern void mid_dsi_init(struct drm_device *dev, struct psb_intel_mode_device *mode_dev, int dsi_num); From patchwork Wed Jun 1 09:23:11 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrik Jakobsson X-Patchwork-Id: 12866543 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 7EEC7C433F5 for ; Wed, 1 Jun 2022 09:23:36 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 039DF10E97E; Wed, 1 Jun 2022 09:23:24 +0000 (UTC) Received: from mail-lf1-x12e.google.com (mail-lf1-x12e.google.com [IPv6:2a00:1450:4864:20::12e]) by gabe.freedesktop.org (Postfix) with ESMTPS id 55D9A10E97E for ; Wed, 1 Jun 2022 09:23:22 +0000 (UTC) Received: by mail-lf1-x12e.google.com with SMTP id l13so1694269lfp.11 for ; Wed, 01 Jun 2022 02:23:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=/bEhvBt3CrgVF2zXHQVSMGh/ISUabtR6+ut7aiJlO7I=; b=ZVU6CG9iZJlFeNsIEouKB+StMc/YyV+omkWwKG+iBWn800Fa44mN9Bii31jMYOpupr G6u7Iru+NYnIbHvNj7gmQus2hW/yIoD3Rp/+aO0XcNuC3Jaz0xguz1fLVu/PZGPv0aSa jokFooOB0RwzYmQDbDXSnzLjtsqkzp3Lbhq0vRdzbemMygcjq6eWFfUvu7vc8bTKi1H8 w+Pp//IwxlqwhwTGWgTQ07Y3Q4u1ueD+JhLZZO1C/6ntUIq/43EWRmErNA6ynJXyrT5X P4UZJz/waTmPZBcg0sJx6vU10fu80juGs/a+Gm+EEP/frJ17+LzPshruy5D2t5t2kdgc YaXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=/bEhvBt3CrgVF2zXHQVSMGh/ISUabtR6+ut7aiJlO7I=; b=IF8bYJl9iVCtWcSaqiD21H4w7eQ2tnzdcugsNd8soGKQUmICQ44hVC+8Si1Zoh74H3 Pigmd2eaNSi7WSsYSUQdSL0jHqd/TZx9J7VGgWpqONPD8MuFb9yT4bACZNuUhBmt3uQf AqO+NHKzLxPgK3XcE4wv6uNxkPCzKEXk1d7dfdMlyqDYoXG2jW7ZolEPVchSyyfnWjiR gOFvJJoQTGzSSQL7WCZQBTYbwJ6aNu/695q4tnVjVdnhWMCgJceUeycmZPhgA5lhX5oX RKC4EIbgjsLfOoaQOibW0kFDR9qXzKrq5I+F+32yevZntEwnPIYxxhlN1ZUlJtIGd+l/ c9uQ== X-Gm-Message-State: AOAM533Of9S+9epxY4yNu4fry7bY2bNyDteUpaX0FMERmynsYlpwsk6T TXkQotEhDbMB3zSnNXhwx8nVa2rnSMs= X-Google-Smtp-Source: ABdhPJz2W2G3e1RFW4TzYwbXQ5M1zSnePZhTbn4GDqVYHaE6NpCpgEDE9sur04rI1oVjh4XDDnFSpA== X-Received: by 2002:a05:6512:3050:b0:470:8f74:4373 with SMTP id b16-20020a056512305000b004708f744373mr46046669lfb.149.1654075401478; Wed, 01 Jun 2022 02:23:21 -0700 (PDT) Received: from localhost.localdomain (81-226-149-122-no518.tbcn.telia.com. [81.226.149.122]) by smtp.gmail.com with ESMTPSA id z14-20020a056512308e00b00478f60ca3a4sm257065lfd.56.2022.06.01.02.23.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Jun 2022 02:23:21 -0700 (PDT) From: Patrik Jakobsson To: dri-devel@lists.freedesktop.org Subject: [PATCH 8/8] drm/gma500: Read EDID from the correct i2c adapter Date: Wed, 1 Jun 2022 11:23:11 +0200 Message-Id: <20220601092311.22648-9-patrik.r.jakobsson@gmail.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220601092311.22648-1-patrik.r.jakobsson@gmail.com> References: <20220601092311.22648-1-patrik.r.jakobsson@gmail.com> 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: , Cc: tzimmermann@suse.de Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Someone made the mistake to try reading EDID from the backlight i2c adapter. This has been wrong for a very long time but since we read out the modes correctly on init and don't hotplug lvds it has been working anyway. Correct this by using connector->ddc instead of encoder->i2c_bus. Both PSB and CDV are affected but this bug. Signed-off-by: Patrik Jakobsson --- drivers/gpu/drm/gma500/cdv_intel_lvds.c | 3 +-- drivers/gpu/drm/gma500/psb_intel_lvds.c | 4 +--- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/gma500/cdv_intel_lvds.c b/drivers/gpu/drm/gma500/cdv_intel_lvds.c index 846ce1546030..be6efcaaa3b3 100644 --- a/drivers/gpu/drm/gma500/cdv_intel_lvds.c +++ b/drivers/gpu/drm/gma500/cdv_intel_lvds.c @@ -298,11 +298,10 @@ static int cdv_intel_lvds_get_modes(struct drm_connector *connector) { struct drm_device *dev = connector->dev; struct drm_psb_private *dev_priv = to_drm_psb_private(dev); - struct gma_encoder *gma_encoder = gma_attached_encoder(connector); struct psb_intel_mode_device *mode_dev = &dev_priv->mode_dev; int ret; - ret = psb_intel_ddc_get_modes(connector, &gma_encoder->i2c_bus->base); + ret = psb_intel_ddc_get_modes(connector, connector->ddc); if (ret) return ret; diff --git a/drivers/gpu/drm/gma500/psb_intel_lvds.c b/drivers/gpu/drm/gma500/psb_intel_lvds.c index 1121bb155c5e..7ee6c8ce103b 100644 --- a/drivers/gpu/drm/gma500/psb_intel_lvds.c +++ b/drivers/gpu/drm/gma500/psb_intel_lvds.c @@ -491,12 +491,10 @@ static int psb_intel_lvds_get_modes(struct drm_connector *connector) struct drm_device *dev = connector->dev; struct drm_psb_private *dev_priv = to_drm_psb_private(dev); struct psb_intel_mode_device *mode_dev = &dev_priv->mode_dev; - struct gma_encoder *gma_encoder = gma_attached_encoder(connector); - struct psb_intel_lvds_priv *lvds_priv = gma_encoder->dev_priv; int ret = 0; if (!IS_MRST(dev)) - ret = psb_intel_ddc_get_modes(connector, &lvds_priv->i2c_bus->base); + ret = psb_intel_ddc_get_modes(connector, connector->ddc); if (ret) return ret;