From nobody Wed Dec 17 17:57:03 2025 Received: from mail-lj1-f176.google.com (mail-lj1-f176.google.com [209.85.208.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0964E56B81 for ; Sun, 15 Dec 2024 10:19:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1734257976; cv=none; b=YDg7rertCtOnyCVl3GGIvow76x8L0yCmnveea0AYGAdJepkqneWveP2KMMoGnf68RUPeWn8+8bQeFe420Wt+TbSyPuE8Nv8INcKdG0bqMhHtWLEDKpmdw5qiVi5uk2D/GZUAZW1pIZYzuTQaD6BAH7BWuXskkbV7yAofs03JAOk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1734257976; c=relaxed/simple; bh=URv90sDi3FjEk/GhJLTr5K8X04KZk3euo1MdVzvepzg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LEWNIdVnqWYtxGpvBPMVsVIyK7Lm+ySdlaAs4U0/M+zp5OG/+tzRcljxy7bOeYIcQa3tDDiDWjrc/XxC98fd21ixrta24tjIRS7ZLRSkxKXk3T8Zez5cNmDzfnAIQIgjMVWAMrZyzy7f/8FPidJdmEN7XmrUd6OxYY6H/Ofqf6g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=SMFE8nrC; arc=none smtp.client-ip=209.85.208.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="SMFE8nrC" Received: by mail-lj1-f176.google.com with SMTP id 38308e7fff4ca-2ffd6af012eso36444251fa.2 for ; Sun, 15 Dec 2024 02:19:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1734257972; x=1734862772; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=K0Pa1DpQtTQf5AsxhpFIP1iouoGhFtMYxmKB7fMM9Hc=; b=SMFE8nrC9YuPd8XdrSAjb37DDZzjpd8N43RlhUJCwo3o1TltqJmFnW4gGyrwV9RBSq g7VdY+Fpus+8ArfqJ10spcXtijv/iBL/xcLhYo3OTY9tg9L8ZCzQOssGZanUtVI35pYb 0W5Wn42K+b/8p3s2IadCB7IDnMlGTvKq7Ed528q15+tqvD+/SzAtWrk60L1MO1m8RT53 CUCqhcDAB23jzgQeoGaJXKcZ0LmbA2Zs2mJ4PIe+/cXrZ4fx+BWRqb2fZHDVJTXoW2O1 mQqG9Jp7TlQQKOZtiMyOebT25nL5XWXSWsVez3Su9DZptLXyb42PVOF+4pO5D31DMNBW YOuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734257972; x=1734862772; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=K0Pa1DpQtTQf5AsxhpFIP1iouoGhFtMYxmKB7fMM9Hc=; b=H7mzKTVGMIOK8Tq9U+HSXOBlvzoZNSsh29sU3++9+vjELQATNw/RojsexXsZ2YsgXp t1ekKy087/9x3oiezQGeCYnwDr+B5/bS35ZjKb4M80lfjV16VjCLU/Lv5plK66BZRyef N4e4/Wrv8VmiTwxIHstvumwG/YTnARaFzj4jfFiCDGS/ac9zGBSPwMk59fuSP+YaQQ4U 3zBfSb04hXp0YIrcMa6XDWs9J/efOFKhMYHjYVaclqgKbLwglrcgDF5vw33HAF37htJD HrKa/XUXrgRmClT8o60pbikpQzPefqZdKDxYm0zbSNucBvADxiu/rGTxsic6dcoyYwfk z2gg== X-Forwarded-Encrypted: i=1; AJvYcCU0wtFNUclzqj1Vv88rXMkRRT3dHbcSuVvO5thVJqnSriTB/0t7X9btuTD6w5WW4quY4eIU6h9oVWy30og=@vger.kernel.org X-Gm-Message-State: AOJu0Yw9amhaqefRGMMejNma5ZmkGfvWmz+Sijc40+wQJ+ixXkHzVzMi Yz1lV0gLBdFOi4r8DBSxuniHBCdeJULTFOdP1j2LaULQI4ZbE1woZSiFlg3pPn0= X-Gm-Gg: ASbGncv8Ht75mB6iKN7D1knzT/A1vNQ2IJtaYXdvVvPqH4g7yv5eVF6wJ884xU6ytry Z+H89PGLHErbvBq9Ch3irS41gZcmDf0JWU91GYh6BSmsHr7zcDNjcJvaFsrHmE7+1mPXVR9YrBy e8ROT0RP6mrle+Znv+6iu0d4NZ2ruyKsRJfaQzvMCXatanX8fxajZdmBiaQDEUuzBJuPQkW8zuk eCERKMhFm4zFhM6lAaChoaKPCnuOmgHVSd+ti8wt+yyteCBQ4lB1VXVtgTv9m9i X-Google-Smtp-Source: AGHT+IHjLGhEq3RJ7lY+doWC0Q9bi0Mw9xPvbxoiNsVJdZ8CUlxXv2l1nmcvW3T7FZcOVj8KGQqKFA== X-Received: by 2002:a2e:a5cb:0:b0:2ff:c3d2:b0ab with SMTP id 38308e7fff4ca-302544b1a1amr35005071fa.29.1734257972037; Sun, 15 Dec 2024 02:19:32 -0800 (PST) Received: from umbar.lan ([192.130.178.90]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-3034401d546sm5270851fa.11.2024.12.15.02.19.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 15 Dec 2024 02:19:30 -0800 (PST) From: Dmitry Baryshkov Date: Sun, 15 Dec 2024 12:19:23 +0200 Subject: [PATCH v2 1/2] drm/nouveau: incorporate I2C TV encoder drivers Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20241215-nouveau-encoder-slave-v2-1-ef7a0e687242@linaro.org> References: <20241215-nouveau-encoder-slave-v2-0-ef7a0e687242@linaro.org> In-Reply-To: <20241215-nouveau-encoder-slave-v2-0-ef7a0e687242@linaro.org> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Karol Herbst , Lyude Paul , Danilo Krummrich Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, nouveau@lists.freedesktop.org, Laurent Pinchart X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=11337; i=dmitry.baryshkov@linaro.org; h=from:subject:message-id; bh=URv90sDi3FjEk/GhJLTr5K8X04KZk3euo1MdVzvepzg=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBnXq0vFHr+/MyrxXW6dXjXWRfz8KCeUrPRwE5Zc rM2sW+AOCCJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCZ16tLwAKCRCLPIo+Aiko 1TorB/92locLwkzuuTxEwRPYjyHNWDvMSECsDyxVR24D76YM7BYwRBgLpT2R6S+ZZ9NS3RXKMaw 7cPCBG4zvyaA5PLReg3SwfGEXLKKrn7OYjQzV6d1hze6IVNyu4zlrOH39Brt5aYt27TXzliL8KR 66S827IWk0fSyuqFK9nkdAERwww4i9nvl2A+fj/xymxBw1QJcSmnKC+NoAi0EkTYCsjk3IbH4iD fMj6sOcWzPtjgO6jMQz3uks5wZvWuWM2RDfGBvuwGEnXjRR5IRr8WeImo5CjhlMRb4UInSv5GPR c+aGqTeHeMggebuVjU0+FGAwfBty/T18BxWVN7SRzqDN5sNq X-Developer-Key: i=dmitry.baryshkov@linaro.org; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A Chrontel CH7006 and Silicon Image sil164 drivers use drm_encoder_slave interface which is being used only by the nouveau driver. It doesn't make sense to keep this interface inside the DRM subsystem. In preparation to moving this set of helpers to the nouveau driver, move the only two I2C driver that use that interface to the nouveau driver too. Suggested-by: Laurent Pinchart Signed-off-by: Dmitry Baryshkov --- arch/arm/configs/multi_v7_defconfig | 4 ++-- arch/parisc/configs/generic-32bit_defconfig | 4 ++-- arch/parisc/configs/generic-64bit_defconfig | 4 ++-- drivers/gpu/drm/i2c/Kconfig | 18 ----------------= -- drivers/gpu/drm/i2c/Makefile | 6 ------ drivers/gpu/drm/nouveau/Kconfig | 20 ++++++++++++++++= ++++ drivers/gpu/drm/nouveau/dispnv04/Kbuild | 2 ++ drivers/gpu/drm/nouveau/dispnv04/dfp.c | 2 +- drivers/gpu/drm/nouveau/dispnv04/i2c/Kbuild | 5 +++++ .../gpu/drm/{ =3D> nouveau/dispnv04}/i2c/ch7006_drv.c | 0 .../gpu/drm/{ =3D> nouveau/dispnv04}/i2c/ch7006_mode.c | 0 .../gpu/drm/{ =3D> nouveau/dispnv04}/i2c/ch7006_priv.h | 7 ++++--- .../gpu/drm/{ =3D> nouveau/dispnv04}/i2c/sil164_drv.c | 3 ++- drivers/gpu/drm/nouveau/dispnv04/tvnv04.c | 2 +- .../gpu/drm/nouveau/include}/i2c/ch7006.h | 4 ++-- .../gpu/drm/nouveau/include}/i2c/sil164.h | 4 ++-- 16 files changed, 45 insertions(+), 40 deletions(-) diff --git a/arch/arm/configs/multi_v7_defconfig b/arch/arm/configs/multi_v= 7_defconfig index 9d4336261e450ce5bf99a1aa53e603bd7c0037bb..7fb24a4fb9f697c0c726204d0ba= 3754e87000e6a 100644 --- a/arch/arm/configs/multi_v7_defconfig +++ b/arch/arm/configs/multi_v7_defconfig @@ -713,10 +713,10 @@ CONFIG_VIDEO_ADV7604_CEC=3Dy CONFIG_VIDEO_ML86V7667=3Dm CONFIG_IMX_IPUV3_CORE=3Dm CONFIG_DRM=3Dy -# CONFIG_DRM_I2C_CH7006 is not set -# CONFIG_DRM_I2C_SIL164 is not set CONFIG_DRM_I2C_NXP_TDA998X=3Dm CONFIG_DRM_NOUVEAU=3Dm +# CONFIG_DRM_NOUVEAU_CH7006 is not set +# CONFIG_DRM_NOUVEAU_SIL164 is not set CONFIG_DRM_EXYNOS=3Dm CONFIG_DRM_EXYNOS_FIMD=3Dy CONFIG_DRM_EXYNOS_MIXER=3Dy diff --git a/arch/parisc/configs/generic-32bit_defconfig b/arch/parisc/conf= igs/generic-32bit_defconfig index 5ce258f3fffaf0e3aac5f8f5450dd65bad305879..f5fffc24c3bc5baf0d77b845e3a= c77fae49b276e 100644 --- a/arch/parisc/configs/generic-32bit_defconfig +++ b/arch/parisc/configs/generic-32bit_defconfig @@ -132,11 +132,11 @@ CONFIG_I2C=3Dy CONFIG_HWMON=3Dm CONFIG_DRM=3Dm CONFIG_DRM_DISPLAY_DP_AUX_CEC=3Dy -# CONFIG_DRM_I2C_CH7006 is not set -# CONFIG_DRM_I2C_SIL164 is not set CONFIG_DRM_RADEON=3Dm CONFIG_DRM_NOUVEAU=3Dm # CONFIG_DRM_NOUVEAU_BACKLIGHT is not set +# CONFIG_DRM_NOUVEAU_CH7006 is not set +# CONFIG_DRM_NOUVEAU_SIL164 is not set CONFIG_DRM_VGEM=3Dm CONFIG_DRM_UDL=3Dm CONFIG_DRM_MGAG200=3Dm diff --git a/arch/parisc/configs/generic-64bit_defconfig b/arch/parisc/conf= igs/generic-64bit_defconfig index 19a804860ed5b355f82396c2314bd0d8f3fb768a..704f68fbf960fb865206c8f8ab1= 751c9f0db6de3 100644 --- a/arch/parisc/configs/generic-64bit_defconfig +++ b/arch/parisc/configs/generic-64bit_defconfig @@ -193,11 +193,11 @@ CONFIG_MEDIA_SUPPORT=3Dm CONFIG_AGP=3Dy CONFIG_AGP_PARISC=3Dy CONFIG_DRM=3Dy -# CONFIG_DRM_I2C_CH7006 is not set -# CONFIG_DRM_I2C_SIL164 is not set CONFIG_DRM_RADEON=3Dy CONFIG_DRM_NOUVEAU=3Dm # CONFIG_DRM_NOUVEAU_BACKLIGHT is not set +# CONFIG_DRM_NOUVEAU_CH7006 is not set +# CONFIG_DRM_NOUVEAU_SIL164 is not set CONFIG_DRM_MGAG200=3Dm CONFIG_FB=3Dy CONFIG_FB_PM2=3Dm diff --git a/drivers/gpu/drm/i2c/Kconfig b/drivers/gpu/drm/i2c/Kconfig index 6f19e1c35e30b0e595c1a60628a6b8cf313fcabc..d5200f67958e68a8ec73401f1d3= b79cbe0aa303d 100644 --- a/drivers/gpu/drm/i2c/Kconfig +++ b/drivers/gpu/drm/i2c/Kconfig @@ -2,24 +2,6 @@ menu "I2C encoder or helper chips" depends on DRM && DRM_KMS_HELPER && I2C =20 -config DRM_I2C_CH7006 - tristate "Chrontel ch7006 TV encoder" - default m if DRM_NOUVEAU - help - Support for Chrontel ch7006 and similar TV encoders, found - on some nVidia video cards. - - This driver is currently only useful if you're also using - the nouveau driver. - -config DRM_I2C_SIL164 - tristate "Silicon Image sil164 TMDS transmitter" - default m if DRM_NOUVEAU - help - Support for sil164 and similar single-link (or dual-link - when used in pairs) TMDS transmitters, used in some nVidia - video cards. - config DRM_I2C_NXP_TDA998X tristate "NXP Semiconductors TDA998X HDMI encoder" default m if DRM_TILCDC diff --git a/drivers/gpu/drm/i2c/Makefile b/drivers/gpu/drm/i2c/Makefile index a962f6f085686674ed33010345730db776815ebe..31fd35527d99d7eb23851d29017= 5a3ff0c756772 100644 --- a/drivers/gpu/drm/i2c/Makefile +++ b/drivers/gpu/drm/i2c/Makefile @@ -1,10 +1,4 @@ # SPDX-License-Identifier: GPL-2.0 -ch7006-y :=3D ch7006_drv.o ch7006_mode.o -obj-$(CONFIG_DRM_I2C_CH7006) +=3D ch7006.o - -sil164-y :=3D sil164_drv.o -obj-$(CONFIG_DRM_I2C_SIL164) +=3D sil164.o - tda998x-y :=3D tda998x_drv.o obj-$(CONFIG_DRM_I2C_NXP_TDA998X) +=3D tda998x.o obj-$(CONFIG_DRM_I2C_NXP_TDA9950) +=3D tda9950.o diff --git a/drivers/gpu/drm/nouveau/Kconfig b/drivers/gpu/drm/nouveau/Kcon= fig index ce840300578d8a4011c448b61caf830cef3805bf..4cffac26f90ae6130ef30ba389b= 2a8c9b732058c 100644 --- a/drivers/gpu/drm/nouveau/Kconfig +++ b/drivers/gpu/drm/nouveau/Kconfig @@ -109,3 +109,23 @@ config DRM_NOUVEAU_GSP_DEFAULT help Say Y here if you want to use the GSP codepaths by default on Turing and Ampere GPUs. + +config DRM_NOUVEAU_CH7006 + tristate "Chrontel ch7006 TV encoder" + depends on DRM_NOUVEAU + default m + help + Support for Chrontel ch7006 and similar TV encoders, found + on some nVidia video cards. + + This driver is currently only useful if you're also using + the nouveau driver. + +config DRM_NOUVEAU_SIL164 + tristate "Silicon Image sil164 TMDS transmitter" + depends on DRM_NOUVEAU + default m + help + Support for sil164 and similar single-link (or dual-link + when used in pairs) TMDS transmitters, used in some nVidia + video cards. diff --git a/drivers/gpu/drm/nouveau/dispnv04/Kbuild b/drivers/gpu/drm/nouv= eau/dispnv04/Kbuild index 975c4e2269366d57e928eedbbbc669d24744379f..949802882ebd53c15e124c218a0= 92af9693d36bc 100644 --- a/drivers/gpu/drm/nouveau/dispnv04/Kbuild +++ b/drivers/gpu/drm/nouveau/dispnv04/Kbuild @@ -10,3 +10,5 @@ nouveau-y +=3D dispnv04/overlay.o nouveau-y +=3D dispnv04/tvmodesnv17.o nouveau-y +=3D dispnv04/tvnv04.o nouveau-y +=3D dispnv04/tvnv17.o + +include $(src)/dispnv04/i2c/Kbuild diff --git a/drivers/gpu/drm/nouveau/dispnv04/dfp.c b/drivers/gpu/drm/nouve= au/dispnv04/dfp.c index 504c421aa176ef3d944592a0109cb72e21fd47b7..28a42ab5cb900ebe8a526e154f9= e90598333356c 100644 --- a/drivers/gpu/drm/nouveau/dispnv04/dfp.c +++ b/drivers/gpu/drm/nouveau/dispnv04/dfp.c @@ -35,7 +35,7 @@ #include "hw.h" #include "nvreg.h" =20 -#include +#include =20 #include =20 diff --git a/drivers/gpu/drm/nouveau/dispnv04/i2c/Kbuild b/drivers/gpu/drm/= nouveau/dispnv04/i2c/Kbuild new file mode 100644 index 0000000000000000000000000000000000000000..3fddfc97bcb399ef3821c6065e5= 868363883ac74 --- /dev/null +++ b/drivers/gpu/drm/nouveau/dispnv04/i2c/Kbuild @@ -0,0 +1,5 @@ +ch7006-y :=3D dispnv04/i2c/ch7006_drv.o dispnv04/i2c/ch7006_mode.o +obj-$(CONFIG_DRM_NOUVEAU_CH7006) +=3D ch7006.o + +sil164-y :=3D dispnv04/i2c/sil164_drv.o +obj-$(CONFIG_DRM_NOUVEAU_SIL164) +=3D sil164.o diff --git a/drivers/gpu/drm/i2c/ch7006_drv.c b/drivers/gpu/drm/nouveau/dis= pnv04/i2c/ch7006_drv.c similarity index 100% rename from drivers/gpu/drm/i2c/ch7006_drv.c rename to drivers/gpu/drm/nouveau/dispnv04/i2c/ch7006_drv.c diff --git a/drivers/gpu/drm/i2c/ch7006_mode.c b/drivers/gpu/drm/nouveau/di= spnv04/i2c/ch7006_mode.c similarity index 100% rename from drivers/gpu/drm/i2c/ch7006_mode.c rename to drivers/gpu/drm/nouveau/dispnv04/i2c/ch7006_mode.c diff --git a/drivers/gpu/drm/i2c/ch7006_priv.h b/drivers/gpu/drm/nouveau/di= spnv04/i2c/ch7006_priv.h similarity index 99% rename from drivers/gpu/drm/i2c/ch7006_priv.h rename to drivers/gpu/drm/nouveau/dispnv04/i2c/ch7006_priv.h index 052bdc48a339df47073ab305f224f96c8630d66c..8136f8cd8f9b859ccf915e295c7= 83f9fc8321c2e 100644 --- a/drivers/gpu/drm/i2c/ch7006_priv.h +++ b/drivers/gpu/drm/nouveau/dispnv04/i2c/ch7006_priv.h @@ -24,12 +24,13 @@ * */ =20 -#ifndef __DRM_I2C_CH7006_PRIV_H__ -#define __DRM_I2C_CH7006_PRIV_H__ +#ifndef __NOUVEAU_I2C_CH7006_PRIV_H__ +#define __NOUVEAU_I2C_CH7006_PRIV_H__ =20 #include #include -#include + +#include =20 typedef int64_t fixed; #define fixed1 (1LL << 32) diff --git a/drivers/gpu/drm/i2c/sil164_drv.c b/drivers/gpu/drm/nouveau/dis= pnv04/i2c/sil164_drv.c similarity index 99% rename from drivers/gpu/drm/i2c/sil164_drv.c rename to drivers/gpu/drm/nouveau/dispnv04/i2c/sil164_drv.c index ff23422727fce290a188e495d343e32bc2c373ec..74fc961c0d0de06f1fe8dd93d35= 1452cd20cead7 100644 --- a/drivers/gpu/drm/i2c/sil164_drv.c +++ b/drivers/gpu/drm/nouveau/dispnv04/i2c/sil164_drv.c @@ -30,7 +30,8 @@ #include #include #include -#include + +#include =20 struct sil164_priv { struct sil164_encoder_params config; diff --git a/drivers/gpu/drm/nouveau/dispnv04/tvnv04.c b/drivers/gpu/drm/no= uveau/dispnv04/tvnv04.c index d3014027a8122be499b85459b038fdcce5800720..67f3e0ac0e109b223ca8ec4ddc4= e688247373b2e 100644 --- a/drivers/gpu/drm/nouveau/dispnv04/tvnv04.c +++ b/drivers/gpu/drm/nouveau/dispnv04/tvnv04.c @@ -32,7 +32,7 @@ #include "hw.h" #include =20 -#include +#include =20 static struct nvkm_i2c_bus_probe nv04_tv_encoder_info[] =3D { { diff --git a/include/drm/i2c/ch7006.h b/drivers/gpu/drm/nouveau/include/i2c= /ch7006.h similarity index 97% rename from include/drm/i2c/ch7006.h rename to drivers/gpu/drm/nouveau/include/i2c/ch7006.h index 5305b9797f938626c8f6c464ddc9bf424a39b4a0..1a6fa405f85b2a0d0f9a4d1c786= defc527fa1d3b 100644 --- a/include/drm/i2c/ch7006.h +++ b/drivers/gpu/drm/nouveau/include/i2c/ch7006.h @@ -24,8 +24,8 @@ * */ =20 -#ifndef __DRM_I2C_CH7006_H__ -#define __DRM_I2C_CH7006_H__ +#ifndef __NOUVEAU_I2C_CH7006_H__ +#define __NOUVEAU_I2C_CH7006_H__ =20 /** * struct ch7006_encoder_params diff --git a/include/drm/i2c/sil164.h b/drivers/gpu/drm/nouveau/include/i2c= /sil164.h similarity index 96% rename from include/drm/i2c/sil164.h rename to drivers/gpu/drm/nouveau/include/i2c/sil164.h index ddf248693c8be8809777723c272f82af8d334c99..b86750d7abe1c2e7142eac32898= 398475fd42531 100644 --- a/include/drm/i2c/sil164.h +++ b/drivers/gpu/drm/nouveau/include/i2c/sil164.h @@ -24,8 +24,8 @@ * */ =20 -#ifndef __DRM_I2C_SIL164_H__ -#define __DRM_I2C_SIL164_H__ +#ifndef __NOUVEAU_I2C_SIL164_H__ +#define __NOUVEAU_I2C_SIL164_H__ =20 /** * struct sil164_encoder_params --=20 2.39.5 From nobody Wed Dec 17 17:57:03 2025 Received: from mail-lj1-f182.google.com (mail-lj1-f182.google.com [209.85.208.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 87F2B152160 for ; Sun, 15 Dec 2024 10:19:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1734257979; cv=none; b=uT1pZH90T4yFuFiFDgWk0So2iJywGqPd2kiNWswVTuC2XR14ANvhyAy13t9WYUUBk8aIIpDHfpjxp8YaUtZ4Hf+R332g7MVvNgxSKGZJf21V1Y8Rb7p2scNQIhQkhabuIOfZ1cTml5gsbMSswF9TTr3tGrjIhesaoVmEbaeadmM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1734257979; c=relaxed/simple; bh=d6gprNWDxigG9xxClmEoB2rp5ZzNAigVcV/fmzc7g3k=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jmRF0kpKunq5x/QNf+fwCvAmP17uzCGleNCxhknT1yLFPPS8yyzZ5yJs8XEorcvqokn4bZWWAuZh2jM0Wyo+kWuDzabzhkDBDCvI+NTP//nyIHK7tq1XS4VNaL2mEmaBYCmLbZ3GpDwdfZYKlY07KN3IuIjjHKhX4qhPHqmSal0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=HFwt9LNL; arc=none smtp.client-ip=209.85.208.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="HFwt9LNL" Received: by mail-lj1-f182.google.com with SMTP id 38308e7fff4ca-300392cc4caso38444251fa.3 for ; Sun, 15 Dec 2024 02:19:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1734257975; x=1734862775; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=yMp9ECjcCizbaBfmL+KANtoThCCesGXXmkJHkGhdU8M=; b=HFwt9LNLjdbCOICCuJUqlRB+k5rfyyGlVZw565YI6AQNMi0t3fxSXvy4GL2OTjp2c3 nc6QP9o3DsCoWjbfc/MyxrTnrZNvTlbf9hJ21I8PQYj0Euq53FbLTG/+oHcK4hSn+L49 wtPGTtW7qCeJpJxIkij51y4X1Km+SYuyHbZfnaJnLUXnfzaJ0gNEDDnN1IunRdjtddRg z24lzsZiMCFiqemB5uqFcvCNHVvwWZasgi9sb21kcYA96bHr2O9VIRcUHXYSygzFMUxR 27tK3ZzVlWNgqA7+JdXkrbaZ7uBMsgZ43suKmHNSa26T0U1R6f+5dRcy0B8ecn1UgfGu a1bg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734257975; x=1734862775; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=yMp9ECjcCizbaBfmL+KANtoThCCesGXXmkJHkGhdU8M=; b=nB80Yh3Y/+5SxFN6qTbHOzYalfAfRN9kBivwDJrXY+TpGlpPzo/WUT+RYChWN2FshZ DH+wu2m9trmGL7rgaTkTUO6uyNfpUQ6FzQ1NAI5Sp2IsSjEOOGp5TaA7hmM3LYy9CxeO WSMrXcM6KULwumEA7XwNTrrMDUu+0Tlvr1h0J+22/iwsbdHpSXdXnDy3WknIjOZs6ZZ9 j6m20VbZjSKrf+TYB3K38vJDSK0eOyLMAXKWJyYYf9dXQV57yT1Zz5ysUv78//C4LCBZ zVUCNFQ9s+Y111MRaF30S6r0X//hR/7e6IrzVtZzNpDsPUsi5mNt48zwq7+qHjSjghA4 ZSnA== X-Forwarded-Encrypted: i=1; AJvYcCWSIOd0UjMT8l4DLnO+IdgEmzEfMRQtFzptWOPvHX+1f23jTEgIxCRK6b+EWNtcJR5uLqAsyFseuDoWkfo=@vger.kernel.org X-Gm-Message-State: AOJu0YwS87wC0HjIu/1g+4GP4cZGOK1WFUtORfhwVt3+n7Gc22Pbpwhy W+derL459RCh4CrpipRXGQUJ+BLUSYCivw399Wysg8eMBiVNG9KQpKVIz7K4CSk= X-Gm-Gg: ASbGncslAqWbW1wNougW6TR5nU7sVWU96x5dPok9NGQrP5j7mhfYpWhMLIz/CAdLqJN K3LB0VG2Nf8JWy0lxw4QKPVYKseAONYIc7N0CVdiulQch4uzrXgN0EjV/L8gZfzAvEujhORm5nZ TsyTIJykS9V3j+scqIeTVe0Zr8mU2X+wXY/eDtYeO0G+wCdK4r+qQhU5qVadtqBhfIeOlUueFTO bvLNdVMqqKB1eNM6GgMWNdaWOtw179/pKs5uny5+gSWfGXIrB+mIxEcmO9qe329 X-Google-Smtp-Source: AGHT+IHUlLPNgg9w4rON7IoCnabAPJLReu5NtyAO857RgPH8pf9oDAACH8KjER50Za1HyZUxPAWZ+g== X-Received: by 2002:a2e:3c06:0:b0:302:3355:f756 with SMTP id 38308e7fff4ca-30254502ce0mr27564211fa.35.1734257974493; Sun, 15 Dec 2024 02:19:34 -0800 (PST) Received: from umbar.lan ([192.130.178.90]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-3034401d546sm5270851fa.11.2024.12.15.02.19.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 15 Dec 2024 02:19:32 -0800 (PST) From: Dmitry Baryshkov Date: Sun, 15 Dec 2024 12:19:24 +0200 Subject: [PATCH v2 2/2] drm/nouveau: vendor in drm_encoder_slave API Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20241215-nouveau-encoder-slave-v2-2-ef7a0e687242@linaro.org> References: <20241215-nouveau-encoder-slave-v2-0-ef7a0e687242@linaro.org> In-Reply-To: <20241215-nouveau-encoder-slave-v2-0-ef7a0e687242@linaro.org> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Karol Herbst , Lyude Paul , Danilo Krummrich Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, nouveau@lists.freedesktop.org, Laurent Pinchart X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=38592; i=dmitry.baryshkov@linaro.org; h=from:subject:message-id; bh=d6gprNWDxigG9xxClmEoB2rp5ZzNAigVcV/fmzc7g3k=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBnXq0vWTjB0wy4eN/ag54SUPUcNyS9oRgfq27ei iOCgjiw8EqJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCZ16tLwAKCRCLPIo+Aiko 1ZzAB/0Y6ASjVeZSXgfN0CbeZx+FZlNyXRWWZjfjl3KxliOOQ6IHc9XhxrPVL94IeHZmxbIwI0H MGA7C4pY0lsIJH7cQ9tPeYq18FXLKJ7gedKQy1F4UDY5rFwrJ4jGRdlBYNT1cjNJAmjpY5VpHrs y9rKV2/KS4bbu2b+GV8Cz5/N+yVd874sgkvFvXwoyeWPp3VS1YifascCC0C1kb7QdA5+jGliOj/ OsHjbAaTNsnkI03J8mkcnYyv12H1uiPE4ykKefXzl+G6iwN3NM8mJZndfhxXVFXYn9vG8SAR5P/ Lq5ubatL0MPEEfw4bXN5HN2SlmG/YeKMaJ4NbGwQaLFzCFpL X-Developer-Key: i=dmitry.baryshkov@linaro.org; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A Nouveau driver is the only user of the drm_encoder_slave API. Rework necessary bits of drm_encoder_slave into the nouveau_i2c_encoder API and drop drm_encoder_slave.c from the DRM KMS helper. Suggested-by: Laurent Pinchart Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/Makefile | 1 - drivers/gpu/drm/nouveau/dispnv04/Kbuild | 1 + drivers/gpu/drm/nouveau/dispnv04/dfp.c | 10 +- drivers/gpu/drm/nouveau/dispnv04/i2c/ch7006_drv.c | 30 +++--- drivers/gpu/drm/nouveau/dispnv04/i2c/ch7006_mode.c | 8 +- drivers/gpu/drm/nouveau/dispnv04/i2c/ch7006_priv.h | 4 +- drivers/gpu/drm/nouveau/dispnv04/i2c/sil164_drv.c | 30 +++--- .../dispnv04/nouveau_i2c_encoder.c} | 85 +++++----------- drivers/gpu/drm/nouveau/dispnv04/tvnv04.c | 18 ++-- drivers/gpu/drm/nouveau/dispnv04/tvnv17.c | 4 +- .../gpu/drm/nouveau/include/i2c/encoder_i2c.h | 109 ++++++++---------= ---- drivers/gpu/drm/nouveau/nouveau_connector.c | 6 +- drivers/gpu/drm/nouveau/nouveau_encoder.h | 13 +-- 13 files changed, 127 insertions(+), 192 deletions(-) diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile index 19fb370fbc56772077973c864df71e4b8e0bf99b..85af94bb907d6cdbad7078e2667= 426e479b1069f 100644 --- a/drivers/gpu/drm/Makefile +++ b/drivers/gpu/drm/Makefile @@ -135,7 +135,6 @@ drm_kms_helper-y :=3D \ drm_atomic_state_helper.o \ drm_crtc_helper.o \ drm_damage_helper.o \ - drm_encoder_slave.o \ drm_flip_work.o \ drm_format_helper.o \ drm_gem_atomic_helper.o \ diff --git a/drivers/gpu/drm/nouveau/dispnv04/Kbuild b/drivers/gpu/drm/nouv= eau/dispnv04/Kbuild index 949802882ebd53c15e124c218a092af9693d36bc..4c7bc6bb81b325ac22286372b0a= 3e4f1390e78be 100644 --- a/drivers/gpu/drm/nouveau/dispnv04/Kbuild +++ b/drivers/gpu/drm/nouveau/dispnv04/Kbuild @@ -6,6 +6,7 @@ nouveau-y +=3D dispnv04/dac.o nouveau-y +=3D dispnv04/dfp.o nouveau-y +=3D dispnv04/disp.o nouveau-y +=3D dispnv04/hw.o +nouveau-y +=3D dispnv04/nouveau_i2c_encoder.o nouveau-y +=3D dispnv04/overlay.o nouveau-y +=3D dispnv04/tvmodesnv17.o nouveau-y +=3D dispnv04/tvnv04.o diff --git a/drivers/gpu/drm/nouveau/dispnv04/dfp.c b/drivers/gpu/drm/nouve= au/dispnv04/dfp.c index 28a42ab5cb900ebe8a526e154f9e90598333356c..e211602298a5fb9f513203720b3= ee5d37cd21122 100644 --- a/drivers/gpu/drm/nouveau/dispnv04/dfp.c +++ b/drivers/gpu/drm/nouveau/dispnv04/dfp.c @@ -171,7 +171,7 @@ static struct drm_encoder *get_tmds_slave(struct drm_en= coder *encoder) list_for_each_entry(slave, &dev->mode_config.encoder_list, head) { struct dcb_output *slave_dcb =3D nouveau_encoder(slave)->dcb; =20 - if (slave_dcb->type =3D=3D DCB_OUTPUT_TMDS && get_slave_funcs(slave) && + if (slave_dcb->type =3D=3D DCB_OUTPUT_TMDS && get_encoder_i2c_funcs(slav= e) && slave_dcb->tmdsconf.slave_addr =3D=3D dcb->tmdsconf.slave_addr) return slave; } @@ -473,7 +473,7 @@ static void nv04_dfp_commit(struct drm_encoder *encoder) /* Init external transmitters */ slave_encoder =3D get_tmds_slave(encoder); if (slave_encoder) - get_slave_funcs(slave_encoder)->mode_set( + get_encoder_i2c_funcs(slave_encoder)->mode_set( slave_encoder, &nv_encoder->mode, &nv_encoder->mode); =20 helper->dpms(encoder, DRM_MODE_DPMS_ON); @@ -614,8 +614,8 @@ static void nv04_dfp_destroy(struct drm_encoder *encode= r) { struct nouveau_encoder *nv_encoder =3D nouveau_encoder(encoder); =20 - if (get_slave_funcs(encoder)) - get_slave_funcs(encoder)->destroy(encoder); + if (get_encoder_i2c_funcs(encoder)) + get_encoder_i2c_funcs(encoder)->destroy(encoder); =20 drm_encoder_cleanup(encoder); kfree(nv_encoder); @@ -649,7 +649,7 @@ static void nv04_tmds_slave_init(struct drm_encoder *en= coder) if (type < 0) return; =20 - drm_i2c_encoder_init(dev, to_encoder_slave(encoder), + nouveau_i2c_encoder_init(dev, to_encoder_i2c(encoder), &bus->i2c, &info[type].dev); } =20 diff --git a/drivers/gpu/drm/nouveau/dispnv04/i2c/ch7006_drv.c b/drivers/gp= u/drm/nouveau/dispnv04/i2c/ch7006_drv.c index 131512a5f3bd996ad1e2eb869ffa09837daba0c7..c9249b58e65459ae61898a246c3= 6da2c3bfe0844 100644 --- a/drivers/gpu/drm/nouveau/dispnv04/i2c/ch7006_drv.c +++ b/drivers/gpu/drm/nouveau/dispnv04/i2c/ch7006_drv.c @@ -47,14 +47,14 @@ static void ch7006_encoder_destroy(struct drm_encoder *= encoder) drm_property_destroy(encoder->dev, priv->scale_property); =20 kfree(priv); - to_encoder_slave(encoder)->slave_priv =3D NULL; + to_encoder_i2c(encoder)->encoder_i2c_priv =3D NULL; =20 - drm_i2c_encoder_destroy(encoder); + nouveau_i2c_encoder_destroy(encoder); } =20 static void ch7006_encoder_dpms(struct drm_encoder *encoder, int mode) { - struct i2c_client *client =3D drm_i2c_encoder_get_client(encoder); + struct i2c_client *client =3D nouveau_i2c_encoder_get_client(encoder); struct ch7006_priv *priv =3D to_ch7006_priv(encoder); struct ch7006_state *state =3D &priv->state; =20 @@ -71,7 +71,7 @@ static void ch7006_encoder_dpms(struct drm_encoder *enco= der, int mode) =20 static void ch7006_encoder_save(struct drm_encoder *encoder) { - struct i2c_client *client =3D drm_i2c_encoder_get_client(encoder); + struct i2c_client *client =3D nouveau_i2c_encoder_get_client(encoder); struct ch7006_priv *priv =3D to_ch7006_priv(encoder); =20 ch7006_dbg(client, "\n"); @@ -81,7 +81,7 @@ static void ch7006_encoder_save(struct drm_encoder *encod= er) =20 static void ch7006_encoder_restore(struct drm_encoder *encoder) { - struct i2c_client *client =3D drm_i2c_encoder_get_client(encoder); + struct i2c_client *client =3D nouveau_i2c_encoder_get_client(encoder); struct ch7006_priv *priv =3D to_ch7006_priv(encoder); =20 ch7006_dbg(client, "\n"); @@ -116,7 +116,7 @@ static void ch7006_encoder_mode_set(struct drm_encoder = *encoder, struct drm_display_mode *drm_mode, struct drm_display_mode *adjusted_mode) { - struct i2c_client *client =3D drm_i2c_encoder_get_client(encoder); + struct i2c_client *client =3D nouveau_i2c_encoder_get_client(encoder); struct ch7006_priv *priv =3D to_ch7006_priv(encoder); struct ch7006_encoder_params *params =3D &priv->params; struct ch7006_state *state =3D &priv->state; @@ -179,7 +179,7 @@ static void ch7006_encoder_mode_set(struct drm_encoder = *encoder, static enum drm_connector_status ch7006_encoder_detect(struct drm_encoder = *encoder, struct drm_connector *connector) { - struct i2c_client *client =3D drm_i2c_encoder_get_client(encoder); + struct i2c_client *client =3D nouveau_i2c_encoder_get_client(encoder); struct ch7006_priv *priv =3D to_ch7006_priv(encoder); struct ch7006_state *state =3D &priv->state; int det; @@ -285,7 +285,7 @@ static int ch7006_encoder_set_property(struct drm_encod= er *encoder, struct drm_property *property, uint64_t val) { - struct i2c_client *client =3D drm_i2c_encoder_get_client(encoder); + struct i2c_client *client =3D nouveau_i2c_encoder_get_client(encoder); struct ch7006_priv *priv =3D to_ch7006_priv(encoder); struct ch7006_state *state =3D &priv->state; struct drm_mode_config *conf =3D &encoder->dev->mode_config; @@ -370,7 +370,7 @@ static int ch7006_encoder_set_property(struct drm_encod= er *encoder, return 0; } =20 -static const struct drm_encoder_slave_funcs ch7006_encoder_funcs =3D { +static const struct nouveau_i2c_encoder_funcs ch7006_encoder_funcs =3D { .set_config =3D ch7006_encoder_set_config, .destroy =3D ch7006_encoder_destroy, .dpms =3D ch7006_encoder_dpms, @@ -437,7 +437,7 @@ static int ch7006_resume(struct device *dev) =20 static int ch7006_encoder_init(struct i2c_client *client, struct drm_device *dev, - struct drm_encoder_slave *encoder) + struct nouveau_i2c_encoder *encoder) { struct ch7006_priv *priv; int i; @@ -448,8 +448,8 @@ static int ch7006_encoder_init(struct i2c_client *clien= t, if (!priv) return -ENOMEM; =20 - encoder->slave_priv =3D priv; - encoder->slave_funcs =3D &ch7006_encoder_funcs; + encoder->encoder_i2c_priv =3D priv; + encoder->encoder_i2c_funcs =3D &ch7006_encoder_funcs; =20 priv->norm =3D TV_NORM_PAL; priv->select_subconnector =3D DRM_MODE_SUBCONNECTOR_Automatic; @@ -495,7 +495,7 @@ static const struct dev_pm_ops ch7006_pm_ops =3D { .resume =3D ch7006_resume, }; =20 -static struct drm_i2c_encoder_driver ch7006_driver =3D { +static struct nouveau_i2c_encoder_driver ch7006_driver =3D { .i2c_driver =3D { .probe =3D ch7006_probe, .remove =3D ch7006_remove, @@ -516,12 +516,12 @@ static struct drm_i2c_encoder_driver ch7006_driver = =3D { =20 static int __init ch7006_init(void) { - return drm_i2c_encoder_register(THIS_MODULE, &ch7006_driver); + return i2c_add_driver(&ch7006_driver.i2c_driver); } =20 static void __exit ch7006_exit(void) { - drm_i2c_encoder_unregister(&ch7006_driver); + i2c_del_driver(&ch7006_driver.i2c_driver); } =20 int ch7006_debug; diff --git a/drivers/gpu/drm/nouveau/dispnv04/i2c/ch7006_mode.c b/drivers/g= pu/drm/nouveau/dispnv04/i2c/ch7006_mode.c index 6afe6d0ee6306db57c3e3bafe2bf1b0b1b49aea5..e58d94451959a2afc01f570ea62= 0d8e6721cb7af 100644 --- a/drivers/gpu/drm/nouveau/dispnv04/i2c/ch7006_mode.c +++ b/drivers/gpu/drm/nouveau/dispnv04/i2c/ch7006_mode.c @@ -198,7 +198,7 @@ const struct ch7006_mode *ch7006_lookup_mode(struct drm= _encoder *encoder, =20 void ch7006_setup_levels(struct drm_encoder *encoder) { - struct i2c_client *client =3D drm_i2c_encoder_get_client(encoder); + struct i2c_client *client =3D nouveau_i2c_encoder_get_client(encoder); struct ch7006_priv *priv =3D to_ch7006_priv(encoder); uint8_t *regs =3D priv->state.regs; const struct ch7006_tv_norm_info *norm =3D &ch7006_tv_norms[priv->norm]; @@ -229,7 +229,7 @@ void ch7006_setup_levels(struct drm_encoder *encoder) =20 void ch7006_setup_subcarrier(struct drm_encoder *encoder) { - struct i2c_client *client =3D drm_i2c_encoder_get_client(encoder); + struct i2c_client *client =3D nouveau_i2c_encoder_get_client(encoder); struct ch7006_priv *priv =3D to_ch7006_priv(encoder); struct ch7006_state *state =3D &priv->state; const struct ch7006_tv_norm_info *norm =3D &ch7006_tv_norms[priv->norm]; @@ -253,7 +253,7 @@ void ch7006_setup_subcarrier(struct drm_encoder *encode= r) =20 void ch7006_setup_pll(struct drm_encoder *encoder) { - struct i2c_client *client =3D drm_i2c_encoder_get_client(encoder); + struct i2c_client *client =3D nouveau_i2c_encoder_get_client(encoder); struct ch7006_priv *priv =3D to_ch7006_priv(encoder); uint8_t *regs =3D priv->state.regs; const struct ch7006_mode *mode =3D priv->mode; @@ -324,7 +324,7 @@ void ch7006_setup_power_state(struct drm_encoder *encod= er) =20 void ch7006_setup_properties(struct drm_encoder *encoder) { - struct i2c_client *client =3D drm_i2c_encoder_get_client(encoder); + struct i2c_client *client =3D nouveau_i2c_encoder_get_client(encoder); struct ch7006_priv *priv =3D to_ch7006_priv(encoder); struct ch7006_state *state =3D &priv->state; const struct ch7006_tv_norm_info *norm =3D &ch7006_tv_norms[priv->norm]; diff --git a/drivers/gpu/drm/nouveau/dispnv04/i2c/ch7006_priv.h b/drivers/g= pu/drm/nouveau/dispnv04/i2c/ch7006_priv.h index 8136f8cd8f9b859ccf915e295c783f9fc8321c2e..70c4fc8a181035b8960a8fcce12= b5a1ad76e58b7 100644 --- a/drivers/gpu/drm/nouveau/dispnv04/i2c/ch7006_priv.h +++ b/drivers/gpu/drm/nouveau/dispnv04/i2c/ch7006_priv.h @@ -27,9 +27,9 @@ #ifndef __NOUVEAU_I2C_CH7006_PRIV_H__ #define __NOUVEAU_I2C_CH7006_PRIV_H__ =20 -#include #include =20 +#include #include =20 typedef int64_t fixed; @@ -100,7 +100,7 @@ struct ch7006_priv { }; =20 #define to_ch7006_priv(x) \ - ((struct ch7006_priv *)to_encoder_slave(x)->slave_priv) + ((struct ch7006_priv *)to_encoder_i2c(x)->encoder_i2c_priv) =20 extern int ch7006_debug; extern char *ch7006_tv_norm; diff --git a/drivers/gpu/drm/nouveau/dispnv04/i2c/sil164_drv.c b/drivers/gp= u/drm/nouveau/dispnv04/i2c/sil164_drv.c index 74fc961c0d0de06f1fe8dd93d351452cd20cead7..80758e796b5d794f8e05c1b68b3= 383e1af3d0df5 100644 --- a/drivers/gpu/drm/nouveau/dispnv04/i2c/sil164_drv.c +++ b/drivers/gpu/drm/nouveau/dispnv04/i2c/sil164_drv.c @@ -27,10 +27,10 @@ #include =20 #include -#include #include #include =20 +#include #include =20 struct sil164_priv { @@ -42,7 +42,7 @@ struct sil164_priv { }; =20 #define to_sil164_priv(x) \ - ((struct sil164_priv *)to_encoder_slave(x)->slave_priv) + ((struct sil164_priv *)to_encoder_i2c(x)->encoder_i2c_priv) =20 #define sil164_dbg(client, format, ...) do { \ if (drm_debug_enabled(DRM_UT_KMS)) \ @@ -222,7 +222,7 @@ sil164_encoder_dpms(struct drm_encoder *encoder, int mo= de) bool on =3D (mode =3D=3D DRM_MODE_DPMS_ON); bool duallink =3D (on && encoder->crtc->mode.clock > 165000); =20 - sil164_set_power_state(drm_i2c_encoder_get_client(encoder), on); + sil164_set_power_state(nouveau_i2c_encoder_get_client(encoder), on); =20 if (priv->duallink_slave) sil164_set_power_state(priv->duallink_slave, duallink); @@ -233,7 +233,7 @@ sil164_encoder_save(struct drm_encoder *encoder) { struct sil164_priv *priv =3D to_sil164_priv(encoder); =20 - sil164_save_state(drm_i2c_encoder_get_client(encoder), + sil164_save_state(nouveau_i2c_encoder_get_client(encoder), priv->saved_state); =20 if (priv->duallink_slave) @@ -246,7 +246,7 @@ sil164_encoder_restore(struct drm_encoder *encoder) { struct sil164_priv *priv =3D to_sil164_priv(encoder); =20 - sil164_restore_state(drm_i2c_encoder_get_client(encoder), + sil164_restore_state(nouveau_i2c_encoder_get_client(encoder), priv->saved_state); =20 if (priv->duallink_slave) @@ -278,7 +278,7 @@ sil164_encoder_mode_set(struct drm_encoder *encoder, struct sil164_priv *priv =3D to_sil164_priv(encoder); bool duallink =3D adjusted_mode->clock > 165000; =20 - sil164_init_state(drm_i2c_encoder_get_client(encoder), + sil164_init_state(nouveau_i2c_encoder_get_client(encoder), &priv->config, duallink); =20 if (priv->duallink_slave) @@ -292,7 +292,7 @@ static enum drm_connector_status sil164_encoder_detect(struct drm_encoder *encoder, struct drm_connector *connector) { - struct i2c_client *client =3D drm_i2c_encoder_get_client(encoder); + struct i2c_client *client =3D nouveau_i2c_encoder_get_client(encoder); =20 if (sil164_read(client, SIL164_DETECT) & SIL164_DETECT_HOTPLUG_STAT) return connector_status_connected; @@ -331,10 +331,10 @@ sil164_encoder_destroy(struct drm_encoder *encoder) i2c_unregister_device(priv->duallink_slave); =20 kfree(priv); - drm_i2c_encoder_destroy(encoder); + nouveau_i2c_encoder_destroy(encoder); } =20 -static const struct drm_encoder_slave_funcs sil164_encoder_funcs =3D { +static const struct nouveau_i2c_encoder_funcs sil164_encoder_funcs =3D { .set_config =3D sil164_encoder_set_config, .destroy =3D sil164_encoder_destroy, .dpms =3D sil164_encoder_dpms, @@ -394,7 +394,7 @@ sil164_detect_slave(struct i2c_client *client) static int sil164_encoder_init(struct i2c_client *client, struct drm_device *dev, - struct drm_encoder_slave *encoder) + struct nouveau_i2c_encoder *encoder) { struct sil164_priv *priv; struct i2c_client *slave_client; @@ -403,8 +403,8 @@ sil164_encoder_init(struct i2c_client *client, if (!priv) return -ENOMEM; =20 - encoder->slave_priv =3D priv; - encoder->slave_funcs =3D &sil164_encoder_funcs; + encoder->encoder_i2c_priv =3D priv; + encoder->encoder_i2c_funcs =3D &sil164_encoder_funcs; =20 slave_client =3D sil164_detect_slave(client); if (!IS_ERR(slave_client)) @@ -419,7 +419,7 @@ static const struct i2c_device_id sil164_ids[] =3D { }; MODULE_DEVICE_TABLE(i2c, sil164_ids); =20 -static struct drm_i2c_encoder_driver sil164_driver =3D { +static struct nouveau_i2c_encoder_driver sil164_driver =3D { .i2c_driver =3D { .probe =3D sil164_probe, .driver =3D { @@ -435,13 +435,13 @@ static struct drm_i2c_encoder_driver sil164_driver = =3D { static int __init sil164_init(void) { - return drm_i2c_encoder_register(THIS_MODULE, &sil164_driver); + return i2c_add_driver(&sil164_driver.i2c_driver); } =20 static void __exit sil164_exit(void) { - drm_i2c_encoder_unregister(&sil164_driver); + i2c_del_driver(&sil164_driver.i2c_driver); } =20 MODULE_AUTHOR("Francisco Jerez "); diff --git a/drivers/gpu/drm/drm_encoder_slave.c b/drivers/gpu/drm/nouveau/= dispnv04/nouveau_i2c_encoder.c similarity index 57% rename from drivers/gpu/drm/drm_encoder_slave.c rename to drivers/gpu/drm/nouveau/dispnv04/nouveau_i2c_encoder.c index e464429d32df6e2eeb541d92c5a486b4ee7a21ec..58270719cc3db6a2a0205196bf1= 8aba139da2df4 100644 --- a/drivers/gpu/drm/drm_encoder_slave.c +++ b/drivers/gpu/drm/nouveau/dispnv04/nouveau_i2c_encoder.c @@ -26,10 +26,10 @@ =20 #include =20 -#include +#include =20 /** - * drm_i2c_encoder_init - Initialize an I2C slave encoder + * nouveau_i2c_encoder_init - Initialize an I2C slave encoder * @dev: DRM device. * @encoder: Encoder to be attached to the I2C device. You aren't * required to have called drm_encoder_init() before. @@ -40,7 +40,7 @@ * * Create an I2C device on the specified bus (the module containing its * driver is transparently loaded) and attach it to the specified - * &drm_encoder_slave. The @slave_funcs field will be initialized with + * &nouveau_i2c_encoder. The @encoder_i2c_funcs field will be initialized = with * the hooks provided by the slave driver. * * If @info.platform_data is non-NULL it will be used as the initial @@ -49,14 +49,14 @@ * Returns 0 on success or a negative errno on failure, in particular, * -ENODEV is returned when no matching driver is found. */ -int drm_i2c_encoder_init(struct drm_device *dev, - struct drm_encoder_slave *encoder, +int nouveau_i2c_encoder_init(struct drm_device *dev, + struct nouveau_i2c_encoder *encoder, struct i2c_adapter *adap, const struct i2c_board_info *info) { struct module *module =3D NULL; struct i2c_client *client; - struct drm_i2c_encoder_driver *encoder_drv; + struct nouveau_i2c_encoder_driver *encoder_drv; int err =3D 0; =20 request_module("%s%s", I2C_MODULE_PREFIX, info->type); @@ -73,16 +73,16 @@ int drm_i2c_encoder_init(struct drm_device *dev, goto fail_unregister; } =20 - encoder->bus_priv =3D client; + encoder->i2c_client =3D client; =20 - encoder_drv =3D to_drm_i2c_encoder_driver(to_i2c_driver(client->dev.drive= r)); + encoder_drv =3D to_nouveau_i2c_encoder_driver(to_i2c_driver(client->dev.d= river)); =20 err =3D encoder_drv->encoder_init(client, dev, encoder); if (err) goto fail_module_put; =20 if (info->platform_data) - encoder->slave_funcs->set_config(&encoder->base, + encoder->encoder_i2c_funcs->set_config(&encoder->base, info->platform_data); =20 return 0; @@ -93,90 +93,53 @@ int drm_i2c_encoder_init(struct drm_device *dev, i2c_unregister_device(client); return err; } -EXPORT_SYMBOL(drm_i2c_encoder_init); =20 /** - * drm_i2c_encoder_destroy - Unregister the I2C device backing an encoder + * nouveau_i2c_encoder_destroy - Unregister the I2C device backing an enco= der * @drm_encoder: Encoder to be unregistered. * * This should be called from the @destroy method of an I2C slave * encoder driver once I2C access is no longer needed. */ -void drm_i2c_encoder_destroy(struct drm_encoder *drm_encoder) +void nouveau_i2c_encoder_destroy(struct drm_encoder *drm_encoder) { - struct drm_encoder_slave *encoder =3D to_encoder_slave(drm_encoder); - struct i2c_client *client =3D drm_i2c_encoder_get_client(drm_encoder); + struct nouveau_i2c_encoder *encoder =3D to_encoder_i2c(drm_encoder); + struct i2c_client *client =3D nouveau_i2c_encoder_get_client(drm_encoder); struct module *module =3D client->dev.driver->owner; =20 i2c_unregister_device(client); - encoder->bus_priv =3D NULL; + encoder->i2c_client =3D NULL; =20 module_put(module); } -EXPORT_SYMBOL(drm_i2c_encoder_destroy); +EXPORT_SYMBOL(nouveau_i2c_encoder_destroy); =20 /* * Wrapper fxns which can be plugged in to drm_encoder_helper_funcs: */ =20 -static inline const struct drm_encoder_slave_funcs * -get_slave_funcs(struct drm_encoder *enc) -{ - return to_encoder_slave(enc)->slave_funcs; -} - -void drm_i2c_encoder_dpms(struct drm_encoder *encoder, int mode) -{ - get_slave_funcs(encoder)->dpms(encoder, mode); -} -EXPORT_SYMBOL(drm_i2c_encoder_dpms); - -bool drm_i2c_encoder_mode_fixup(struct drm_encoder *encoder, +bool nouveau_i2c_encoder_mode_fixup(struct drm_encoder *encoder, const struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode) { - if (!get_slave_funcs(encoder)->mode_fixup) + if (!get_encoder_i2c_funcs(encoder)->mode_fixup) return true; =20 - return get_slave_funcs(encoder)->mode_fixup(encoder, mode, adjusted_mode); -} -EXPORT_SYMBOL(drm_i2c_encoder_mode_fixup); - -void drm_i2c_encoder_prepare(struct drm_encoder *encoder) -{ - drm_i2c_encoder_dpms(encoder, DRM_MODE_DPMS_OFF); -} -EXPORT_SYMBOL(drm_i2c_encoder_prepare); - -void drm_i2c_encoder_commit(struct drm_encoder *encoder) -{ - drm_i2c_encoder_dpms(encoder, DRM_MODE_DPMS_ON); -} -EXPORT_SYMBOL(drm_i2c_encoder_commit); - -void drm_i2c_encoder_mode_set(struct drm_encoder *encoder, - struct drm_display_mode *mode, - struct drm_display_mode *adjusted_mode) -{ - get_slave_funcs(encoder)->mode_set(encoder, mode, adjusted_mode); + return get_encoder_i2c_funcs(encoder)->mode_fixup(encoder, mode, adjusted= _mode); } -EXPORT_SYMBOL(drm_i2c_encoder_mode_set); =20 -enum drm_connector_status drm_i2c_encoder_detect(struct drm_encoder *encod= er, +enum drm_connector_status nouveau_i2c_encoder_detect(struct drm_encoder *e= ncoder, struct drm_connector *connector) { - return get_slave_funcs(encoder)->detect(encoder, connector); + return get_encoder_i2c_funcs(encoder)->detect(encoder, connector); } -EXPORT_SYMBOL(drm_i2c_encoder_detect); =20 -void drm_i2c_encoder_save(struct drm_encoder *encoder) +void nouveau_i2c_encoder_save(struct drm_encoder *encoder) { - get_slave_funcs(encoder)->save(encoder); + get_encoder_i2c_funcs(encoder)->save(encoder); } -EXPORT_SYMBOL(drm_i2c_encoder_save); =20 -void drm_i2c_encoder_restore(struct drm_encoder *encoder) +void nouveau_i2c_encoder_restore(struct drm_encoder *encoder) { - get_slave_funcs(encoder)->restore(encoder); + get_encoder_i2c_funcs(encoder)->restore(encoder); } -EXPORT_SYMBOL(drm_i2c_encoder_restore); diff --git a/drivers/gpu/drm/nouveau/dispnv04/tvnv04.c b/drivers/gpu/drm/no= uveau/dispnv04/tvnv04.c index 67f3e0ac0e109b223ca8ec4ddc4e688247373b2e..0ce369d7b773ac3753fe907acde= e3b402644cc0e 100644 --- a/drivers/gpu/drm/nouveau/dispnv04/tvnv04.c +++ b/drivers/gpu/drm/nouveau/dispnv04/tvnv04.c @@ -99,7 +99,7 @@ static void nv04_tv_dpms(struct drm_encoder *encoder, int= mode) =20 NVWriteRAMDAC(dev, 0, NV_PRAMDAC_PLL_COEFF_SELECT, state->pllsel); =20 - get_slave_funcs(encoder)->dpms(encoder, mode); + get_encoder_i2c_funcs(encoder)->dpms(encoder, mode); } =20 static void nv04_tv_bind(struct drm_device *dev, int head, bool bind) @@ -158,7 +158,7 @@ static void nv04_tv_mode_set(struct drm_encoder *encode= r, regp->tv_vskew =3D 1; regp->tv_vsync_delay =3D 1; =20 - get_slave_funcs(encoder)->mode_set(encoder, mode, adjusted_mode); + get_encoder_i2c_funcs(encoder)->mode_set(encoder, mode, adjusted_mode); } =20 static void nv04_tv_commit(struct drm_encoder *encoder) @@ -178,7 +178,7 @@ static void nv04_tv_commit(struct drm_encoder *encoder) =20 static void nv04_tv_destroy(struct drm_encoder *encoder) { - get_slave_funcs(encoder)->destroy(encoder); + get_encoder_i2c_funcs(encoder)->destroy(encoder); drm_encoder_cleanup(encoder); =20 kfree(encoder->helper_private); @@ -191,11 +191,11 @@ static const struct drm_encoder_funcs nv04_tv_funcs = =3D { =20 static const struct drm_encoder_helper_funcs nv04_tv_helper_funcs =3D { .dpms =3D nv04_tv_dpms, - .mode_fixup =3D drm_i2c_encoder_mode_fixup, + .mode_fixup =3D nouveau_i2c_encoder_mode_fixup, .prepare =3D nv04_tv_prepare, .commit =3D nv04_tv_commit, .mode_set =3D nv04_tv_mode_set, - .detect =3D drm_i2c_encoder_detect, + .detect =3D nouveau_i2c_encoder_detect, }; =20 int @@ -226,8 +226,8 @@ nv04_tv_create(struct drm_connector *connector, struct = dcb_output *entry) NULL); drm_encoder_helper_add(encoder, &nv04_tv_helper_funcs); =20 - nv_encoder->enc_save =3D drm_i2c_encoder_save; - nv_encoder->enc_restore =3D drm_i2c_encoder_restore; + nv_encoder->enc_save =3D nouveau_i2c_encoder_save; + nv_encoder->enc_restore =3D nouveau_i2c_encoder_restore; =20 encoder->possible_crtcs =3D entry->heads; encoder->possible_clones =3D 0; @@ -235,14 +235,14 @@ nv04_tv_create(struct drm_connector *connector, struc= t dcb_output *entry) nv_encoder->or =3D ffs(entry->or) - 1; =20 /* Run the slave-specific initialization */ - ret =3D drm_i2c_encoder_init(dev, to_encoder_slave(encoder), + ret =3D nouveau_i2c_encoder_init(dev, to_encoder_i2c(encoder), &bus->i2c, &nv04_tv_encoder_info[type].dev); if (ret < 0) goto fail_cleanup; =20 /* Attach it to the specified connector. */ - get_slave_funcs(encoder)->create_resources(encoder, connector); + get_encoder_i2c_funcs(encoder)->create_resources(encoder, connector); drm_connector_attach_encoder(connector, encoder); =20 return 0; diff --git a/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c b/drivers/gpu/drm/no= uveau/dispnv04/tvnv17.c index 3ecb101d23e949b753b873d24eec01ad6fe7f5d6..50326691444322f282729e108b4= ab88bd9cbc14a 100644 --- a/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c +++ b/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c @@ -779,7 +779,7 @@ static const struct drm_encoder_helper_funcs nv17_tv_he= lper_funcs =3D { .detect =3D nv17_tv_detect, }; =20 -static const struct drm_encoder_slave_funcs nv17_tv_slave_funcs =3D { +static const struct nouveau_i2c_encoder_funcs nv17_tv_encoder_i2c_funcs = =3D { .get_modes =3D nv17_tv_get_modes, .mode_valid =3D nv17_tv_mode_valid, .create_resources =3D nv17_tv_create_resources, @@ -818,7 +818,7 @@ nv17_tv_create(struct drm_connector *connector, struct = dcb_output *entry) drm_encoder_init(dev, encoder, &nv17_tv_funcs, DRM_MODE_ENCODER_TVDAC, NULL); drm_encoder_helper_add(encoder, &nv17_tv_helper_funcs); - to_encoder_slave(encoder)->slave_funcs =3D &nv17_tv_slave_funcs; + to_encoder_i2c(encoder)->encoder_i2c_funcs =3D &nv17_tv_encoder_i2c_funcs; =20 tv_enc->base.enc_save =3D nv17_tv_save; tv_enc->base.enc_restore =3D nv17_tv_restore; diff --git a/include/drm/drm_encoder_slave.h b/drivers/gpu/drm/nouveau/incl= ude/i2c/encoder_i2c.h similarity index 62% rename from include/drm/drm_encoder_slave.h rename to drivers/gpu/drm/nouveau/include/i2c/encoder_i2c.h index 49172166a164474f43e4afb2eeeb3cde8ae7c61a..f12f44415b79c336e6ecfa163cc= 780a0bcbc5ca5 100644 --- a/include/drm/drm_encoder_slave.h +++ b/drivers/gpu/drm/nouveau/include/i2c/encoder_i2c.h @@ -24,8 +24,8 @@ * */ =20 -#ifndef __DRM_ENCODER_SLAVE_H__ -#define __DRM_ENCODER_SLAVE_H__ +#ifndef __NOUVEAU_ENCODER_I2C_H__ +#define __NOUVEAU_ENCODER_I2C_H__ =20 #include =20 @@ -33,7 +33,7 @@ #include =20 /** - * struct drm_encoder_slave_funcs - Entry points exposed by a slave encode= r driver + * struct nouveau_i2c_encoder_funcs - Entry points exposed by a I2C encode= r driver * * Most of its members are analogous to the function pointers in * &drm_encoder_helper_funcs and they can optionally be used to @@ -41,7 +41,7 @@ * @set_property) will typically be wrapped around and only be called * if the encoder is the currently selected one for the connector. */ -struct drm_encoder_slave_funcs { +struct nouveau_i2c_encoder_funcs { /** * @set_config: Initialize any encoder-specific modesetting parameters. * The meaning of the @params parameter is implementation dependent. It @@ -58,24 +58,23 @@ struct drm_encoder_slave_funcs { void (*destroy)(struct drm_encoder *encoder); =20 /** - * @dpms: Analogous to &drm_encoder_helper_funcs @dpms callback. Wrapped - * by drm_i2c_encoder_dpms(). + * @dpms: Analogous to &drm_encoder_helper_funcs @dpms callback. */ void (*dpms)(struct drm_encoder *encoder, int mode); =20 /** - * @save: Save state. Wrapped by drm_i2c_encoder_save(). + * @save: Save state. Wrapped by nouveau_i2c_encoder_save(). */ void (*save)(struct drm_encoder *encoder); =20 /** - * @restore: Restore state. Wrapped by drm_i2c_encoder_restore(). + * @restore: Restore state. Wrapped by nouveau_i2c_encoder_restore(). */ void (*restore)(struct drm_encoder *encoder); =20 /** * @mode_fixup: Analogous to &drm_encoder_helper_funcs @mode_fixup - * callback. Wrapped by drm_i2c_encoder_mode_fixup(). + * callback. Wrapped by nouveau_i2c_encoder_mode_fixup(). */ bool (*mode_fixup)(struct drm_encoder *encoder, const struct drm_display_mode *mode, @@ -88,7 +87,7 @@ struct drm_encoder_slave_funcs { struct drm_display_mode *mode); /** * @mode_set: Analogous to &drm_encoder_helper_funcs @mode_set - * callback. Wrapped by drm_i2c_encoder_mode_set(). + * callback. */ void (*mode_set)(struct drm_encoder *encoder, struct drm_display_mode *mode, @@ -96,7 +95,7 @@ struct drm_encoder_slave_funcs { =20 /** * @detect: Analogous to &drm_encoder_helper_funcs @detect - * callback. Wrapped by drm_i2c_encoder_detect(). + * callback. Wrapped by nouveau_i2c_encoder_detect(). */ enum drm_connector_status (*detect)(struct drm_encoder *encoder, struct drm_connector *connector); @@ -120,54 +119,59 @@ struct drm_encoder_slave_funcs { }; =20 /** - * struct drm_encoder_slave - Slave encoder struct + * struct nouveau_i2c_encoder - I2C encoder struct * - * A &drm_encoder_slave has two sets of callbacks, @slave_funcs and the + * A &nouveau_i2c_encoder has two sets of callbacks, @encoder_i2c_funcs an= d the * ones in @base. The former are never actually called by the common * CRTC code, it's just a convenience for splitting the encoder * functions in an upper, GPU-specific layer and a (hopefully) * GPU-agnostic lower layer: It's the GPU driver responsibility to - * call the slave methods when appropriate. + * call the nouveau_i2c_encoder methods when appropriate. * - * drm_i2c_encoder_init() provides a way to get an implementation of + * nouveau_i2c_encoder_init() provides a way to get an implementation of * this. */ -struct drm_encoder_slave { +struct nouveau_i2c_encoder { /** * @base: DRM encoder object. */ struct drm_encoder base; =20 /** - * @slave_funcs: Slave encoder callbacks. + * @encoder_i2c_funcs: I2C encoder callbacks. */ - const struct drm_encoder_slave_funcs *slave_funcs; + const struct nouveau_i2c_encoder_funcs *encoder_i2c_funcs; =20 /** - * @slave_priv: Slave encoder private data. + * @encoder_i2c_priv: I2C encoder private data. */ - void *slave_priv; + void *encoder_i2c_priv; =20 /** - * @bus_priv: Bus specific data. + * @i2c_client: corresponding I2C client structure */ - void *bus_priv; + struct i2c_client *i2c_client; }; -#define to_encoder_slave(x) container_of((x), struct drm_encoder_slave, ba= se) +#define to_encoder_i2c(x) container_of((x), struct nouveau_i2c_encoder, ba= se) =20 -int drm_i2c_encoder_init(struct drm_device *dev, - struct drm_encoder_slave *encoder, +int nouveau_i2c_encoder_init(struct drm_device *dev, + struct nouveau_i2c_encoder *encoder, struct i2c_adapter *adap, const struct i2c_board_info *info); =20 +static inline const struct nouveau_i2c_encoder_funcs * +get_encoder_i2c_funcs(struct drm_encoder *enc) +{ + return to_encoder_i2c(enc)->encoder_i2c_funcs; +} =20 /** - * struct drm_i2c_encoder_driver + * struct nouveau_i2c_encoder_driver * * Describes a device driver for an encoder connected to the GPU through a= n I2C * bus. */ -struct drm_i2c_encoder_driver { +struct nouveau_i2c_encoder_driver { /** * @i2c_driver: I2C device driver description. */ @@ -175,67 +179,40 @@ struct drm_i2c_encoder_driver { =20 /** * @encoder_init: Callback to allocate any per-encoder data structures - * and to initialize the @slave_funcs and (optionally) @slave_priv + * and to initialize the @encoder_i2c_funcs and (optionally) @encoder_i2c= _priv * members of @encoder. */ int (*encoder_init)(struct i2c_client *client, struct drm_device *dev, - struct drm_encoder_slave *encoder); + struct nouveau_i2c_encoder *encoder); =20 }; -#define to_drm_i2c_encoder_driver(x) container_of((x), \ - struct drm_i2c_encoder_driver, \ +#define to_nouveau_i2c_encoder_driver(x) container_of((x), \ + struct nouveau_i2c_encoder_driver, \ i2c_driver) =20 /** - * drm_i2c_encoder_get_client - Get the I2C client corresponding to an enc= oder + * nouveau_i2c_encoder_get_client - Get the I2C client corresponding to an= encoder * @encoder: The encoder */ -static inline struct i2c_client *drm_i2c_encoder_get_client(struct drm_enc= oder *encoder) -{ - return (struct i2c_client *)to_encoder_slave(encoder)->bus_priv; -} - -/** - * drm_i2c_encoder_register - Register an I2C encoder driver - * @owner: Module containing the driver. - * @driver: Driver to be registered. - */ -static inline int drm_i2c_encoder_register(struct module *owner, - struct drm_i2c_encoder_driver *driver) +static inline struct i2c_client *nouveau_i2c_encoder_get_client(struct drm= _encoder *encoder) { - return i2c_register_driver(owner, &driver->i2c_driver); + return to_encoder_i2c(encoder)->i2c_client; } =20 -/** - * drm_i2c_encoder_unregister - Unregister an I2C encoder driver - * @driver: Driver to be unregistered. - */ -static inline void drm_i2c_encoder_unregister(struct drm_i2c_encoder_drive= r *driver) -{ - i2c_del_driver(&driver->i2c_driver); -} - -void drm_i2c_encoder_destroy(struct drm_encoder *encoder); - +void nouveau_i2c_encoder_destroy(struct drm_encoder *encoder); =20 /* * Wrapper fxns which can be plugged in to drm_encoder_helper_funcs: */ =20 -void drm_i2c_encoder_dpms(struct drm_encoder *encoder, int mode); -bool drm_i2c_encoder_mode_fixup(struct drm_encoder *encoder, +bool nouveau_i2c_encoder_mode_fixup(struct drm_encoder *encoder, const struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode); -void drm_i2c_encoder_prepare(struct drm_encoder *encoder); -void drm_i2c_encoder_commit(struct drm_encoder *encoder); -void drm_i2c_encoder_mode_set(struct drm_encoder *encoder, - struct drm_display_mode *mode, - struct drm_display_mode *adjusted_mode); -enum drm_connector_status drm_i2c_encoder_detect(struct drm_encoder *encod= er, +enum drm_connector_status nouveau_i2c_encoder_detect(struct drm_encoder *e= ncoder, struct drm_connector *connector); -void drm_i2c_encoder_save(struct drm_encoder *encoder); -void drm_i2c_encoder_restore(struct drm_encoder *encoder); +void nouveau_i2c_encoder_save(struct drm_encoder *encoder); +void nouveau_i2c_encoder_restore(struct drm_encoder *encoder); =20 =20 #endif diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/= nouveau/nouveau_connector.c index 8d5c9c74cbb90927036cee75f173f687617f14ec..c69a57d8d9ec456de510e5c1bb1= 95c9dcc91b595 100644 --- a/drivers/gpu/drm/nouveau/nouveau_connector.c +++ b/drivers/gpu/drm/nouveau/nouveau_connector.c @@ -797,7 +797,7 @@ nouveau_connector_set_property(struct drm_connector *co= nnector, property, value); if (ret) { if (nv_encoder && nv_encoder->dcb->type =3D=3D DCB_OUTPUT_TV) - return get_slave_funcs(encoder)->set_property( + return get_encoder_i2c_funcs(encoder)->set_property( encoder, connector, property, value); return ret; } @@ -1015,7 +1015,7 @@ nouveau_connector_get_modes(struct drm_connector *con= nector) nouveau_connector_detect_depth(connector); =20 if (nv_encoder->dcb->type =3D=3D DCB_OUTPUT_TV) - ret =3D get_slave_funcs(encoder)->get_modes(encoder, connector); + ret =3D get_encoder_i2c_funcs(encoder)->get_modes(encoder, connector); =20 if (nv_connector->type =3D=3D DCB_CONNECTOR_LVDS || nv_connector->type =3D=3D DCB_CONNECTOR_LVDS_SPWG || @@ -1100,7 +1100,7 @@ nouveau_connector_mode_valid(struct drm_connector *co= nnector, max_clock =3D 350000; break; case DCB_OUTPUT_TV: - return get_slave_funcs(encoder)->mode_valid(encoder, mode); + return get_encoder_i2c_funcs(encoder)->mode_valid(encoder, mode); case DCB_OUTPUT_DP: return nv50_dp_mode_valid(nv_encoder, mode, NULL); default: diff --git a/drivers/gpu/drm/nouveau/nouveau_encoder.h b/drivers/gpu/drm/no= uveau/nouveau_encoder.h index 333042fc493faec360b8d9713ab687836b986431..a7d06564f4c46cb766d6907f47d= ed3f8a7f5d33f 100644 --- a/drivers/gpu/drm/nouveau/nouveau_encoder.h +++ b/drivers/gpu/drm/nouveau/nouveau_encoder.h @@ -31,7 +31,8 @@ =20 #include #include -#include + +#include =20 #include "dispnv04/disp.h" =20 @@ -43,7 +44,7 @@ struct nouveau_connector; struct nvkm_i2c_port; =20 struct nouveau_encoder { - struct drm_encoder_slave base; + struct nouveau_i2c_encoder base; =20 struct dcb_output *dcb; struct nvif_outp outp; @@ -137,7 +138,7 @@ find_encoder(struct drm_connector *connector, int type); =20 static inline struct nouveau_encoder *nouveau_encoder(struct drm_encoder *= enc) { - struct drm_encoder_slave *slave =3D to_encoder_slave(enc); + struct nouveau_i2c_encoder *slave =3D to_encoder_i2c(enc); =20 return container_of(slave, struct nouveau_encoder, base); } @@ -147,12 +148,6 @@ static inline struct drm_encoder *to_drm_encoder(struc= t nouveau_encoder *enc) return &enc->base.base; } =20 -static inline const struct drm_encoder_slave_funcs * -get_slave_funcs(struct drm_encoder *enc) -{ - return to_encoder_slave(enc)->slave_funcs; -} - /* nouveau_dp.c */ enum nouveau_dp_status { NOUVEAU_DP_NONE, --=20 2.39.5