From nobody Tue Feb 10 04:17:15 2026 Received: from mail-lf1-f41.google.com (mail-lf1-f41.google.com [209.85.167.41]) (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 146C6132111 for ; Sun, 26 Jan 2025 13:29:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737898157; cv=none; b=RFxG1l0sN9p+euU+Z2doMOMTaWBhp1DG+rxZ4BqT/q6qJJ6d6EjVoo1c0dSIphHQ5kj9Z2yApwDxQXPR7eU/uCb4v5r+r0VhT9fmtCOxWO0+gIecWqp7GXky4qZq7Z1nn+WI0hjf7e3RmQAKcM/IOt7b1tDucerOPqeOwVYHt5A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737898157; c=relaxed/simple; bh=exgmtXH0OIK6SdS9CCUitkYz/uNC3k7yD8vdgvaJocQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YWGFzp4oheGDB4Ogk0c5kaSYzcw2YyIFh7q2o+X3a9k9X415aG8S+jl1DBkXXcz+8NNmo0NToH2jHpslg42vQ//8Tv5oD3H7GPb8gyr1+7W894I13Br2lcNgzW64DX4Fn0JC9uAu52ttqyry9mN7KSLEYUBYdOgc6evFehnR1Vg= 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=Iq6r2Ojg; arc=none smtp.client-ip=209.85.167.41 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="Iq6r2Ojg" Received: by mail-lf1-f41.google.com with SMTP id 2adb3069b0e04-53f22fd6832so3994834e87.1 for ; Sun, 26 Jan 2025 05:29:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1737898153; x=1738502953; 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=d0vao2kszZEOdw8Rw0H4k+cRcCSPFR9JmZje0hGSkB0=; b=Iq6r2OjgRR/Rp/IAcIhU1/s8fJ6SKRStNzv31FNkNclVOsMoIOU1geYVYchwqfBG+z Zi7I2TQwkFY/rYbDjJsuzP8kJjo79Mcku1DbYCL7RF1BapMvPE0og4dEX7bQNWjPrwee 07+yKKDbWX4zcqNp6QyeIIS2lXSnxisYOL35UUFzNXZTLCXj/JU/aMiE9XHL+j7rXSts dJEQMvUFbHlx+mdMGfvG1P+LgSvG8zcckHIv0/ZpWUi9UbT9ilgYWEIj2d+r16XstsAD T7Mrm8l8UDFe9uJEMo/4YcC8FRwJKcrCLi0WDNU4WTd+Z7oxyjFlXuJCj7ecAv3srLrw k4UA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737898153; x=1738502953; 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=d0vao2kszZEOdw8Rw0H4k+cRcCSPFR9JmZje0hGSkB0=; b=IUYyUU5TdyizPES/aU5h9Nhau6CEWNfbNKrWTMgMCfsgnEZDQiZ2VejZ+ryWvi0IrQ emthnZJxquQDHQbzDYwUtBHgzAmnjHBblnsHjIee0itfRv6Dvd5c2S2v05fLfTVmcg2G IjBsT2T8UsMG/LxOXiZUqwUmbieGUuQCRP/DmSNArvoDY978Ck0dFbrgGHfWTmdPg/4r 3rgEU+yGxUhVDRszIohyPpe9rXQ8zNFQFMhtcDQbqM4HFojzuQoVn21y0885bdziVDeE uP6oAqbinSINFBLlJrI1Q2SK0o9bP3eDr6DAhT2Qh8Iy+tXGKH/aPmsuKerAGWedf5NN eCyA== X-Forwarded-Encrypted: i=1; AJvYcCWMTv8dMm/00rgLOD+NeisQgQnU9Ha1w5oAEN8KU6Kgkiu7FCZ7wAsvnAv0m+xlIpGOYYaL413Z2CvkFWA=@vger.kernel.org X-Gm-Message-State: AOJu0YxYIwNrO/AxCTiQ4vKesiYHmvg6cdPzXzCpLWlVs5Z/SxIjuqhU +qYXrhGHlnBlQOv3xejFYf90qReVSayaezc3tuvvxG0NzF6ZhIIjCaMjLVTrkN4dY0b8svYBTip dMBg= X-Gm-Gg: ASbGncs1l+w0T7U2ZOZjMsDCsJY8HlVyb1B5NYakWFXHdL05cTVX60GwDrCYhrP6ov5 xXVDPLXf36i235hvYSoq70M9fceVztrVxeLGv7TZQ1xCrQjmH7bxwqDD+L+syafwRSVQYkML7Mr bKPYRZn76uSYYZ5vRlK6sheeABYSobaAd0LH+BAaNURk1zGadR17MBOlzIjgcCaoMJnATDQVmzu nBFqs0oP2hzK9d8OvGL6a/YGBlv0VD/ZrVOML5c/mb84qTWSwQh+MiKqCFkgi49L85f9wIw1+dt 85yREesp3d1+ X-Google-Smtp-Source: AGHT+IGHXX6eQwoZuNh8Wk+TR7mHmi2RdsLJwtN5r6hdBZJ8DQ89NZtSCk1G2dpZieRiC9k4AVWh8w== X-Received: by 2002:a05:6512:b94:b0:542:7217:361a with SMTP id 2adb3069b0e04-5439c22c3bemr11810436e87.10.1737898153055; Sun, 26 Jan 2025 05:29:13 -0800 (PST) Received: from umbar.lan ([192.130.178.90]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-543cbbd4cf8sm770488e87.201.2025.01.26.05.29.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 26 Jan 2025 05:29:11 -0800 (PST) From: Dmitry Baryshkov Date: Sun, 26 Jan 2025 15:29:06 +0200 Subject: [PATCH v3 01/10] drm/connector: add CEC-related fields 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: <20250126-drm-hdmi-connector-cec-v3-1-5b5b2d4956da@linaro.org> References: <20250126-drm-hdmi-connector-cec-v3-0-5b5b2d4956da@linaro.org> In-Reply-To: <20250126-drm-hdmi-connector-cec-v3-0-5b5b2d4956da@linaro.org> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Dave Stevenson , =?utf-8?q?Ma=C3=ADra_Canal?= , Raspberry Pi Kernel Maintenance , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4115; i=dmitry.baryshkov@linaro.org; h=from:subject:message-id; bh=exgmtXH0OIK6SdS9CCUitkYz/uNC3k7yD8vdgvaJocQ=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBnljijuKtQNpzaqioCpIWl2z6NyiaPvixrODXyD 1u4ZXv5VxuJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCZ5Y4owAKCRCLPIo+Aiko 1b5vCACKsF4hItIWVpOk1JfLTGh8G41DIxMQamsfYrT1qdtn3d5VVVXpzRZirdrQqwC7/McDgBm vEIbBpCSl9AtzlRcUWsH2DkwxT58Dd8qo4J1ETnwScI03fs/vh4G8raZXfnb6+BJxkHp0ZZuuDK 0FI18HdZHNyqSdhN+BjailOTRJg4JLTQzHkPa3hDj8xG+iplikXvS4YJJEqoATiVdpbyKNGLSXZ MQ7swXp9NNbTKEfCuKPZorEkxeo9UjHdKpbcxgj8qquImsFEttRlPEs2b4okP7hN+XVKxLO69mu Ptyx97RCkoafOZjhlHRb3f64euUQa4fn1VuV+30vT7sy+/hS X-Developer-Key: i=dmitry.baryshkov@linaro.org; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A As a preparation to adding HDMI CEC helper code, add CEC-related fields to the struct drm_connector. Include both cec_adapter and cec_notifier, allowing drivers to select which one to use. The unregister callback is provided to let drivers unregister CEC-related data in a generic way without polluting drm_connector.c with dependencies on the CEC functions. Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/drm_connector.c | 13 ++++++++++++ include/drm/drm_connector.h | 44 +++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 57 insertions(+) diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connecto= r.c index 1383fa9fff9bcf31488453e209a36c6fe97be2f1..fffb718b09eaaac200e6abc7524= bbfe98c4741f4 100644 --- a/drivers/gpu/drm/drm_connector.c +++ b/drivers/gpu/drm/drm_connector.c @@ -279,6 +279,7 @@ static int drm_connector_init_only(struct drm_device *d= ev, INIT_LIST_HEAD(&connector->probed_modes); INIT_LIST_HEAD(&connector->modes); mutex_init(&connector->mutex); + mutex_init(&connector->cec.mutex); mutex_init(&connector->eld_mutex); mutex_init(&connector->edid_override_mutex); mutex_init(&connector->hdmi.infoframes.lock); @@ -698,6 +699,16 @@ static void drm_mode_remove(struct drm_connector *conn= ector, drm_mode_destroy(connector->dev, mode); } =20 +static void drm_connector_cec_unregister(struct drm_connector *connector) +{ + mutex_lock(&connector->cec.mutex); + + if (connector->cec.funcs->unregister) + connector->cec.funcs->unregister(connector); + + mutex_unlock(&connector->cec.mutex); +} + /** * drm_connector_cleanup - cleans up an initialised connector * @connector: connector to cleanup @@ -718,6 +729,8 @@ void drm_connector_cleanup(struct drm_connector *connec= tor) =20 platform_device_unregister(connector->hdmi_audio.codec_pdev); =20 + drm_connector_cec_unregister(connector); + if (connector->privacy_screen) { drm_privacy_screen_put(connector->privacy_screen); connector->privacy_screen =3D NULL; diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index f13d597370a30dc1b14c630ee00145256052ba56..6da840673b1209c84bbc396643c= 6033679a7ec74 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -46,6 +46,7 @@ struct drm_property_blob; struct drm_printer; struct drm_privacy_screen; struct drm_edid; +struct cec_adapter; struct edid; struct hdmi_codec_daifmt; struct hdmi_codec_params; @@ -1191,6 +1192,19 @@ struct drm_connector_hdmi_audio_funcs { bool enable, int direction); }; =20 +/** + * struct drm_connector_cec_funcs - drm_hdmi_connector control functions + */ +struct drm_connector_cec_funcs { + /** + * @adap_unregister: unregister CEC adapter / notifier. + * + * The callback to unregister CEC adapter or notifier, so that the core + * DRM layer doesn't depend on the CEC_CORE. + */ + void (*unregister)(struct drm_connector *connector); +}; + /** * struct drm_connector_hdmi_funcs - drm_hdmi_connector control functions */ @@ -1832,6 +1846,31 @@ struct drm_connector_hdmi { } infoframes; }; =20 +/** + * struct drm_connector_cec - DRM Connector CEC-related structure + */ +struct drm_connector_cec { + /** + * @mutex: protects all CEC-related fields + */ + struct mutex mutex; + + /** + * @adap: CEC adapter corresponding to the DRM connector. + */ + struct cec_adapter *adapter; + + /** + * @notifier: CEC notifier corresponding to the DRM connector. + */ + struct cec_notifier *notifier; + + /** + * @funcs: CEC Control Functions + */ + const struct drm_connector_cec_funcs *funcs; +}; + /** * struct drm_connector - central DRM connector control structure * @@ -2253,6 +2292,11 @@ struct drm_connector { * @hdmi_audio: HDMI codec properties and non-DRM state. */ struct drm_connector_hdmi_audio hdmi_audio; + + /** + * @cec: CEC-related data. + */ + struct drm_connector_cec cec; }; =20 #define obj_to_connector(x) container_of(x, struct drm_connector, base) --=20 2.39.5