From nobody Wed Dec 17 16:03:19 2025 Received: from mail-lf1-f42.google.com (mail-lf1-f42.google.com [209.85.167.42]) (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 45B79194A66 for ; Sat, 14 Dec 2024 15:35:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1734190554; cv=none; b=LXJpGIkmJYpc5jxj0sLS0gapR8ddWx1ReV3Xw9CYGaFmHv7SGT9TwUnkBiMHObDXgbQraXauVVwWaJY4guK8vCcDNK1eLZKw+zTtP/jHJvMC9RlrNNaqSZ2qe0Bxuca9UZtWcp+1XRlynNte+L+yulFK0iNuR1W6q+jue716HF8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1734190554; c=relaxed/simple; bh=V6ybU/ZryBFo9P9r00mNGI18e/mMgAW9p72+Pg5jFvU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KoSVS6pjCKz5qcxk/gX7S0WEQAbD/D5fuJvi26999D1bbiBZmXsM8sEiStEgo2m7tZvuEqbiMxlu21ATUY881QY04qMMiuSzlCB+APLqrjTMoDqPyamprLKmdUWP3C9zP/2/5t+QUETAeRCGDINSi4P8qQaQGtZXywZkN/Duim0= 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=KDxhaJKv; arc=none smtp.client-ip=209.85.167.42 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="KDxhaJKv" Received: by mail-lf1-f42.google.com with SMTP id 2adb3069b0e04-5401bd6cdb4so2772234e87.2 for ; Sat, 14 Dec 2024 07:35:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1734190550; x=1734795350; 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=KZPMimRDyOPmrHk2P3ntOObHSO5fF1Ty+Zfxp6w4+z4=; b=KDxhaJKv3X2kH9hA8ItsQn2kn571Bwz+ZLGwJ3SxJJJ3bJ+Wuidm2L4ByGPbXJLge9 UQkFOe4NXtZ3NlKsofwjeUUzC78OcTIA1v3eEA0gn3DVsN89vvDA81pEmhJi10G3538Y 3SgTxKa+1UI04+jDpY10+xZsIzzhYIe36/JnnwTX0rTWX46jGd5IxXCC9xDcXNlI+BeE RMAiM08X0gABCPvfJJ8ObgvT872K64oNsTfldyaBNaTvlLy0rYvetsk8Jva2f0Mjocr+ vRSf1HUzH4PpavVpPGtzEf7bWbJGIgngYGCEtudU2ewj/zYY5qGhSNyQPPgnKqQagJ5G 4arQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734190550; x=1734795350; 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=KZPMimRDyOPmrHk2P3ntOObHSO5fF1Ty+Zfxp6w4+z4=; b=f3G6FHHAtmmJeoCsg3z1RpEAK0VC3ULihvsKo1zWIdYUimlIp1q73uOghc17qqU7gH 15jeRQvH0ivB9yPldabNTAa4DdfqZsrxdYydKhqedn2lOybPIbM8ugKly9U9Iew222qM BEH6XWRjV9tgogxU+RGj3ApFsQqkCKRBzOp0XcmObpXeOppxyhL2557ena18d73cSmSy H29qZ5m2O6TmZasGAFpET2K2N3fAvC2tU8/k3v0ISvo5jxvFqPmVqKSPwUxbcn/DCIW3 nVFeX7f9VD8L2YzwiRdqh//LjTeqDiaafrzd3gDoE+CEIMob5GI1qD1dkfSUhW6TemMC zNVg== X-Forwarded-Encrypted: i=1; AJvYcCXmoxL7FZuoh1xmiG0TArp/fNILfsEPq/XuPOCN79vrUXKPXnEG50ogrdmLoVGCEE4QllBpqBTzTaFur30=@vger.kernel.org X-Gm-Message-State: AOJu0Yza8pcpzw0OyPKbnCCIIwTuFbyJ3BKr2rEUWVwrcU6lE0if9d9o dofggO0VWAhGeP/C8dUjFcrQ0qGYPJh7KMDwZgVDIgJowGRMgotTACJ6PRZjoxU= X-Gm-Gg: ASbGncvqA1E5c171/6r35Ivhrn70YpCZ3tb1uZwLfYfr6oEDle0pES91eWNuSFiJ4JR EG48hudgc0PtDUbMz+5ZikzeUtbCZEdN7EKOYJUV7Ye07XXzCCHj0muFRLnWqqKNB1RX6WMLD7H Q0BHwa6KJLk9LONcUs5RgnPtAakMH/EDrc8dw6tqV9fGg8KHl2cEoGzPc/bpEb4liMxgNqmI1MK bdtAfiEzPvF15/UY3UYMAl4Mh1rx6ywxR89TijMqy9fo5g+3CQWcieniw4832kU X-Google-Smtp-Source: AGHT+IF4824okURcZ8IVtc3fuOUyKMzTtnxfMvIh8EwCwuYsWttCdeE0CtzcguYMExNjzfyDwjVYrA== X-Received: by 2002:a05:6512:1388:b0:53e:38c3:5f7e with SMTP id 2adb3069b0e04-54090595789mr1997987e87.45.1734190550096; Sat, 14 Dec 2024 07:35:50 -0800 (PST) Received: from umbar.lan ([192.130.178.90]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-54120c1357csm249821e87.182.2024.12.14.07.35.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 14 Dec 2024 07:35:48 -0800 (PST) From: Dmitry Baryshkov Date: Sat, 14 Dec 2024 17:35:44 +0200 Subject: [PATCH 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: <20241214-nouveau-encoder-slave-v1-1-beda767472e3@linaro.org> References: <20241214-nouveau-encoder-slave-v1-0-beda767472e3@linaro.org> In-Reply-To: <20241214-nouveau-encoder-slave-v1-0-beda767472e3@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=7526; i=dmitry.baryshkov@linaro.org; h=from:subject:message-id; bh=V6ybU/ZryBFo9P9r00mNGI18e/mMgAW9p72+Pg5jFvU=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBnXaXQfJfNKmGcRWBMaBaTs5fhcrn/7EEVSqTOh mWArJPEz5aJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCZ12l0AAKCRCLPIo+Aiko 1XcjB/4g21FLQVlpzajzWFU60jHrhYQ2Drihbj+Mr/CQq/mB8WLU874QL53oHKDEfI+k64lEob/ kqpK8zQTkMZHriuXk1zYy7xEfoCKksXLPnUr+M8zpE4a5jn43ERIFVndwmWr+8DRF8oC7UnLdJc b8FSB4ac9CTmgsHq6QaX66cgStNGsq+vVus7P2cDkzNcNVI5hSIK7BvziWJyQWBjy9IA8nuaFok bB041vxZSDy0mY2lYWBSdNLExmLNi9yN/SZSom+PWKOAnWlsWQp7LHkffIF7J4nzrTHZfIc4lRI VCBqCaYBmh779C5XYkNEH/dIQxC/6rFdwgXyqzgfEWi+bMsq 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 --- 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 +- .../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 | 3 ++- .../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 | 0 .../gpu/drm/nouveau/include}/i2c/sil164.h | 0 12 files changed, 28 insertions(+), 28 deletions(-) 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/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..c66ca7f525034bb9fd113c5edf1= 0c371a01c3c79 100644 --- a/drivers/gpu/drm/i2c/ch7006_priv.h +++ b/drivers/gpu/drm/nouveau/dispnv04/i2c/ch7006_priv.h @@ -29,7 +29,8 @@ =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 100% rename from include/drm/i2c/ch7006.h rename to drivers/gpu/drm/nouveau/include/i2c/ch7006.h diff --git a/include/drm/i2c/sil164.h b/drivers/gpu/drm/nouveau/include/i2c= /sil164.h similarity index 100% rename from include/drm/i2c/sil164.h rename to drivers/gpu/drm/nouveau/include/i2c/sil164.h --=20 2.39.5 From nobody Wed Dec 17 16:03:19 2025 Received: from mail-lj1-f180.google.com (mail-lj1-f180.google.com [209.85.208.180]) (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 4CC72199384 for ; Sat, 14 Dec 2024 15:35:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1734190556; cv=none; b=pJxkE69H8GSwcBbylI/0NlJtXheVMVqNNEJ3l29Hn/klKjzHBsr6WzeAmu/NzDVwQpOAjIVLQxrmjM0aMJb5Ytx7LeF9Xi24sYl1uRg2IhNIH/d6PhVt8HteMgZgGn8IrXK430aXjACGX8JowVigAEHnexscXiA6KA4B6yJBMMM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1734190556; c=relaxed/simple; bh=SbJpqx8cWSCRO+4WIbFuwYoplf+qEvXkAxjedcoOfyo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=aywmEmcqPaKLzX7jH8AmS2TRFzQtPr48dKaPycawufiLe/hRqb9qxLDGK90DrtEDzs54d4s4L/FogKKZaaYexU/JfYL36GM18Fybu1K6UPdNCzQ653rlFENY0RtzOvMaTmsKhkksHi7TmAOTKPrzKbI9LT20bXSFfOEQm+a6Dm0= 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=kg4G9KZP; arc=none smtp.client-ip=209.85.208.180 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="kg4G9KZP" Received: by mail-lj1-f180.google.com with SMTP id 38308e7fff4ca-2f7657f9f62so22858131fa.3 for ; Sat, 14 Dec 2024 07:35:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1734190551; x=1734795351; 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=wgW3GjAJyfQ0R134mwbX+xqnCYBQ48ayyrmVJT5kFT0=; b=kg4G9KZPeXaugLGWg30eZbmsQ2PTPmJ+De7HTOpIWP9ApYusdGSPOSrwAeQvAiK7Bi 3+PLQS425NqJo9AwOHbDm25IjV3e4EQnub+hGs9HJHsCOne4dhp/bdq52oceOCFqQ1wl 4lW2IOI3sods1ei+kFVhm9fvn7owOxPkUJwsMkJS07wxtCRao+veI/XatAJ16Pn6qeYd Tom0m3KmFcMP6rXXU3LAZg/60SsupYiYNGIzGRY+4eujUWyz9AO8Rlqn7StyfIANJbKR Un6iJJiO59CwSjKcb6bqJixAcn+Xslz+7j1hTCvaP4GsSbJuoAT6TnTd5NDJ3+/m3XXy Qxeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734190551; x=1734795351; 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=wgW3GjAJyfQ0R134mwbX+xqnCYBQ48ayyrmVJT5kFT0=; b=mshRITmCHM+P9Kw7VWtVFT8Cq5N+/zMq0rqccoMkUe+zRg3WDn+rFT3ucmBw1IwHl5 PuvE5cozsbImdadcUS4CtnbxF80qj+Zz1c66MUgiwew80i8U5vS2biSp0CKHeAicnGPM Uocz73AkKsBLeAWWLJhpkbzEpOoGlbvbyyjDaMeQbG6mdAMuBfRgpfPxKdLLHqfj1jtW kkuo69mBi6u4BfCxN2/8ItuBwrZCQHawfHG6WD5pFnMiVVKC0OtQrwlOQTZVi5J2YuX4 17j/BbYsuEK3Xx9KquG67rVRTwj0ZFLN7oJEIg36jrQDwE4wk9m0o4w6rbHCAzYPBVVr vXJA== X-Forwarded-Encrypted: i=1; AJvYcCXU92NDiOGV53rrI5nfdn+FkW4eomGYbbLI5J8tDT9omPxNGFzHtCy+4cf9dwlNSvGNCukyQU9zXURvhNs=@vger.kernel.org X-Gm-Message-State: AOJu0YzCoYxx2CI2p9Ho1FmcKl50UmJFdeIJTho4qeIb8p23211BRftt 0YGHMJgQjDn+5i6tNhSkI1d/qOh4jyKiMyz7ff1boRoYTsL455iudm/9MgkGgdM= X-Gm-Gg: ASbGncs7b4iFblpJiyAGPLE5mUA2xvGLEesmozKZ2a7akmfwNOah7bDwj3q6tDjm5Vk zh/m+eIQhvok936gjstyxYiOgpnPGVwuuW8omAxqjni1RAK0X+LH+tBhCHJpKA/HjdgE3HhZKQ7 nSR1AVzZnIzchTGcFWwLPg/8WMEbhrLZErnbcU3aM+7q/1FHx6nVj3IBlz6ILYgwuxMn42nTesz 2cM8kwCxWraU7CKKYXkMRMAM8Kr8GCLhZ8AsUEP2dakqkhFfpGTNFOxyKE9lfhW X-Google-Smtp-Source: AGHT+IH8Z6OIHaIF+k4J4wTPk9PzCIKvoXOs/j47dEQqhAtaXuaI+kYM/yk7VwTa87OugMNen7R3gQ== X-Received: by 2002:a05:6512:1096:b0:540:21a5:992b with SMTP id 2adb3069b0e04-54099b72a2dmr2361028e87.51.1734190551158; Sat, 14 Dec 2024 07:35:51 -0800 (PST) Received: from umbar.lan ([192.130.178.90]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-54120c1357csm249821e87.182.2024.12.14.07.35.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 14 Dec 2024 07:35:50 -0800 (PST) From: Dmitry Baryshkov Date: Sat, 14 Dec 2024 17:35:45 +0200 Subject: [PATCH 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: <20241214-nouveau-encoder-slave-v1-2-beda767472e3@linaro.org> References: <20241214-nouveau-encoder-slave-v1-0-beda767472e3@linaro.org> In-Reply-To: <20241214-nouveau-encoder-slave-v1-0-beda767472e3@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=38547; i=dmitry.baryshkov@linaro.org; h=from:subject:message-id; bh=SbJpqx8cWSCRO+4WIbFuwYoplf+qEvXkAxjedcoOfyo=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBnXaXQM1V1LlpWXTxmIo1wU7ze7X+DBeqmISNeS g+zFHo+3u+JATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCZ12l0AAKCRCLPIo+Aiko 1abKB/9bvspTk7vIBnTg7b8Hxisp04XG2i2ZHT1PHGzVfbssGDlXeGyWzAwxqpJtFGJsvtBwm6B Gb7zF1o5+ktGlMx+EW9B8Ks58BnV+qUhDSqbl3Sq5ImXw/UNkiLWphUT0TotFr7A5TGU3707zoL xm4IINgRRAAOjsCVng/DcwQyBLCxqtRlTpwPRWN6aRIiarx2M5QFL6ZxaVS7kUp8jxvbUyOrckv siQctO7eh8v9NxbLX0OhlVoymtt1+8Yb9bqhoNZFkyS03Yi28aKai3zuTgujJs+vwYZnCi7cBPi JmqG2ZYIEMOMk9G8jVrcYqixcW2G9ZNfVi5ZUVSbkCtWtSDR 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 | 108 ++++++++---------= ---- drivers/gpu/drm/nouveau/nouveau_connector.c | 6 +- drivers/gpu/drm/nouveau/nouveau_encoder.h | 13 +-- 13 files changed, 127 insertions(+), 191 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 c66ca7f525034bb9fd113c5edf10c371a01c3c79..a62387ae3af11163cbd64317686= a8be5a4f4011c 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 __DRM_I2C_CH7006_PRIV_H__ #define __DRM_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..1edd37bcd7da6eb467b87309298= 2d1af26cb1a45 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 @@ -59,23 +59,23 @@ struct drm_encoder_slave_funcs { =20 /** * @dpms: Analogous to &drm_encoder_helper_funcs @dpms callback. Wrapped - * by drm_i2c_encoder_dpms(). + * by nouveau_i2c_encoder_dpms(). */ 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 +88,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. Wrapped by nouveau_i2c_encoder_mode_set(). */ void (*mode_set)(struct drm_encoder *encoder, struct drm_display_mode *mode, @@ -96,7 +96,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 +120,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 +180,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