pinebookpro-kernel: update to 6.1.9
Adopt. Bump to new LTS branch. Remove merged or obsolete DTS patches. Remove merged gamma LUT patchset. Remove hacky USB Type-C alternate mode DisplayPort patchset. Use zstd to compress modules
This commit is contained in:
parent
04e63668d7
commit
ba9f557902
File diff suppressed because it is too large
Load Diff
|
@ -4,4 +4,4 @@ mkdir -p usr/lib/debug/${mod%/*}
|
|||
$OBJCOPY --only-keep-debug --compress-debug-sections $mod usr/lib/debug/$mod
|
||||
$OBJCOPY --add-gnu-debuglink=${DESTDIR}/usr/lib/debug/$mod $mod
|
||||
/usr/bin/$STRIP --strip-debug $mod
|
||||
gzip -9 $mod
|
||||
zstd -15 --rm -f -q $mod
|
||||
|
|
|
@ -1,25 +0,0 @@
|
|||
From aae3dd4dab93d7f3c8428c3b8d01982959e15bcc Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Schramm <t.schramm@manjaro.org>
|
||||
Date: Thu, 28 May 2020 14:39:55 +0200
|
||||
Subject: [PATCH 7/8] arm64: dts: rockchip: enable earlycon
|
||||
|
||||
Signed-off-by: Tobias Schramm <t.schramm@manjaro.org>
|
||||
---
|
||||
arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts b/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts
|
||||
index 06d48338c836..c1aad8f88b8a 100644
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts
|
||||
@@ -19,6 +19,7 @@ / {
|
||||
compatible = "pine64,pinebook-pro", "rockchip,rk3399";
|
||||
|
||||
chosen {
|
||||
+ bootargs = "earlycon=uart8250,mmio32,0xff1a0000";
|
||||
stdout-path = "serial2:1500000n8";
|
||||
};
|
||||
|
||||
--
|
||||
2.29.2
|
||||
|
|
@ -1,31 +0,0 @@
|
|||
From 1240368b81839ae890d9e0f40a663128fbc56982 Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Schramm <t.schramm@manjaro.org>
|
||||
Date: Sat, 6 Jun 2020 23:45:10 +0200
|
||||
Subject: [PATCH 8/8] arm64: dts: rockchip: setup USB type c port as dual data
|
||||
role
|
||||
|
||||
Some chargers try to put the charged device into device data role.
|
||||
Before this commit this condition caused the tcpm state machine to
|
||||
issue a hard reset due to a capability missmatch.
|
||||
|
||||
Signed-off-by: Tobias Schramm <t.schramm@manjaro.org>
|
||||
---
|
||||
arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts b/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts
|
||||
index c1aad8f88b8a..45a870ce5d22 100644
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts
|
||||
@@ -706,7 +706,7 @@ fusb0: fusb30x@22 {
|
||||
|
||||
connector {
|
||||
compatible = "usb-c-connector";
|
||||
- data-role = "host";
|
||||
+ data-role = "dual";
|
||||
label = "USB-C";
|
||||
op-sink-microwatt = <1000000>;
|
||||
power-role = "dual";
|
||||
--
|
||||
2.29.2
|
||||
|
|
@ -1,667 +0,0 @@
|
|||
Source: https://patchwork.kernel.org/project/linux-rockchip/patch/20211019215843.42718-2-sigmaris@gmail.com/
|
||||
Upstream: no
|
||||
|
||||
From patchwork Tue Oct 19 21:58:41 2021
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: 7bit
|
||||
X-Patchwork-Submitter: Hugh Cole-Baker <sigmaris@gmail.com>
|
||||
X-Patchwork-Id: 12571177
|
||||
Return-Path:
|
||||
<SRS0=otL+=PH=lists.infradead.org=linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@kernel.org>
|
||||
X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on
|
||||
aws-us-west-2-korg-lkml-1.web.codeaurora.org
|
||||
Received: from mail.kernel.org (mail.kernel.org [198.145.29.99])
|
||||
by smtp.lore.kernel.org (Postfix) with ESMTP id EF2BCC43217
|
||||
for <linux-rockchip@archiver.kernel.org>;
|
||||
Tue, 19 Oct 2021 21:59:16 +0000 (UTC)
|
||||
Received: from bombadil.infradead.org (bombadil.infradead.org
|
||||
[198.137.202.133])
|
||||
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
|
||||
(No client certificate requested)
|
||||
by mail.kernel.org (Postfix) with ESMTPS id BADCF60FDA
|
||||
for <linux-rockchip@archiver.kernel.org>;
|
||||
Tue, 19 Oct 2021 21:59:16 +0000 (UTC)
|
||||
DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org BADCF60FDA
|
||||
Authentication-Results: mail.kernel.org;
|
||||
dmarc=fail (p=none dis=none) header.from=gmail.com
|
||||
Authentication-Results: mail.kernel.org;
|
||||
spf=none smtp.mailfrom=lists.infradead.org
|
||||
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
|
||||
d=lists.infradead.org; s=bombadil.20210309; h=Sender:
|
||||
Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post:
|
||||
List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:
|
||||
Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description:
|
||||
Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:
|
||||
List-Owner; bh=EqcGhTXNHxLjs4GeNeyEmq5LQRaq+Myjxe15Omdo3zg=; b=WipF8awV3GyV0e
|
||||
kgWAQIrKxNxmI+xZhPVMfYQrDKseHUh5l4MTVbElfsNAZnP6UY9y2RciAwS1T6QE6g7cWBToK+kSd
|
||||
tgP1fTozzC6ykiWD4rvkUEDsthGCT1OC/xPjfMIBPVQk1TDVRY40iKHnmGz9kCRWsa09nkFDeslMW
|
||||
ZoAV7QxTXvFpqflmFTe887J37+PxeSsqAtjUZwjrdTip6oybHVhd9q6eVrVPNz0c3EzopeFx/kOOm
|
||||
Wvt2AWng+UCxTZoTZugNQBOBfOsv/QQgLfg0q9V6kNHycJtcevP6GsyYGZ+0LabMaqckOh9RK7O4x
|
||||
Co47MeIsJRvrSAP295ng==;
|
||||
Received: from localhost ([::1] helo=bombadil.infradead.org)
|
||||
by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux))
|
||||
id 1mcx8a-002irO-35; Tue, 19 Oct 2021 21:59:12 +0000
|
||||
Received: from mail-wm1-x32e.google.com ([2a00:1450:4864:20::32e])
|
||||
by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux))
|
||||
id 1mcx8J-002ihZ-Mf; Tue, 19 Oct 2021 21:58:57 +0000
|
||||
Received: by mail-wm1-x32e.google.com with SMTP id
|
||||
z77-20020a1c7e50000000b0030db7b70b6bso5870939wmc.1;
|
||||
Tue, 19 Oct 2021 14:58:54 -0700 (PDT)
|
||||
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112;
|
||||
h=from:to:cc:subject:date:message-id:in-reply-to:references
|
||||
:mime-version:content-transfer-encoding;
|
||||
bh=Ws77StmGP8OqTFmlkQUufLolF3RfQn4nI0VMLqEcX8s=;
|
||||
b=dGZQ8Q3orJrTzIZ4Gs9rn9dr9PAu9PCjkmUK5Lr6UkhpNzYMcMd3020nPpiG6Sqqpy
|
||||
iLRrSxDSXQ7kSYllOPk2BtvQUGsDdBHD7NGzfb5c2CazkxrvtoLOMJXxZabDfp9dJ33y
|
||||
Nc6l+vslIYyFBqsf5MjBRyT1WWM8BbqdLViNK1jE0RWT9LaZ+QLmNI1goCpLxyjClx5q
|
||||
BHWHbXcWTtSRVC5h7zAbVkeTp5sxkU/JgDJP/NlgaeLhv5fT3vRPg7iwOgHc91kIXC5y
|
||||
UrXcfWoKPWR5+n9loBQ6PqrQbibvW07GBRJNMSRCw72SB0r9diQgYYeWronJNwIqWDmB
|
||||
vHpg==
|
||||
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
|
||||
d=1e100.net; s=20210112;
|
||||
h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
|
||||
:references:mime-version:content-transfer-encoding;
|
||||
bh=Ws77StmGP8OqTFmlkQUufLolF3RfQn4nI0VMLqEcX8s=;
|
||||
b=sxveNLJpyeHIxAc0lLGzMi6dTwpuj5EC2Nq5+ypLTJu+vH83R/yV+whpVpI4yQbNQZ
|
||||
uZfjds+vUF8T/kr+k9v72xQGg5VmtKIm4Al4j8+OdPupdsjUqwymsp40RUA476Pc1yX+
|
||||
DjIRdfFWS6YDp5foNGlLXHefuI4S/4fvGmW53BI7ZoEGldia25la5PCHUspe2VZI4Lgn
|
||||
ZchGK4aT1RbEL0KBThFjSVt4mGon+KeHk8bjW5CI4EUuAAf4/jpppC69B5Cy+myMU/WE
|
||||
Tujt2FKA0MGVxprviL1MniA81m5IEvewvG5eZhO59TnXKq+XY47lK0n5TGag9jEdT2LT
|
||||
fcsg==
|
||||
X-Gm-Message-State: AOAM533AZaW6ntLxS4JBa7mC0O7lveBcmLsJQF9kcmDdUxInS38G3xBI
|
||||
I/e9THNRFXBr5BPQpV/GwEc=
|
||||
X-Google-Smtp-Source:
|
||||
ABdhPJxlnImj2nZarYrS7pboEsot76oZv/a0I0DfIZ6Yn6Tqye98tM7z2na6Er6vRQMM1xsYYiNxOg==
|
||||
X-Received: by 2002:adf:97d0:: with SMTP id
|
||||
t16mr45716779wrb.124.1634680732995;
|
||||
Tue, 19 Oct 2021 14:58:52 -0700 (PDT)
|
||||
Received: from apple.sigmaris.info (ebrouter.sigmaris.info. [82.69.107.165])
|
||||
by smtp.gmail.com with ESMTPSA id s3sm178540wrm.40.2021.10.19.14.58.52
|
||||
(version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);
|
||||
Tue, 19 Oct 2021 14:58:52 -0700 (PDT)
|
||||
From: Hugh Cole-Baker <sigmaris@gmail.com>
|
||||
To: heiko@sntech.de,
|
||||
hjc@rock-chips.com
|
||||
Cc: dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org,
|
||||
linux-arm-kernel@lists.infradead.org, ezequiel@collabora.com,
|
||||
Hugh Cole-Baker <sigmaris@gmail.com>
|
||||
Subject: [PATCH v2 1/3] drm/rockchip: define gamma registers for RK3399
|
||||
Date: Tue, 19 Oct 2021 22:58:41 +0100
|
||||
Message-Id: <20211019215843.42718-2-sigmaris@gmail.com>
|
||||
X-Mailer: git-send-email 2.24.3 (Apple Git-128)
|
||||
In-Reply-To: <20211019215843.42718-1-sigmaris@gmail.com>
|
||||
References: <20211019215843.42718-1-sigmaris@gmail.com>
|
||||
MIME-Version: 1.0
|
||||
X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3
|
||||
X-CRM114-CacheID: sfid-20211019_145855_763472_DAE885F2
|
||||
X-CRM114-Status: GOOD ( 15.39 )
|
||||
X-BeenThere: linux-rockchip@lists.infradead.org
|
||||
X-Mailman-Version: 2.1.34
|
||||
Precedence: list
|
||||
List-Id: Upstream kernel work for Rockchip platforms
|
||||
<linux-rockchip.lists.infradead.org>
|
||||
List-Unsubscribe: <http://lists.infradead.org/mailman/options/linux-rockchip>,
|
||||
<mailto:linux-rockchip-request@lists.infradead.org?subject=unsubscribe>
|
||||
List-Archive: <http://lists.infradead.org/pipermail/linux-rockchip/>
|
||||
List-Post: <mailto:linux-rockchip@lists.infradead.org>
|
||||
List-Help: <mailto:linux-rockchip-request@lists.infradead.org?subject=help>
|
||||
List-Subscribe: <http://lists.infradead.org/mailman/listinfo/linux-rockchip>,
|
||||
<mailto:linux-rockchip-request@lists.infradead.org?subject=subscribe>
|
||||
Sender: "Linux-rockchip" <linux-rockchip-bounces@lists.infradead.org>
|
||||
Errors-To:
|
||||
linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org
|
||||
|
||||
The VOP on RK3399 has a different approach from previous versions for
|
||||
setting a gamma lookup table, using an update_gamma_lut register. As
|
||||
this differs from RK3288, give RK3399 its own set of "common" register
|
||||
definitions.
|
||||
|
||||
Signed-off-by: Hugh Cole-Baker <sigmaris@gmail.com>
|
||||
---
|
||||
|
||||
Changes from v1: no changes in this patch
|
||||
|
||||
drivers/gpu/drm/rockchip/rockchip_drm_vop.h | 2 ++
|
||||
drivers/gpu/drm/rockchip/rockchip_vop_reg.c | 24 +++++++++++++++++++--
|
||||
drivers/gpu/drm/rockchip/rockchip_vop_reg.h | 1 +
|
||||
3 files changed, 25 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h
|
||||
index 857d97cdc67c..14179e89bd21 100644
|
||||
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h
|
||||
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h
|
||||
@@ -99,6 +99,8 @@ struct vop_common {
|
||||
struct vop_reg dither_down_en;
|
||||
struct vop_reg dither_up;
|
||||
struct vop_reg dsp_lut_en;
|
||||
+ struct vop_reg update_gamma_lut;
|
||||
+ struct vop_reg lut_buffer_index;
|
||||
struct vop_reg gate_en;
|
||||
struct vop_reg mmu_en;
|
||||
struct vop_reg out_mode;
|
||||
diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
||||
index ca7cc82125cb..bfb7e130f09b 100644
|
||||
--- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
||||
+++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
||||
@@ -865,6 +865,24 @@ static const struct vop_output rk3399_output = {
|
||||
.mipi_dual_channel_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 3),
|
||||
};
|
||||
|
||||
+static const struct vop_common rk3399_common = {
|
||||
+ .standby = VOP_REG_SYNC(RK3399_SYS_CTRL, 0x1, 22),
|
||||
+ .gate_en = VOP_REG(RK3399_SYS_CTRL, 0x1, 23),
|
||||
+ .mmu_en = VOP_REG(RK3399_SYS_CTRL, 0x1, 20),
|
||||
+ .dither_down_sel = VOP_REG(RK3399_DSP_CTRL1, 0x1, 4),
|
||||
+ .dither_down_mode = VOP_REG(RK3399_DSP_CTRL1, 0x1, 3),
|
||||
+ .dither_down_en = VOP_REG(RK3399_DSP_CTRL1, 0x1, 2),
|
||||
+ .pre_dither_down = VOP_REG(RK3399_DSP_CTRL1, 0x1, 1),
|
||||
+ .dither_up = VOP_REG(RK3399_DSP_CTRL1, 0x1, 6),
|
||||
+ .dsp_lut_en = VOP_REG(RK3399_DSP_CTRL1, 0x1, 0),
|
||||
+ .update_gamma_lut = VOP_REG(RK3399_DSP_CTRL1, 0x1, 7),
|
||||
+ .lut_buffer_index = VOP_REG(RK3399_DBG_POST_REG1, 0x1, 1),
|
||||
+ .data_blank = VOP_REG(RK3399_DSP_CTRL0, 0x1, 19),
|
||||
+ .dsp_blank = VOP_REG(RK3399_DSP_CTRL0, 0x3, 18),
|
||||
+ .out_mode = VOP_REG(RK3399_DSP_CTRL0, 0xf, 0),
|
||||
+ .cfg_done = VOP_REG_SYNC(RK3399_REG_CFG_DONE, 0x1, 0),
|
||||
+};
|
||||
+
|
||||
static const struct vop_yuv2yuv_phy rk3399_yuv2yuv_win01_data = {
|
||||
.y2r_coefficients = {
|
||||
VOP_REG(RK3399_WIN0_YUV2YUV_Y2R + 0, 0xffff, 0),
|
||||
@@ -944,7 +962,7 @@ static const struct vop_data rk3399_vop_big = {
|
||||
.version = VOP_VERSION(3, 5),
|
||||
.feature = VOP_FEATURE_OUTPUT_RGB10,
|
||||
.intr = &rk3366_vop_intr,
|
||||
- .common = &rk3288_common,
|
||||
+ .common = &rk3399_common,
|
||||
.modeset = &rk3288_modeset,
|
||||
.output = &rk3399_output,
|
||||
.afbc = &rk3399_vop_afbc,
|
||||
@@ -952,6 +970,7 @@ static const struct vop_data rk3399_vop_big = {
|
||||
.win = rk3399_vop_win_data,
|
||||
.win_size = ARRAY_SIZE(rk3399_vop_win_data),
|
||||
.win_yuv2yuv = rk3399_vop_big_win_yuv2yuv_data,
|
||||
+ .lut_size = 1024,
|
||||
};
|
||||
|
||||
static const struct vop_win_data rk3399_vop_lit_win_data[] = {
|
||||
@@ -970,13 +989,14 @@ static const struct vop_win_yuv2yuv_data rk3399_vop_lit_win_yuv2yuv_data[] = {
|
||||
static const struct vop_data rk3399_vop_lit = {
|
||||
.version = VOP_VERSION(3, 6),
|
||||
.intr = &rk3366_vop_intr,
|
||||
- .common = &rk3288_common,
|
||||
+ .common = &rk3399_common,
|
||||
.modeset = &rk3288_modeset,
|
||||
.output = &rk3399_output,
|
||||
.misc = &rk3368_misc,
|
||||
.win = rk3399_vop_lit_win_data,
|
||||
.win_size = ARRAY_SIZE(rk3399_vop_lit_win_data),
|
||||
.win_yuv2yuv = rk3399_vop_lit_win_yuv2yuv_data,
|
||||
+ .lut_size = 256,
|
||||
};
|
||||
|
||||
static const struct vop_win_data rk3228_vop_win_data[] = {
|
||||
diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.h b/drivers/gpu/drm/rockchip/rockchip_vop_reg.h
|
||||
index 0b3cd65ba5c1..406e981c75bd 100644
|
||||
--- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.h
|
||||
+++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.h
|
||||
@@ -628,6 +628,7 @@
|
||||
#define RK3399_YUV2YUV_WIN 0x02c0
|
||||
#define RK3399_YUV2YUV_POST 0x02c4
|
||||
#define RK3399_AUTO_GATING_EN 0x02cc
|
||||
+#define RK3399_DBG_POST_REG1 0x036c
|
||||
#define RK3399_WIN0_CSC_COE 0x03a0
|
||||
#define RK3399_WIN1_CSC_COE 0x03c0
|
||||
#define RK3399_WIN2_CSC_COE 0x03e0
|
||||
|
||||
From patchwork Tue Oct 19 21:58:42 2021
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: 7bit
|
||||
X-Patchwork-Submitter: Hugh Cole-Baker <sigmaris@gmail.com>
|
||||
X-Patchwork-Id: 12571179
|
||||
Return-Path:
|
||||
<SRS0=otL+=PH=lists.infradead.org=linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@kernel.org>
|
||||
X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on
|
||||
aws-us-west-2-korg-lkml-1.web.codeaurora.org
|
||||
Received: from mail.kernel.org (mail.kernel.org [198.145.29.99])
|
||||
by smtp.lore.kernel.org (Postfix) with ESMTP id 85B47C433F5
|
||||
for <linux-rockchip@archiver.kernel.org>;
|
||||
Tue, 19 Oct 2021 21:59:33 +0000 (UTC)
|
||||
Received: from bombadil.infradead.org (bombadil.infradead.org
|
||||
[198.137.202.133])
|
||||
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
|
||||
(No client certificate requested)
|
||||
by mail.kernel.org (Postfix) with ESMTPS id 595856113D
|
||||
for <linux-rockchip@archiver.kernel.org>;
|
||||
Tue, 19 Oct 2021 21:59:33 +0000 (UTC)
|
||||
DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 595856113D
|
||||
Authentication-Results: mail.kernel.org;
|
||||
dmarc=fail (p=none dis=none) header.from=gmail.com
|
||||
Authentication-Results: mail.kernel.org;
|
||||
spf=none smtp.mailfrom=lists.infradead.org
|
||||
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
|
||||
d=lists.infradead.org; s=bombadil.20210309; h=Sender:
|
||||
Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post:
|
||||
List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:
|
||||
Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description:
|
||||
Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:
|
||||
List-Owner; bh=tHyvTqRKxrtKIbj34MYknHzX+yLAnQqh47VxQue4tCk=; b=jZnpTJ3DoyBMFy
|
||||
53BFSj7Q2F7I6UvGzGrARdwtdy/GdZOQriN9rtqp0Jw6BHj/n2ercvi7m71vOUSovvx5MTV4NmCHa
|
||||
UDHYDeQJSdRDxwq86bhU3kAZWb4EPkIrrXqZ0uEhA0f5w7dEwSw3r+3PpE15K6XFrVytUJNtcOxmZ
|
||||
LUmJC4Q/ngOkxLB5um91h4YwdKXvfQkioiuaDwY49q0TzExLe5l9Ujt3HYxIvs1DcKJkbP+PtKO5W
|
||||
K7osyX7sJvMa1NDDZf3Od/aDgOx0wAeiSetnxvN5vEdcirsNTfBcizUMdSrJMJOX+6rl1qKXe+MDu
|
||||
1q72eLFjWmMphhJFlPGg==;
|
||||
Received: from localhost ([::1] helo=bombadil.infradead.org)
|
||||
by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux))
|
||||
id 1mcx8r-002j2z-88; Tue, 19 Oct 2021 21:59:29 +0000
|
||||
Received: from mail-wm1-x333.google.com ([2a00:1450:4864:20::333])
|
||||
by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux))
|
||||
id 1mcx8P-002ikY-5a; Tue, 19 Oct 2021 21:59:03 +0000
|
||||
Received: by mail-wm1-x333.google.com with SMTP id
|
||||
n40-20020a05600c3ba800b0030da2439b21so5894295wms.0;
|
||||
Tue, 19 Oct 2021 14:59:01 -0700 (PDT)
|
||||
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112;
|
||||
h=from:to:cc:subject:date:message-id:in-reply-to:references
|
||||
:mime-version:content-transfer-encoding;
|
||||
bh=Q2/puQXisdIHy96scnY39dLOhAgOrf8qFIVS4zmDucw=;
|
||||
b=mdJBK7nOU5EfOez2g0KuQcjPX1mqo1Yu1pyUoN+Yonchoy51OiK+gS5SHgjrEoxpOG
|
||||
sDimMoXQXXfpFuyMt5InbeCA1ma78VxZZywXFdfahXW4HKbUjs2tnVUa+itAc40a/Lut
|
||||
NxF/KtplJGjsU6gnEIouvEaFfzpcZMzpxv8D9kRUTed0sDtlerGTRROHvnHK6Pw2okZY
|
||||
QRFluqjW3Vn4uKF7VXKbxGVFIj+s47JoFGFp45q5EuEIhsZUbBnh5vSeuhbfmUIGk//P
|
||||
gFNhLcrUXRMbHK5TsyZLzZ7hZifip4eO5zDxP0adM8Pl2bLFIKMZ31phyOxVwysjxCxu
|
||||
PDWg==
|
||||
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
|
||||
d=1e100.net; s=20210112;
|
||||
h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
|
||||
:references:mime-version:content-transfer-encoding;
|
||||
bh=Q2/puQXisdIHy96scnY39dLOhAgOrf8qFIVS4zmDucw=;
|
||||
b=jn+JsIGvDA601iU5jMDQWABrrTP4pgk3O2OZBgof0QYw8ggY8zxTe/efUUPyXJIGTE
|
||||
2m3iE3Pcv5gj7Dcj4PIhzOg8zqSe1DU6P0hNO2BUxjZtLbEFis1NIct0ETnSFadB1BQB
|
||||
ysjv58mVj+CNTkOB4SC7pZG3YnB9kiALfn5srFP5QIZbH7zEkUmlcC68MCiTovkam5VZ
|
||||
edpald9X31meuqO248k3kWflmGaPoFpYgKDGHB1+gHVwrz/zdHEOfyW+ywMCqhAz9Ips
|
||||
bHdQrFXJhfBm73e/YpzMo+CGW2pKgwVwKvgfaYk70AaV21ZQwmVchdrKL+JbaqB3Pb8M
|
||||
q98A==
|
||||
X-Gm-Message-State: AOAM5310Qyqstssdsu0x76uWY5DcBoeRppvU7QgcaPxDqN1ox6+rbUCB
|
||||
8ZjpkAW88saV2ZLk3LFE/SY=
|
||||
X-Google-Smtp-Source:
|
||||
ABdhPJyH6EYKD5Zz7cAvlgR25QY6isGkEOndRqrg115y3IbztxMbNkQ417bBT6OIYq5kolH2WJ4Otw==
|
||||
X-Received: by 2002:a05:600c:1d05:: with SMTP id
|
||||
l5mr7158510wms.97.1634680737804;
|
||||
Tue, 19 Oct 2021 14:58:57 -0700 (PDT)
|
||||
Received: from apple.sigmaris.info (ebrouter.sigmaris.info. [82.69.107.165])
|
||||
by smtp.gmail.com with ESMTPSA id s3sm178540wrm.40.2021.10.19.14.58.57
|
||||
(version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);
|
||||
Tue, 19 Oct 2021 14:58:57 -0700 (PDT)
|
||||
From: Hugh Cole-Baker <sigmaris@gmail.com>
|
||||
To: heiko@sntech.de,
|
||||
hjc@rock-chips.com
|
||||
Cc: dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org,
|
||||
linux-arm-kernel@lists.infradead.org, ezequiel@collabora.com,
|
||||
Hugh Cole-Baker <sigmaris@gmail.com>
|
||||
Subject: [PATCH v2 2/3] drm/rockchip: support gamma control on RK3399
|
||||
Date: Tue, 19 Oct 2021 22:58:42 +0100
|
||||
Message-Id: <20211019215843.42718-3-sigmaris@gmail.com>
|
||||
X-Mailer: git-send-email 2.24.3 (Apple Git-128)
|
||||
In-Reply-To: <20211019215843.42718-1-sigmaris@gmail.com>
|
||||
References: <20211019215843.42718-1-sigmaris@gmail.com>
|
||||
MIME-Version: 1.0
|
||||
X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3
|
||||
X-CRM114-CacheID: sfid-20211019_145901_258532_1013C062
|
||||
X-CRM114-Status: GOOD ( 23.54 )
|
||||
X-BeenThere: linux-rockchip@lists.infradead.org
|
||||
X-Mailman-Version: 2.1.34
|
||||
Precedence: list
|
||||
List-Id: Upstream kernel work for Rockchip platforms
|
||||
<linux-rockchip.lists.infradead.org>
|
||||
List-Unsubscribe: <http://lists.infradead.org/mailman/options/linux-rockchip>,
|
||||
<mailto:linux-rockchip-request@lists.infradead.org?subject=unsubscribe>
|
||||
List-Archive: <http://lists.infradead.org/pipermail/linux-rockchip/>
|
||||
List-Post: <mailto:linux-rockchip@lists.infradead.org>
|
||||
List-Help: <mailto:linux-rockchip-request@lists.infradead.org?subject=help>
|
||||
List-Subscribe: <http://lists.infradead.org/mailman/listinfo/linux-rockchip>,
|
||||
<mailto:linux-rockchip-request@lists.infradead.org?subject=subscribe>
|
||||
Sender: "Linux-rockchip" <linux-rockchip-bounces@lists.infradead.org>
|
||||
Errors-To:
|
||||
linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org
|
||||
|
||||
The RK3399 has a 1024-entry gamma LUT with 10 bits per component on its
|
||||
"big" VOP and a 256-entry, 8 bit per component LUT on the "little" VOP.
|
||||
Compared to the RK3288, it no longer requires disabling gamma while
|
||||
updating the LUT. On the RK3399, the LUT can be updated at any time as
|
||||
the hardware has two LUT buffers, one can be written while the other is
|
||||
in use. A swap of the buffers is triggered by writing 1 to the
|
||||
update_gamma_lut register.
|
||||
|
||||
Signed-off-by: Hugh Cole-Baker <sigmaris@gmail.com>
|
||||
---
|
||||
|
||||
Changes from v1: Moved the vop_crtc_gamma_set call to the end of
|
||||
vop_crtc_atomic_enable after the clocks and CRTC are enabled.
|
||||
|
||||
drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 105 +++++++++++++-------
|
||||
1 file changed, 71 insertions(+), 34 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||
index ba9e14da41b4..e2c97f1b26da 100644
|
||||
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||
@@ -9,6 +9,7 @@
|
||||
#include <linux/delay.h>
|
||||
#include <linux/iopoll.h>
|
||||
#include <linux/kernel.h>
|
||||
+#include <linux/log2.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_device.h>
|
||||
@@ -66,6 +67,9 @@
|
||||
#define VOP_REG_SET(vop, group, name, v) \
|
||||
vop_reg_set(vop, &vop->data->group->name, 0, ~0, v, #name)
|
||||
|
||||
+#define VOP_HAS_REG(vop, group, name) \
|
||||
+ (!!(vop->data->group->name.mask))
|
||||
+
|
||||
#define VOP_INTR_SET_TYPE(vop, name, type, v) \
|
||||
do { \
|
||||
int i, reg = 0, mask = 0; \
|
||||
@@ -1204,17 +1208,22 @@ static bool vop_dsp_lut_is_enabled(struct vop *vop)
|
||||
return vop_read_reg(vop, 0, &vop->data->common->dsp_lut_en);
|
||||
}
|
||||
|
||||
+static u32 vop_lut_buffer_index(struct vop *vop)
|
||||
+{
|
||||
+ return vop_read_reg(vop, 0, &vop->data->common->lut_buffer_index);
|
||||
+}
|
||||
+
|
||||
static void vop_crtc_write_gamma_lut(struct vop *vop, struct drm_crtc *crtc)
|
||||
{
|
||||
struct drm_color_lut *lut = crtc->state->gamma_lut->data;
|
||||
- unsigned int i;
|
||||
+ unsigned int i, bpc = ilog2(vop->data->lut_size);
|
||||
|
||||
for (i = 0; i < crtc->gamma_size; i++) {
|
||||
u32 word;
|
||||
|
||||
- word = (drm_color_lut_extract(lut[i].red, 10) << 20) |
|
||||
- (drm_color_lut_extract(lut[i].green, 10) << 10) |
|
||||
- drm_color_lut_extract(lut[i].blue, 10);
|
||||
+ word = (drm_color_lut_extract(lut[i].red, bpc) << (2 * bpc)) |
|
||||
+ (drm_color_lut_extract(lut[i].green, bpc) << bpc) |
|
||||
+ drm_color_lut_extract(lut[i].blue, bpc);
|
||||
writel(word, vop->lut_regs + i * 4);
|
||||
}
|
||||
}
|
||||
@@ -1224,38 +1233,66 @@ static void vop_crtc_gamma_set(struct vop *vop, struct drm_crtc *crtc,
|
||||
{
|
||||
struct drm_crtc_state *state = crtc->state;
|
||||
unsigned int idle;
|
||||
+ u32 lut_idx, old_idx;
|
||||
int ret;
|
||||
|
||||
if (!vop->lut_regs)
|
||||
return;
|
||||
- /*
|
||||
- * To disable gamma (gamma_lut is null) or to write
|
||||
- * an update to the LUT, clear dsp_lut_en.
|
||||
- */
|
||||
- spin_lock(&vop->reg_lock);
|
||||
- VOP_REG_SET(vop, common, dsp_lut_en, 0);
|
||||
- vop_cfg_done(vop);
|
||||
- spin_unlock(&vop->reg_lock);
|
||||
|
||||
- /*
|
||||
- * In order to write the LUT to the internal memory,
|
||||
- * we need to first make sure the dsp_lut_en bit is cleared.
|
||||
- */
|
||||
- ret = readx_poll_timeout(vop_dsp_lut_is_enabled, vop,
|
||||
- idle, !idle, 5, 30 * 1000);
|
||||
- if (ret) {
|
||||
- DRM_DEV_ERROR(vop->dev, "display LUT RAM enable timeout!\n");
|
||||
- return;
|
||||
- }
|
||||
+ if (!state->gamma_lut || !VOP_HAS_REG(vop, common, update_gamma_lut)) {
|
||||
+ /*
|
||||
+ * To disable gamma (gamma_lut is null) or to write
|
||||
+ * an update to the LUT, clear dsp_lut_en.
|
||||
+ */
|
||||
+ spin_lock(&vop->reg_lock);
|
||||
+ VOP_REG_SET(vop, common, dsp_lut_en, 0);
|
||||
+ vop_cfg_done(vop);
|
||||
+ spin_unlock(&vop->reg_lock);
|
||||
|
||||
- if (!state->gamma_lut)
|
||||
- return;
|
||||
+ /*
|
||||
+ * In order to write the LUT to the internal memory,
|
||||
+ * we need to first make sure the dsp_lut_en bit is cleared.
|
||||
+ */
|
||||
+ ret = readx_poll_timeout(vop_dsp_lut_is_enabled, vop,
|
||||
+ idle, !idle, 5, 30 * 1000);
|
||||
+ if (ret) {
|
||||
+ DRM_DEV_ERROR(vop->dev, "display LUT RAM enable timeout!\n");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (!state->gamma_lut)
|
||||
+ return;
|
||||
+ } else {
|
||||
+ /*
|
||||
+ * On RK3399 the gamma LUT can updated without clearing dsp_lut_en,
|
||||
+ * by setting update_gamma_lut then waiting for lut_buffer_index change
|
||||
+ */
|
||||
+ old_idx = vop_lut_buffer_index(vop);
|
||||
+ }
|
||||
|
||||
spin_lock(&vop->reg_lock);
|
||||
vop_crtc_write_gamma_lut(vop, crtc);
|
||||
VOP_REG_SET(vop, common, dsp_lut_en, 1);
|
||||
+ VOP_REG_SET(vop, common, update_gamma_lut, 1);
|
||||
vop_cfg_done(vop);
|
||||
spin_unlock(&vop->reg_lock);
|
||||
+
|
||||
+ if (VOP_HAS_REG(vop, common, update_gamma_lut)) {
|
||||
+ ret = readx_poll_timeout(vop_lut_buffer_index, vop,
|
||||
+ lut_idx, lut_idx != old_idx, 5, 30 * 1000);
|
||||
+ if (ret) {
|
||||
+ DRM_DEV_ERROR(vop->dev, "gamma LUT update timeout!\n");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ /*
|
||||
+ * update_gamma_lut is auto cleared by HW, but write 0 to clear the bit
|
||||
+ * in our backup of the regs.
|
||||
+ */
|
||||
+ spin_lock(&vop->reg_lock);
|
||||
+ VOP_REG_SET(vop, common, update_gamma_lut, 0);
|
||||
+ spin_unlock(&vop->reg_lock);
|
||||
+ }
|
||||
}
|
||||
|
||||
static void vop_crtc_atomic_begin(struct drm_crtc *crtc,
|
||||
@@ -1305,14 +1342,6 @@ static void vop_crtc_atomic_enable(struct drm_crtc *crtc,
|
||||
return;
|
||||
}
|
||||
|
||||
- /*
|
||||
- * If we have a GAMMA LUT in the state, then let's make sure
|
||||
- * it's updated. We might be coming out of suspend,
|
||||
- * which means the LUT internal memory needs to be re-written.
|
||||
- */
|
||||
- if (crtc->state->gamma_lut)
|
||||
- vop_crtc_gamma_set(vop, crtc, old_state);
|
||||
-
|
||||
mutex_lock(&vop->vop_lock);
|
||||
|
||||
WARN_ON(vop->event);
|
||||
@@ -1403,6 +1432,14 @@ static void vop_crtc_atomic_enable(struct drm_crtc *crtc,
|
||||
|
||||
VOP_REG_SET(vop, common, standby, 0);
|
||||
mutex_unlock(&vop->vop_lock);
|
||||
+
|
||||
+ /*
|
||||
+ * If we have a GAMMA LUT in the state, then let's make sure
|
||||
+ * it's updated. We might be coming out of suspend,
|
||||
+ * which means the LUT internal memory needs to be re-written.
|
||||
+ */
|
||||
+ if (crtc->state->gamma_lut)
|
||||
+ vop_crtc_gamma_set(vop, crtc, old_state);
|
||||
}
|
||||
|
||||
static bool vop_fs_irq_is_pending(struct vop *vop)
|
||||
@@ -2125,8 +2162,8 @@ static int vop_bind(struct device *dev, struct device *master, void *data)
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
|
||||
if (res) {
|
||||
- if (!vop_data->lut_size) {
|
||||
- DRM_DEV_ERROR(dev, "no gamma LUT size defined\n");
|
||||
+ if (vop_data->lut_size != 1024 && vop_data->lut_size != 256) {
|
||||
+ DRM_DEV_ERROR(dev, "unsupported gamma LUT size %d\n", vop_data->lut_size);
|
||||
return -EINVAL;
|
||||
}
|
||||
vop->lut_regs = devm_ioremap_resource(dev, res);
|
||||
|
||||
From patchwork Tue Oct 19 21:58:43 2021
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: 7bit
|
||||
X-Patchwork-Submitter: Hugh Cole-Baker <sigmaris@gmail.com>
|
||||
X-Patchwork-Id: 12571181
|
||||
Return-Path:
|
||||
<SRS0=otL+=PH=lists.infradead.org=linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@kernel.org>
|
||||
X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on
|
||||
aws-us-west-2-korg-lkml-1.web.codeaurora.org
|
||||
Received: from mail.kernel.org (mail.kernel.org [198.145.29.99])
|
||||
by smtp.lore.kernel.org (Postfix) with ESMTP id 6D49BC433F5
|
||||
for <linux-rockchip@archiver.kernel.org>;
|
||||
Tue, 19 Oct 2021 22:00:01 +0000 (UTC)
|
||||
Received: from bombadil.infradead.org (bombadil.infradead.org
|
||||
[198.137.202.133])
|
||||
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
|
||||
(No client certificate requested)
|
||||
by mail.kernel.org (Postfix) with ESMTPS id 2FA4660FDA
|
||||
for <linux-rockchip@archiver.kernel.org>;
|
||||
Tue, 19 Oct 2021 22:00:01 +0000 (UTC)
|
||||
DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 2FA4660FDA
|
||||
Authentication-Results: mail.kernel.org;
|
||||
dmarc=fail (p=none dis=none) header.from=gmail.com
|
||||
Authentication-Results: mail.kernel.org;
|
||||
spf=none smtp.mailfrom=lists.infradead.org
|
||||
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
|
||||
d=lists.infradead.org; s=bombadil.20210309; h=Sender:
|
||||
Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post:
|
||||
List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:
|
||||
Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description:
|
||||
Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:
|
||||
List-Owner; bh=x6/d2diqqgTC0AwbnyEkOK36w4vwRzp43AaTU68aj5M=; b=wkiGia5/EwS6cQ
|
||||
SuVhyaTwREo92OuMyUFAEaHlaZXJMke3RttvX7iZ6ppbhCetp+wP0NzQTHAgryAGolioWpRPr8Bqa
|
||||
yjYRAS/Lt6PEyPQAWwK8AgGZTi+ZjtP+eJiH4GMdXd/D0puZXnwfWZK/HvZDtTk882s6clzgQylG5
|
||||
nzNX86FCOLlAsuwNDZ6nOLDw3W+A2X5Ii++oF/gAjegyzYxXoton/PnPqq4eLXggmefeHypIfo4Sk
|
||||
HzWEL/d4eWtI2Jwyi+q8LkuTKcnhdYhDlDcvdX771PJCkq/YhcpC+i65AWiL5hB2opn5q/Z6FozHW
|
||||
7viWXFDhM90u9a/5zWJg==;
|
||||
Received: from localhost ([::1] helo=bombadil.infradead.org)
|
||||
by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux))
|
||||
id 1mcx9I-002jH5-CN; Tue, 19 Oct 2021 21:59:56 +0000
|
||||
Received: from mail-wm1-x332.google.com ([2a00:1450:4864:20::332])
|
||||
by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux))
|
||||
id 1mcx8P-002ikX-LK; Tue, 19 Oct 2021 21:59:04 +0000
|
||||
Received: by mail-wm1-x332.google.com with SMTP id
|
||||
a140-20020a1c7f92000000b0030d8315b593so5820655wmd.5;
|
||||
Tue, 19 Oct 2021 14:59:00 -0700 (PDT)
|
||||
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112;
|
||||
h=from:to:cc:subject:date:message-id:in-reply-to:references
|
||||
:mime-version:content-transfer-encoding;
|
||||
bh=uCZAM1vvyZIsuTswhisB5UCt6gNS7FCdaVGaaFS3YV4=;
|
||||
b=N9x2DcoC3Zq7l+EXYxzzDvYTGb6e0oKBL/owgOeCIM34js4lC6qA/TCA1k1opUXEUK
|
||||
iJyLxAfyGd/1irS6OFaK6/VaWbkuhUSrXcg5VejFWZOTCNEheBAERgim9vZebgpODSTB
|
||||
0zfpE8VREGwYumyR5wQB7OI+ZVttjvlGw4zUdGt1trfhORiUkTkmFI/a6PYbJB9TlFRb
|
||||
I4/WknNvC/do0cuW/idOQdbadmwvcobJTrlHbgf+cZmrX4RxL7vwtJjMvYku0e8WGnjY
|
||||
iS38SlU6UOMwxnLaCRBqu8RVDT19yUl9mcbSU9vrJpfbI91HZeeKpD3RKOsshqR4E+dm
|
||||
lwBQ==
|
||||
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
|
||||
d=1e100.net; s=20210112;
|
||||
h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
|
||||
:references:mime-version:content-transfer-encoding;
|
||||
bh=uCZAM1vvyZIsuTswhisB5UCt6gNS7FCdaVGaaFS3YV4=;
|
||||
b=ZtozeJ/Sb8WHJMd0KU8pz9+jU0TGMxtub9urEkLpu0peP+z2iuJ2IC1R1fHuveNHM9
|
||||
qHCTWYIko+2U8h6BiSzTBkwKYqtNCH+3e85ImJhtwyX6QbEcNfwrOrShf+PSsYkfunx1
|
||||
0CBcvHQB3SMQ983RS4X8YXtjeKYhUhJtCq45tsXs2DiMPP1/NiiNRQvqFnX+mlbRos0f
|
||||
1XrbESWVB/tYzAtCRK2IIyD7dtp8BYkhoudKR0Z0Hc1Q6BomDWFG9H0VV3yNWRgHwdp3
|
||||
FN+/YFLCLWmVhGZclMvqFYxIKZpr9nWPpTx6TYTWKFpPCTm4wtv3+U6EakPiCKZdZ84f
|
||||
SKJw==
|
||||
X-Gm-Message-State: AOAM532tmkKpoFPpmG1bg92UfYgCYfs57494dXW9qNEbXkobGNhzn4uH
|
||||
U3AFIO+Y+oMp3e1o2nrxeyTtLUEVnPd/ho9y
|
||||
X-Google-Smtp-Source:
|
||||
ABdhPJxx3QAL6lyP35xXPqTB47LPyaFAa19cRinJBEnDBpBQBMv+2xmSW5ECPRIbVOY9Eer57KphDw==
|
||||
X-Received: by 2002:adf:a413:: with SMTP id
|
||||
d19mr48203915wra.246.1634680739774;
|
||||
Tue, 19 Oct 2021 14:58:59 -0700 (PDT)
|
||||
Received: from apple.sigmaris.info (ebrouter.sigmaris.info. [82.69.107.165])
|
||||
by smtp.gmail.com with ESMTPSA id s3sm178540wrm.40.2021.10.19.14.58.59
|
||||
(version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);
|
||||
Tue, 19 Oct 2021 14:58:59 -0700 (PDT)
|
||||
From: Hugh Cole-Baker <sigmaris@gmail.com>
|
||||
To: heiko@sntech.de,
|
||||
hjc@rock-chips.com
|
||||
Cc: dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org,
|
||||
linux-arm-kernel@lists.infradead.org, ezequiel@collabora.com,
|
||||
Hugh Cole-Baker <sigmaris@gmail.com>
|
||||
Subject: [PATCH v2 3/3] arm64: dts: rockchip: enable gamma control on RK3399
|
||||
Date: Tue, 19 Oct 2021 22:58:43 +0100
|
||||
Message-Id: <20211019215843.42718-4-sigmaris@gmail.com>
|
||||
X-Mailer: git-send-email 2.24.3 (Apple Git-128)
|
||||
In-Reply-To: <20211019215843.42718-1-sigmaris@gmail.com>
|
||||
References: <20211019215843.42718-1-sigmaris@gmail.com>
|
||||
MIME-Version: 1.0
|
||||
X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3
|
||||
X-CRM114-CacheID: sfid-20211019_145901_757551_331C36C9
|
||||
X-CRM114-Status: GOOD ( 11.48 )
|
||||
X-BeenThere: linux-rockchip@lists.infradead.org
|
||||
X-Mailman-Version: 2.1.34
|
||||
Precedence: list
|
||||
List-Id: Upstream kernel work for Rockchip platforms
|
||||
<linux-rockchip.lists.infradead.org>
|
||||
List-Unsubscribe: <http://lists.infradead.org/mailman/options/linux-rockchip>,
|
||||
<mailto:linux-rockchip-request@lists.infradead.org?subject=unsubscribe>
|
||||
List-Archive: <http://lists.infradead.org/pipermail/linux-rockchip/>
|
||||
List-Post: <mailto:linux-rockchip@lists.infradead.org>
|
||||
List-Help: <mailto:linux-rockchip-request@lists.infradead.org?subject=help>
|
||||
List-Subscribe: <http://lists.infradead.org/mailman/listinfo/linux-rockchip>,
|
||||
<mailto:linux-rockchip-request@lists.infradead.org?subject=subscribe>
|
||||
Sender: "Linux-rockchip" <linux-rockchip-bounces@lists.infradead.org>
|
||||
Errors-To:
|
||||
linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org
|
||||
|
||||
Define the memory region on RK3399 VOPs containing the gamma LUT at
|
||||
base+0x2000.
|
||||
|
||||
Signed-off-by: Hugh Cole-Baker <sigmaris@gmail.com>
|
||||
---
|
||||
|
||||
Changes from v1: no changes in this patch
|
||||
|
||||
arch/arm64/boot/dts/rockchip/rk3399.dtsi | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||
index 3871c7fd83b0..9cbf6ccdd256 100644
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||
@@ -1619,7 +1619,7 @@ i2s2: i2s@ff8a0000 {
|
||||
|
||||
vopl: vop@ff8f0000 {
|
||||
compatible = "rockchip,rk3399-vop-lit";
|
||||
- reg = <0x0 0xff8f0000 0x0 0x3efc>;
|
||||
+ reg = <0x0 0xff8f0000 0x0 0x2000>, <0x0 0xff8f2000 0x0 0x400>;
|
||||
interrupts = <GIC_SPI 119 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||
assigned-clocks = <&cru ACLK_VOP1>, <&cru HCLK_VOP1>;
|
||||
assigned-clock-rates = <400000000>, <100000000>;
|
||||
@@ -1676,7 +1676,7 @@ vopl_mmu: iommu@ff8f3f00 {
|
||||
|
||||
vopb: vop@ff900000 {
|
||||
compatible = "rockchip,rk3399-vop-big";
|
||||
- reg = <0x0 0xff900000 0x0 0x3efc>;
|
||||
+ reg = <0x0 0xff900000 0x0 0x2000>, <0x0 0xff902000 0x0 0x1000>;
|
||||
interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||
assigned-clocks = <&cru ACLK_VOP0>, <&cru HCLK_VOP0>;
|
||||
assigned-clock-rates = <400000000>, <100000000>;
|
|
@ -1,854 +0,0 @@
|
|||
Source: https://megous.com/git/linux
|
||||
Upstream: no
|
||||
|
||||
From 1fc012b18f91abf70e9ab8cbdef2f0e47e80c14e Mon Sep 17 00:00:00 2001
|
||||
From: Ondrej Jirman
|
||||
Date: Sun, 7 Nov 2021 19:28:27 +0100
|
||||
Subject: usb: typec: fusb302: Set the current before enabling pullups
|
||||
|
||||
This seems more reasonable and should avoid short period of incorrect
|
||||
current setting being applied to CC pin.
|
||||
|
||||
Signed-off-by: Ondrej Jirman <megous@megous.com>
|
||||
---
|
||||
drivers/usb/typec/tcpm/fusb302.c | 16 ++++++++--------
|
||||
1 file changed, 8 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/drivers/usb/typec/tcpm/fusb302.c b/drivers/usb/typec/tcpm/fusb302.c
|
||||
index 72f9001b0792..776a949ef6e3 100644
|
||||
--- a/drivers/usb/typec/tcpm/fusb302.c
|
||||
+++ b/drivers/usb/typec/tcpm/fusb302.c
|
||||
@@ -635,6 +635,14 @@ static int tcpm_set_cc(struct tcpc_dev *dev, enum typec_cc_status cc)
|
||||
goto done;
|
||||
}
|
||||
|
||||
+ /* adjust current for SRC */
|
||||
+ ret = fusb302_set_src_current(chip, cc_src_current[cc]);
|
||||
+ if (ret < 0) {
|
||||
+ fusb302_log(chip, "cannot set src current %s, ret=%d",
|
||||
+ typec_cc_status_name[cc], ret);
|
||||
+ goto done;
|
||||
+ }
|
||||
+
|
||||
ret = fusb302_i2c_mask_write(chip, FUSB_REG_SWITCHES0,
|
||||
switches0_mask, switches0_data);
|
||||
if (ret < 0) {
|
||||
@@ -645,14 +653,6 @@ static int tcpm_set_cc(struct tcpc_dev *dev, enum typec_cc_status cc)
|
||||
chip->cc1 = TYPEC_CC_OPEN;
|
||||
chip->cc2 = TYPEC_CC_OPEN;
|
||||
|
||||
- /* adjust current for SRC */
|
||||
- ret = fusb302_set_src_current(chip, cc_src_current[cc]);
|
||||
- if (ret < 0) {
|
||||
- fusb302_log(chip, "cannot set src current %s, ret=%d",
|
||||
- typec_cc_status_name[cc], ret);
|
||||
- goto done;
|
||||
- }
|
||||
-
|
||||
/* enable/disable interrupts, BC_LVL for SNK and COMP_CHNG for SRC */
|
||||
switch (cc) {
|
||||
case TYPEC_CC_RP_DEF:
|
||||
--
|
||||
cgit v1.2.3
|
||||
|
||||
From cd26cebee9bf5e0a1a064d391195db761dbf40a6 Mon Sep 17 00:00:00 2001
|
||||
From: Ondrej Jirman
|
||||
Date: Tue, 23 Nov 2021 17:57:06 +0100
|
||||
Subject: usb: typec: fusb302: Update VBUS state even if VBUS interrupt is not
|
||||
triggered
|
||||
|
||||
This seems to improve robustness.
|
||||
|
||||
Signed-off-by: Ondrej Jirman <megous@megous.com>
|
||||
---
|
||||
drivers/usb/typec/tcpm/fusb302.c | 14 ++++++++------
|
||||
1 file changed, 8 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/drivers/usb/typec/tcpm/fusb302.c b/drivers/usb/typec/tcpm/fusb302.c
|
||||
index 70b0e15992af..1d5affaabcf3 100644
|
||||
--- a/drivers/usb/typec/tcpm/fusb302.c
|
||||
+++ b/drivers/usb/typec/tcpm/fusb302.c
|
||||
@@ -1716,14 +1716,16 @@ static void fusb302_irq_work(struct work_struct *work)
|
||||
|
||||
fusb302_print_state(chip);
|
||||
|
||||
- if (interrupt & FUSB_REG_INTERRUPT_VBUSOK) {
|
||||
- vbus_present = !!(status0 & FUSB_REG_STATUS0_VBUSOK);
|
||||
+ vbus_present = !!(status0 & FUSB_REG_STATUS0_VBUSOK);
|
||||
+ if (interrupt & FUSB_REG_INTERRUPT_VBUSOK)
|
||||
fusb302_log(chip, "IRQ: VBUS_OK, vbus=%s",
|
||||
vbus_present ? "On" : "Off");
|
||||
- if (vbus_present != chip->vbus_present) {
|
||||
- chip->vbus_present = vbus_present;
|
||||
- tcpm_vbus_change(chip->tcpm_port);
|
||||
- }
|
||||
+ if (vbus_present != chip->vbus_present) {
|
||||
+ chip->vbus_present = vbus_present;
|
||||
+ if (!(interrupt & FUSB_REG_INTERRUPT_VBUSOK))
|
||||
+ fusb302_log(chip, "IRQ: VBUS changed without interrupt, vbus=%s",
|
||||
+ vbus_present ? "On" : "Off");
|
||||
+ tcpm_vbus_change(chip->tcpm_port);
|
||||
}
|
||||
|
||||
if (interrupta & FUSB_REG_INTERRUPTA_TOGDONE) {
|
||||
--
|
||||
cgit v1.2.3
|
||||
|
||||
From a8e657e94f489297fa7d80767980730207ebb1bd Mon Sep 17 00:00:00 2001
|
||||
From: Ondrej Jirman
|
||||
Date: Sun, 14 Nov 2021 01:14:25 +0100
|
||||
Subject: usb: typec: fusb302: Add OF extcon support
|
||||
|
||||
It's possible to create a dependency cycle between fusb302 and
|
||||
other drivers via extcon device, so we retrieve the device on
|
||||
demand after probe and not during probe.
|
||||
|
||||
Signed-off-by: Ondrej Jirman <megous@megous.com>
|
||||
---
|
||||
drivers/usb/typec/tcpm/fusb302.c | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
diff --git a/drivers/usb/typec/tcpm/fusb302.c b/drivers/usb/typec/tcpm/fusb302.c
|
||||
index ae3b930d774f..0c5dd0058f5e 100644
|
||||
--- a/drivers/usb/typec/tcpm/fusb302.c
|
||||
+++ b/drivers/usb/typec/tcpm/fusb302.c
|
||||
@@ -518,6 +518,16 @@ static int tcpm_get_current_limit(struct tcpc_dev *dev)
|
||||
int current_limit = 0;
|
||||
unsigned long timeout;
|
||||
|
||||
+ /*
|
||||
+ * To avoid cycles in OF dependencies, we get extcon when necessary
|
||||
+ * outside of probe function.
|
||||
+ */
|
||||
+ if (of_property_read_bool(chip->dev->of_node, "extcon") && !chip->extcon) {
|
||||
+ chip->extcon = extcon_get_edev_by_phandle(chip->dev, 0);
|
||||
+ if (IS_ERR(chip->extcon))
|
||||
+ chip->extcon = NULL;
|
||||
+ }
|
||||
+
|
||||
if (!chip->extcon)
|
||||
return 0;
|
||||
|
||||
--
|
||||
cgit v1.2.3
|
||||
|
||||
From b6d4f583034b4098587497cd0e138223b6697a25 Mon Sep 17 00:00:00 2001
|
||||
From: Ondrej Jirman
|
||||
Date: Sat, 20 Nov 2021 14:33:58 +0100
|
||||
Subject: usb: typec: fusb302: Fix register definitions
|
||||
|
||||
MEASURE_VBUS bit is at position 6. MDAC bits are also wrong.
|
||||
|
||||
Signed-off-by: Ondrej Jirman <megous@megous.com>
|
||||
---
|
||||
drivers/usb/typec/tcpm/fusb302_reg.h | 16 +++++++---------
|
||||
1 file changed, 7 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/drivers/usb/typec/tcpm/fusb302_reg.h b/drivers/usb/typec/tcpm/fusb302_reg.h
|
||||
index edc0e4b0f1e6..f37d226c5027 100644
|
||||
--- a/drivers/usb/typec/tcpm/fusb302_reg.h
|
||||
+++ b/drivers/usb/typec/tcpm/fusb302_reg.h
|
||||
@@ -27,14 +27,13 @@
|
||||
#define FUSB_REG_SWITCHES1_TXCC2_EN BIT(1)
|
||||
#define FUSB_REG_SWITCHES1_TXCC1_EN BIT(0)
|
||||
#define FUSB_REG_MEASURE 0x04
|
||||
-#define FUSB_REG_MEASURE_MDAC5 BIT(7)
|
||||
-#define FUSB_REG_MEASURE_MDAC4 BIT(6)
|
||||
-#define FUSB_REG_MEASURE_MDAC3 BIT(5)
|
||||
-#define FUSB_REG_MEASURE_MDAC2 BIT(4)
|
||||
-#define FUSB_REG_MEASURE_MDAC1 BIT(3)
|
||||
-#define FUSB_REG_MEASURE_MDAC0 BIT(2)
|
||||
-#define FUSB_REG_MEASURE_VBUS BIT(1)
|
||||
-#define FUSB_REG_MEASURE_XXXX5 BIT(0)
|
||||
+#define FUSB_REG_MEASURE_VBUS BIT(6)
|
||||
+#define FUSB_REG_MEASURE_MDAC5 BIT(5)
|
||||
+#define FUSB_REG_MEASURE_MDAC4 BIT(4)
|
||||
+#define FUSB_REG_MEASURE_MDAC3 BIT(3)
|
||||
+#define FUSB_REG_MEASURE_MDAC2 BIT(2)
|
||||
+#define FUSB_REG_MEASURE_MDAC1 BIT(1)
|
||||
+#define FUSB_REG_MEASURE_MDAC0 BIT(0)
|
||||
#define FUSB_REG_CONTROL0 0x06
|
||||
#define FUSB_REG_CONTROL0_TX_FLUSH BIT(6)
|
||||
#define FUSB_REG_CONTROL0_INT_MASK BIT(5)
|
||||
@@ -105,7 +104,6 @@
|
||||
#define FUSB_REG_STATUS0A_RX_SOFT_RESET BIT(1)
|
||||
#define FUSB_REG_STATUS0A_RX_HARD_RESET BIT(0)
|
||||
#define FUSB_REG_STATUS1A 0x3D
|
||||
-#define FUSB_REG_STATUS1A_TOGSS BIT(3)
|
||||
#define FUSB_REG_STATUS1A_TOGSS_RUNNING 0x0
|
||||
#define FUSB_REG_STATUS1A_TOGSS_SRC1 0x1
|
||||
#define FUSB_REG_STATUS1A_TOGSS_SRC2 0x2
|
||||
--
|
||||
cgit v1.2.3
|
||||
|
||||
From 5f43c360ba28cb7f53c35f0e4221cd0e9abd1624 Mon Sep 17 00:00:00 2001
|
||||
From: Ondrej Jirman
|
||||
Date: Sat, 20 Nov 2021 14:35:10 +0100
|
||||
Subject: usb: typec: fusb302: Clear interrupts before we start toggling
|
||||
|
||||
This is recommended by the datasheet.
|
||||
|
||||
Signed-off-by: Ondrej Jirman <megous@megous.com>
|
||||
---
|
||||
drivers/usb/typec/tcpm/fusb302.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/drivers/usb/typec/tcpm/fusb302.c b/drivers/usb/typec/tcpm/fusb302.c
|
||||
index 0c5dd0058f5e..011dce5e73a2 100644
|
||||
--- a/drivers/usb/typec/tcpm/fusb302.c
|
||||
+++ b/drivers/usb/typec/tcpm/fusb302.c
|
||||
@@ -586,6 +586,7 @@ static int fusb302_set_toggling(struct fusb302_chip *chip,
|
||||
enum toggling_mode mode)
|
||||
{
|
||||
int ret = 0;
|
||||
+ u8 reg;
|
||||
|
||||
/* first disable toggling */
|
||||
ret = fusb302_i2c_clear_bits(chip, FUSB_REG_CONTROL2,
|
||||
@@ -644,6 +645,12 @@ static int fusb302_set_toggling(struct fusb302_chip *chip,
|
||||
} else {
|
||||
/* Datasheet says vconn MUST be off when toggling */
|
||||
WARN(chip->vconn_on, "Vconn is on during toggle start");
|
||||
+
|
||||
+ /* clear interrupts */
|
||||
+ ret = fusb302_i2c_read(chip, FUSB_REG_INTERRUPT, ®);
|
||||
+ if (ret < 0)
|
||||
+ return ret;
|
||||
+
|
||||
/* unmask TOGDONE interrupt */
|
||||
ret = fusb302_i2c_clear_bits(chip, FUSB_REG_MASKA,
|
||||
FUSB_REG_MASKA_TOGDONE);
|
||||
--
|
||||
cgit v1.2.3
|
||||
|
||||
From c9c0c64a3ecabb48594a6da29bed7b70e7c1cbb9 Mon Sep 17 00:00:00 2001
|
||||
From: Ondrej Jirman
|
||||
Date: Sun, 7 Nov 2021 19:24:40 +0100
|
||||
Subject: usb: typec: typec-extcon: Add typec -> extcon bridge driver
|
||||
|
||||
This bridge connects standard Type C port interfaces for controling
|
||||
muxes, switches and usb roles to muxes, switches and usb role
|
||||
drivers controlled via extcon interface.
|
||||
|
||||
Signed-off-by: Ondrej Jirman <megous@megous.com>
|
||||
---
|
||||
drivers/usb/typec/Kconfig | 7 +
|
||||
drivers/usb/typec/Makefile | 1 +
|
||||
drivers/usb/typec/typec-extcon.c | 337 +++++++++++++++++++++++++++++++++++++++
|
||||
3 files changed, 345 insertions(+)
|
||||
create mode 100644 drivers/usb/typec/typec-extcon.c
|
||||
|
||||
diff --git a/drivers/usb/typec/Kconfig b/drivers/usb/typec/Kconfig
|
||||
index ab480f38523a..01ecc5e590f1 100644
|
||||
--- a/drivers/usb/typec/Kconfig
|
||||
+++ b/drivers/usb/typec/Kconfig
|
||||
@@ -88,6 +88,13 @@ config TYPEC_QCOM_PMIC
|
||||
It will also enable the VBUS output to connected devices when a
|
||||
DFP connection is made.
|
||||
|
||||
+config TYPEC_EXTCON
|
||||
+ tristate "Type-C switch/mux -> extcon interface bridge driver"
|
||||
+ depends on USB_ROLE_SWITCH
|
||||
+ help
|
||||
+ Say Y or M here if your system needs bridging between typec class
|
||||
+ and extcon interfaces.
|
||||
+
|
||||
source "drivers/usb/typec/mux/Kconfig"
|
||||
|
||||
source "drivers/usb/typec/altmodes/Kconfig"
|
||||
diff --git a/drivers/usb/typec/Makefile b/drivers/usb/typec/Makefile
|
||||
index a0adb8947a30..d9d829386b73 100644
|
||||
--- a/drivers/usb/typec/Makefile
|
||||
+++ b/drivers/usb/typec/Makefile
|
||||
@@ -8,4 +8,5 @@ obj-$(CONFIG_TYPEC_TPS6598X) += tipd/
|
||||
obj-$(CONFIG_TYPEC_HD3SS3220) += hd3ss3220.o
|
||||
obj-$(CONFIG_TYPEC_QCOM_PMIC) += qcom-pmic-typec.o
|
||||
obj-$(CONFIG_TYPEC_STUSB160X) += stusb160x.o
|
||||
+obj-$(CONFIG_TYPEC_EXTCON) += typec-extcon.o
|
||||
obj-$(CONFIG_TYPEC) += mux/
|
||||
diff --git a/drivers/usb/typec/typec-extcon.c b/drivers/usb/typec/typec-extcon.c
|
||||
new file mode 100644
|
||||
index 000000000000..143ff2486f2f
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/typec/typec-extcon.c
|
||||
@@ -0,0 +1,337 @@
|
||||
+/*
|
||||
+ * typec -> extcon bridge
|
||||
+ * Copyright (c) 2021 Ondřej Jirman <megi@xff.cz>
|
||||
+ *
|
||||
+ * This driver bridges standard type-c interfaces to drivers that
|
||||
+ * expect extcon interface.
|
||||
+ */
|
||||
+
|
||||
+#include <linux/delay.h>
|
||||
+#include <linux/kernel.h>
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/power_supply.h>
|
||||
+#include <linux/platform_device.h>
|
||||
+#include <linux/usb/pd.h>
|
||||
+#include <linux/usb/role.h>
|
||||
+#include <linux/usb/typec.h>
|
||||
+#include <linux/usb/typec_dp.h>
|
||||
+#include <linux/usb/typec_mux.h>
|
||||
+#include <linux/extcon-provider.h>
|
||||
+
|
||||
+struct typec_extcon {
|
||||
+ struct device *dev;
|
||||
+
|
||||
+ /* consumers */
|
||||
+ struct usb_role_switch *role_sw;
|
||||
+ struct typec_switch *sw;
|
||||
+ struct typec_mux *mux;
|
||||
+
|
||||
+ /* providers */
|
||||
+ struct extcon_dev *extcon;
|
||||
+ struct notifier_block extcon_nb;
|
||||
+
|
||||
+ /* cached state from typec controller */
|
||||
+ enum usb_role role;
|
||||
+ enum typec_orientation orientation;
|
||||
+ struct typec_altmode alt;
|
||||
+ unsigned long mode;
|
||||
+ bool has_alt;
|
||||
+ struct mutex lock;
|
||||
+};
|
||||
+
|
||||
+static const unsigned int typec_extcon_cable[] = {
|
||||
+ EXTCON_DISP_DP,
|
||||
+
|
||||
+ EXTCON_USB,
|
||||
+ EXTCON_USB_HOST,
|
||||
+
|
||||
+ EXTCON_CHG_USB_SDP,
|
||||
+ EXTCON_CHG_USB_CDP,
|
||||
+ EXTCON_CHG_USB_DCP,
|
||||
+ EXTCON_CHG_USB_ACA,
|
||||
+
|
||||
+ EXTCON_NONE,
|
||||
+};
|
||||
+
|
||||
+static void typec_extcon_set_cable(struct typec_extcon *tce, int id, bool on,
|
||||
+ union extcon_property_value prop_ss,
|
||||
+ union extcon_property_value prop_or)
|
||||
+{
|
||||
+ union extcon_property_value cur_ss, cur_or;
|
||||
+ bool prop_diff = false;
|
||||
+ int ret;
|
||||
+
|
||||
+ ret = extcon_get_property(tce->extcon, id,
|
||||
+ EXTCON_PROP_USB_SS, &cur_ss);
|
||||
+ if (ret || cur_ss.intval != prop_ss.intval)
|
||||
+ prop_diff = true;
|
||||
+
|
||||
+ ret = extcon_get_property(tce->extcon, id,
|
||||
+ EXTCON_PROP_USB_TYPEC_POLARITY, &cur_or);
|
||||
+ if (ret || cur_or.intval != prop_or.intval)
|
||||
+ prop_diff = true;
|
||||
+
|
||||
+ if (!on && extcon_get_state(tce->extcon, id)) {
|
||||
+ extcon_set_state_sync(tce->extcon, id, false);
|
||||
+ } else if (on && (!extcon_get_state(tce->extcon, id) || prop_diff)) {
|
||||
+ extcon_set_state(tce->extcon, id, true);
|
||||
+ extcon_set_property(tce->extcon, id,
|
||||
+ EXTCON_PROP_USB_SS, prop_ss);
|
||||
+ extcon_set_property(tce->extcon, id,
|
||||
+ EXTCON_PROP_USB_TYPEC_POLARITY, prop_or);
|
||||
+ extcon_sync(tce->extcon, id);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static int typec_extcon_sync_extcon(struct typec_extcon *tce)
|
||||
+{
|
||||
+ union extcon_property_value prop_ss, prop_or;
|
||||
+ bool has_dp = false;
|
||||
+
|
||||
+ mutex_lock(&tce->lock);
|
||||
+
|
||||
+ /* connector is disconnected */
|
||||
+ if (tce->orientation == TYPEC_ORIENTATION_NONE) {
|
||||
+ typec_extcon_set_cable(tce, EXTCON_USB, false, prop_ss, prop_or);
|
||||
+ typec_extcon_set_cable(tce, EXTCON_USB_HOST, false, prop_ss, prop_or);
|
||||
+ typec_extcon_set_cable(tce, EXTCON_DISP_DP, false, prop_ss, prop_or);
|
||||
+
|
||||
+ extcon_set_state_sync(tce->extcon, EXTCON_CHG_USB_SDP, false);
|
||||
+ extcon_set_state_sync(tce->extcon, EXTCON_CHG_USB_DCP, false);
|
||||
+ extcon_set_state_sync(tce->extcon, EXTCON_CHG_USB_CDP, false);
|
||||
+ extcon_set_state_sync(tce->extcon, EXTCON_CHG_USB_ACA, false);
|
||||
+
|
||||
+ goto out_unlock;
|
||||
+ }
|
||||
+
|
||||
+ prop_or.intval = tce->orientation == TYPEC_ORIENTATION_NORMAL ? 0 : 1;
|
||||
+ prop_ss.intval = 0;
|
||||
+
|
||||
+ if (tce->has_alt && tce->alt.svid == USB_TYPEC_DP_SID) {
|
||||
+ switch (tce->mode) {
|
||||
+ case TYPEC_STATE_SAFE:
|
||||
+ break;
|
||||
+ case TYPEC_DP_STATE_C:
|
||||
+ case TYPEC_DP_STATE_E:
|
||||
+ has_dp = true;
|
||||
+ break;
|
||||
+ case TYPEC_DP_STATE_D:
|
||||
+ has_dp = true;
|
||||
+ fallthrough;
|
||||
+ case TYPEC_STATE_USB:
|
||||
+ prop_ss.intval = 1;
|
||||
+ break;
|
||||
+ default:
|
||||
+ dev_err(tce->dev, "unhandled mux mode=%lu\n", tce->mode);
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ typec_extcon_set_cable(tce, EXTCON_USB,
|
||||
+ tce->role == USB_ROLE_DEVICE, prop_ss, prop_or);
|
||||
+ typec_extcon_set_cable(tce, EXTCON_USB_HOST,
|
||||
+ tce->role == USB_ROLE_HOST, prop_ss, prop_or);
|
||||
+
|
||||
+ typec_extcon_set_cable(tce, EXTCON_DISP_DP, has_dp, prop_ss, prop_or);
|
||||
+
|
||||
+out_unlock:
|
||||
+ mutex_unlock(&tce->lock);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int typec_extcon_sw_set(struct typec_switch *sw,
|
||||
+ enum typec_orientation orientation)
|
||||
+{
|
||||
+ struct typec_extcon *tce = typec_switch_get_drvdata(sw);
|
||||
+
|
||||
+ dev_dbg(tce->dev, "SW SET: orientation=%d\n", orientation);
|
||||
+
|
||||
+ mutex_lock(&tce->lock);
|
||||
+ tce->orientation = orientation;
|
||||
+ mutex_unlock(&tce->lock);
|
||||
+
|
||||
+ typec_extcon_sync_extcon(tce);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int typec_extcon_mux_set(struct typec_mux *mux,
|
||||
+ struct typec_mux_state *state)
|
||||
+{
|
||||
+ struct typec_extcon *tce = typec_mux_get_drvdata(mux);
|
||||
+ struct typec_altmode *alt = state->alt;
|
||||
+
|
||||
+ dev_dbg(tce->dev, "MUX SET: state->mode=%lu\n", state->mode);
|
||||
+ if (alt)
|
||||
+ dev_dbg(tce->dev, " ...alt: svid=%04hx mode=%d vdo=%08x active=%u\n",
|
||||
+ alt->svid, alt->mode, alt->vdo, alt->active);
|
||||
+
|
||||
+ mutex_lock(&tce->lock);
|
||||
+ tce->mode = state->mode;
|
||||
+ tce->has_alt = alt != NULL;
|
||||
+ if (alt)
|
||||
+ tce->alt = *alt;
|
||||
+ mutex_unlock(&tce->lock);
|
||||
+
|
||||
+ typec_extcon_sync_extcon(tce);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int typec_extcon_usb_set_role(struct usb_role_switch *sw,
|
||||
+ enum usb_role role)
|
||||
+{
|
||||
+ struct typec_extcon *tce = usb_role_switch_get_drvdata(sw);
|
||||
+
|
||||
+ dev_dbg(tce->dev, "ROLE SET: role=%d\n", role);
|
||||
+
|
||||
+ mutex_lock(&tce->lock);
|
||||
+ tce->role = role;
|
||||
+ mutex_unlock(&tce->lock);
|
||||
+
|
||||
+ typec_extcon_sync_extcon(tce);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int typec_extcon_notifier(struct notifier_block *nb,
|
||||
+ unsigned long action, void *data)
|
||||
+{
|
||||
+ struct typec_extcon *tce = container_of(nb, struct typec_extcon, extcon_nb);
|
||||
+
|
||||
+ bool sdp = extcon_get_state(tce->extcon, EXTCON_CHG_USB_SDP);
|
||||
+ bool cdp = extcon_get_state(tce->extcon, EXTCON_CHG_USB_CDP);
|
||||
+ bool dcp = extcon_get_state(tce->extcon, EXTCON_CHG_USB_DCP);
|
||||
+ bool usb = extcon_get_state(tce->extcon, EXTCON_USB);
|
||||
+ bool usb_host = extcon_get_state(tce->extcon, EXTCON_USB_HOST);
|
||||
+ bool dp = extcon_get_state(tce->extcon, EXTCON_DISP_DP);
|
||||
+
|
||||
+ dev_info(tce->dev, "extcon changed sdp=%d cdp=%d dcp=%d usb=%d usb_host=%d dp=%d\n",
|
||||
+ sdp, cdp, dcp, usb, usb_host, dp);
|
||||
+
|
||||
+ return NOTIFY_OK;
|
||||
+}
|
||||
+
|
||||
+static int typec_extcon_probe(struct platform_device *pdev)
|
||||
+{
|
||||
+ struct typec_switch_desc sw_desc = { };
|
||||
+ struct typec_mux_desc mux_desc = { };
|
||||
+ struct usb_role_switch_desc role_desc = { };
|
||||
+ struct device *dev = &pdev->dev;
|
||||
+ struct typec_extcon *tce;
|
||||
+ int ret = 0;
|
||||
+
|
||||
+ tce = devm_kzalloc(dev, sizeof(*tce), GFP_KERNEL);
|
||||
+ if (!tce)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ tce->dev = &pdev->dev;
|
||||
+ mutex_init(&tce->lock);
|
||||
+ tce->mode = TYPEC_STATE_SAFE;
|
||||
+
|
||||
+ sw_desc.drvdata = tce;
|
||||
+ sw_desc.fwnode = dev->fwnode;
|
||||
+ sw_desc.set = typec_extcon_sw_set;
|
||||
+
|
||||
+ tce->sw = typec_switch_register(dev, &sw_desc);
|
||||
+ if (IS_ERR(tce->sw))
|
||||
+ return dev_err_probe(dev, PTR_ERR(tce->sw),
|
||||
+ "Error registering typec switch\n");
|
||||
+
|
||||
+ mux_desc.drvdata = tce;
|
||||
+ mux_desc.fwnode = dev->fwnode;
|
||||
+ mux_desc.set = typec_extcon_mux_set;
|
||||
+
|
||||
+ tce->mux = typec_mux_register(dev, &mux_desc);
|
||||
+ if (IS_ERR(tce->mux)) {
|
||||
+ ret = dev_err_probe(dev, PTR_ERR(tce->mux),
|
||||
+ "Error registering typec mux\n");
|
||||
+ goto err_sw;
|
||||
+ }
|
||||
+
|
||||
+ role_desc.driver_data = tce;
|
||||
+ role_desc.fwnode = dev->fwnode;
|
||||
+ role_desc.name = fwnode_get_name(dev->fwnode);
|
||||
+ role_desc.set = typec_extcon_usb_set_role;
|
||||
+
|
||||
+ tce->role_sw = usb_role_switch_register(dev, &role_desc);
|
||||
+ if (IS_ERR(tce->role_sw)) {
|
||||
+ ret = dev_err_probe(dev, PTR_ERR(tce->role_sw),
|
||||
+ "Error registering USB role switch\n");
|
||||
+ goto err_mux;
|
||||
+ }
|
||||
+
|
||||
+ tce->extcon = devm_extcon_dev_allocate(dev, typec_extcon_cable);
|
||||
+ if (IS_ERR(tce->extcon)) {
|
||||
+ ret = PTR_ERR(tce->extcon);
|
||||
+ goto err_role;
|
||||
+ }
|
||||
+
|
||||
+ ret = devm_extcon_dev_register(dev, tce->extcon);
|
||||
+ if (ret) {
|
||||
+ ret = dev_err_probe(dev, ret, "failed to register extcon device\n");
|
||||
+ goto err_role;
|
||||
+ }
|
||||
+
|
||||
+ extcon_set_property_capability(tce->extcon, EXTCON_USB,
|
||||
+ EXTCON_PROP_USB_SS);
|
||||
+ extcon_set_property_capability(tce->extcon, EXTCON_USB,
|
||||
+ EXTCON_PROP_USB_TYPEC_POLARITY);
|
||||
+ extcon_set_property_capability(tce->extcon, EXTCON_USB_HOST,
|
||||
+ EXTCON_PROP_USB_SS);
|
||||
+ extcon_set_property_capability(tce->extcon, EXTCON_USB_HOST,
|
||||
+ EXTCON_PROP_USB_TYPEC_POLARITY);
|
||||
+ extcon_set_property_capability(tce->extcon, EXTCON_DISP_DP,
|
||||
+ EXTCON_PROP_USB_SS);
|
||||
+ extcon_set_property_capability(tce->extcon, EXTCON_DISP_DP,
|
||||
+ EXTCON_PROP_USB_TYPEC_POLARITY);
|
||||
+
|
||||
+ tce->extcon_nb.notifier_call = typec_extcon_notifier;
|
||||
+ ret = devm_extcon_register_notifier_all(dev, tce->extcon, &tce->extcon_nb);
|
||||
+ if (ret) {
|
||||
+ dev_err_probe(dev, ret, "Failed to register extcon notifier\n");
|
||||
+ goto err_role;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+
|
||||
+err_role:
|
||||
+ usb_role_switch_unregister(tce->role_sw);
|
||||
+err_mux:
|
||||
+ typec_mux_unregister(tce->mux);
|
||||
+err_sw:
|
||||
+ typec_switch_unregister(tce->sw);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static int typec_extcon_remove(struct platform_device *pdev)
|
||||
+{
|
||||
+ struct typec_extcon *tce = platform_get_drvdata(pdev);
|
||||
+
|
||||
+ usb_role_switch_unregister(tce->role_sw);
|
||||
+ typec_mux_unregister(tce->mux);
|
||||
+ typec_switch_unregister(tce->sw);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static struct of_device_id typec_extcon_of_match_table[] = {
|
||||
+ { .compatible = "linux,typec-extcon-bridge" },
|
||||
+ { },
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(of, typec_extcon_of_match_table);
|
||||
+
|
||||
+static struct platform_driver typec_extcon_driver = {
|
||||
+ .driver = {
|
||||
+ .name = "typec-extcon",
|
||||
+ .of_match_table = typec_extcon_of_match_table,
|
||||
+ },
|
||||
+ .probe = typec_extcon_probe,
|
||||
+ .remove = typec_extcon_remove,
|
||||
+};
|
||||
+
|
||||
+module_platform_driver(typec_extcon_driver);
|
||||
+
|
||||
+MODULE_LICENSE("GPL");
|
||||
+MODULE_AUTHOR("Ondrej Jirman <megous@megous.com>");
|
||||
+MODULE_DESCRIPTION("typec -> extcon bridge driver");
|
||||
--
|
||||
cgit v1.2.3
|
||||
|
||||
From 4f9167affd8b3647ebc1b13cc3a0ff1b949b0c49 Mon Sep 17 00:00:00 2001
|
||||
From: Ondrej Jirman
|
||||
Date: Tue, 23 Nov 2021 17:32:18 +0100
|
||||
Subject: phy: rockchip-typec: Make sure the plug orientation is respected
|
||||
|
||||
RK3399 TRM says about bit 8:
|
||||
|
||||
typec_conn_dir_sel: TypeC connect direction select
|
||||
|
||||
- 0: select typec_conn_dir (bit0 of this register) to TypeC PHY
|
||||
- 1: select TCPC ouput typec_con_dir to TypeC PHY (default value)
|
||||
|
||||
This means that by default, typec_conn_dir bit is not respected.
|
||||
Fix setting of typec_conn_dir by setting typec_conn_dir to 0 first.
|
||||
|
||||
Signed-off-by: Ondrej Jirman <megous@megous.com>
|
||||
---
|
||||
drivers/phy/rockchip/phy-rockchip-typec.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/drivers/phy/rockchip/phy-rockchip-typec.c b/drivers/phy/rockchip/phy-rockchip-typec.c
|
||||
index d2bbdc96a167..fa10ee9a5794 100644
|
||||
--- a/drivers/phy/rockchip/phy-rockchip-typec.c
|
||||
+++ b/drivers/phy/rockchip/phy-rockchip-typec.c
|
||||
@@ -350,6 +350,7 @@ struct usb3phy_reg {
|
||||
* struct rockchip_usb3phy_port_cfg - usb3-phy port configuration.
|
||||
* @reg: the base address for usb3-phy config.
|
||||
* @typec_conn_dir: the register of type-c connector direction.
|
||||
+ * @typec_conn_dir_sel: the register of type-c connector direction source.
|
||||
* @usb3tousb2_en: the register of type-c force usb2 to usb2 enable.
|
||||
* @external_psm: the register of type-c phy external psm clock.
|
||||
* @pipe_status: the register of type-c phy pipe status.
|
||||
@@ -360,6 +361,7 @@ struct usb3phy_reg {
|
||||
struct rockchip_usb3phy_port_cfg {
|
||||
unsigned int reg;
|
||||
struct usb3phy_reg typec_conn_dir;
|
||||
+ struct usb3phy_reg typec_conn_dir_sel;
|
||||
struct usb3phy_reg usb3tousb2_en;
|
||||
struct usb3phy_reg external_psm;
|
||||
struct usb3phy_reg pipe_status;
|
||||
@@ -434,6 +436,7 @@ static const struct rockchip_usb3phy_port_cfg rk3399_usb3phy_port_cfgs[] = {
|
||||
{
|
||||
.reg = 0xff7c0000,
|
||||
.typec_conn_dir = { 0xe580, 0, 16 },
|
||||
+ .typec_conn_dir_sel = { 0xe580, 8, 16+8 },
|
||||
.usb3tousb2_en = { 0xe580, 3, 19 },
|
||||
.external_psm = { 0xe588, 14, 30 },
|
||||
.pipe_status = { 0xe5c0, 0, 0 },
|
||||
@@ -444,6 +447,7 @@ static const struct rockchip_usb3phy_port_cfg rk3399_usb3phy_port_cfgs[] = {
|
||||
{
|
||||
.reg = 0xff800000,
|
||||
.typec_conn_dir = { 0xe58c, 0, 16 },
|
||||
+ .typec_conn_dir_sel = { 0xe58c, 8, 16+8 },
|
||||
.usb3tousb2_en = { 0xe58c, 3, 19 },
|
||||
.external_psm = { 0xe594, 14, 30 },
|
||||
.pipe_status = { 0xe5c0, 16, 16 },
|
||||
@@ -739,6 +743,7 @@ static int tcphy_phy_init(struct rockchip_typec_phy *tcphy, u8 mode)
|
||||
|
||||
reset_control_deassert(tcphy->tcphy_rst);
|
||||
|
||||
+ property_enable(tcphy, &cfg->typec_conn_dir_sel, 0);
|
||||
property_enable(tcphy, &cfg->typec_conn_dir, tcphy->flip);
|
||||
tcphy_dp_aux_set_flip(tcphy);
|
||||
|
||||
--
|
||||
cgit v1.2.3
|
||||
|
||||
From 331a9126d98c94f315482f14eed307d184a26f72 Mon Sep 17 00:00:00 2001
|
||||
From: Ondrej Jirman
|
||||
Date: Wed, 2 Dec 2020 12:09:45 +0100
|
||||
Subject: arm64: dts: rk3399-pinebook-pro: Fix USB-PD charging
|
||||
|
||||
Signed-off-by: Ondrej Jirman <megous@megous.com>
|
||||
---
|
||||
arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts b/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts
|
||||
index c2f021a1a18f..d7fe1d99b546 100644
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts
|
||||
@@ -713,9 +713,9 @@
|
||||
op-sink-microwatt = <1000000>;
|
||||
power-role = "dual";
|
||||
sink-pdos =
|
||||
- <PDO_FIXED(5000, 2500, PDO_FIXED_USB_COMM)>;
|
||||
+ <PDO_FIXED(5000, 2500, PDO_FIXED_USB_COMM | PDO_FIXED_DUAL_ROLE | PDO_FIXED_DATA_SWAP)>;
|
||||
source-pdos =
|
||||
- <PDO_FIXED(5000, 1400, PDO_FIXED_USB_COMM)>;
|
||||
+ <PDO_FIXED(5000, 1400, PDO_FIXED_USB_COMM | PDO_FIXED_DUAL_ROLE | PDO_FIXED_DATA_SWAP)>;
|
||||
try-power-role = "sink";
|
||||
|
||||
ports {
|
||||
--
|
||||
cgit v1.2.3
|
||||
|
||||
From 6947a3f43482268bc96d2eb6a7fc51323a83d9f7 Mon Sep 17 00:00:00 2001
|
||||
From: Ondrej Jirman
|
||||
Date: Sun, 14 Nov 2021 01:16:51 +0100
|
||||
Subject: arm64: dts: rk3399-pinebook-pro: Improve Type-C support on Pinebook
|
||||
Pro
|
||||
|
||||
This is using the same extcon bridge developed by me for Pinephone Pro.
|
||||
|
||||
Signed-off-by: Ondrej Jirman <megous@megous.com>
|
||||
---
|
||||
.../boot/dts/rockchip/rk3399-pinebook-pro.dts | 51 +++++++++++++++++++---
|
||||
1 file changed, 46 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts b/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts
|
||||
index d7fe1d99b546..ae175ee3f4c3 100644
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts
|
||||
@@ -345,7 +345,7 @@
|
||||
|
||||
/* Regulators supplied by vcc5v0_usb */
|
||||
/* Type C port power supply regulator */
|
||||
- vbus_5vout: vbus_typec: vbus-5vout {
|
||||
+ vbus_5vout: vbus-5vout {
|
||||
compatible = "regulator-fixed";
|
||||
enable-active-high;
|
||||
gpio = <&gpio1 RK_PA3 GPIO_ACTIVE_HIGH>;
|
||||
@@ -384,6 +384,14 @@
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&dc_det_pin>;
|
||||
};
|
||||
+
|
||||
+ typec_extcon_bridge: typec-extcon {
|
||||
+ compatible = "linux,typec-extcon-bridge";
|
||||
+ usb-role-switch;
|
||||
+ orientation-switch;
|
||||
+ mode-switch;
|
||||
+ svid = /bits/ 16 <0xff01>;
|
||||
+ };
|
||||
};
|
||||
|
||||
&cpu_b0 {
|
||||
@@ -410,6 +418,12 @@
|
||||
cpu-supply = <&vdd_cpu_l>;
|
||||
};
|
||||
|
||||
+&cdn_dp {
|
||||
+ status = "okay";
|
||||
+ extcon = <&typec_extcon_bridge>;
|
||||
+ phys = <&tcphy0_dp>;
|
||||
+};
|
||||
+
|
||||
&edp {
|
||||
force-hpd;
|
||||
pinctrl-names = "default";
|
||||
@@ -704,7 +718,9 @@
|
||||
interrupts = <RK_PA2 IRQ_TYPE_LEVEL_LOW>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&fusb0_int_pin>;
|
||||
- vbus-supply = <&vbus_typec>;
|
||||
+ vbus-supply = <&vbus_5vout>;
|
||||
+ usb-role-switch = <&typec_extcon_bridge>;
|
||||
+ extcon = <&typec_extcon_bridge>;
|
||||
|
||||
connector {
|
||||
compatible = "usb-c-connector";
|
||||
@@ -717,6 +733,15 @@
|
||||
source-pdos =
|
||||
<PDO_FIXED(5000, 1400, PDO_FIXED_USB_COMM | PDO_FIXED_DUAL_ROLE | PDO_FIXED_DATA_SWAP)>;
|
||||
try-power-role = "sink";
|
||||
+ mode-switch = <&typec_extcon_bridge>;
|
||||
+ orientation-switch = <&typec_extcon_bridge>;
|
||||
+
|
||||
+ altmodes {
|
||||
+ dp {
|
||||
+ svid = <0xff01>;
|
||||
+ vdo = <0x0c0046>;
|
||||
+ };
|
||||
+ };
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
@@ -984,6 +1009,7 @@
|
||||
};
|
||||
|
||||
&tcphy0 {
|
||||
+ extcon = <&typec_extcon_bridge>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
@@ -1017,13 +1043,20 @@
|
||||
|
||||
&u2phy0 {
|
||||
status = "okay";
|
||||
+ extcon = <&typec_extcon_bridge>;
|
||||
|
||||
u2phy0_otg: otg-port {
|
||||
+ /*
|
||||
+ * Type-C port on the left side of the chasis.
|
||||
+ */
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
u2phy0_host: host-port {
|
||||
- phy-supply = <&vcc5v0_otg>;
|
||||
+ /*
|
||||
+ * USB 2.0 host port for the keyboard (internally connected).
|
||||
+ */
|
||||
+ phy-supply = <&vcc5v0_usb>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
@@ -1038,11 +1071,18 @@
|
||||
status = "okay";
|
||||
|
||||
u2phy1_otg: otg-port {
|
||||
+ /*
|
||||
+ * USB 3.0 A port on the left side of the chasis.
|
||||
+ */
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
u2phy1_host: host-port {
|
||||
- phy-supply = <&vcc5v0_otg>;
|
||||
+ /*
|
||||
+ * To the HUB that has USB camera and USB 2.0 port on the right
|
||||
+ * side of the chasis.
|
||||
+ */
|
||||
+ phy-supply = <&vcc5v0_usb>;
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
@@ -1093,7 +1133,8 @@
|
||||
};
|
||||
|
||||
&usbdrd_dwc3_0 {
|
||||
- dr_mode = "host";
|
||||
+ dr_mode = "otg";
|
||||
+ extcon = <&typec_extcon_bridge>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
--
|
||||
cgit v1.2.3
|
||||
|
|
@ -1,16 +1,17 @@
|
|||
# Template file for 'pinebookpro-kernel'
|
||||
pkgname=pinebookpro-kernel
|
||||
version=5.15.74
|
||||
version=6.1.9
|
||||
revision=1
|
||||
archs="aarch64*"
|
||||
short_desc="Linux kernel for Pinebook Pro"
|
||||
maintainer="Renato Aguiar <renato@renatoaguiar.net>"
|
||||
maintainer="Cameron Nemo <cam@nohom.org>"
|
||||
license="GPL-2.0-only"
|
||||
homepage="https://www.kernel.org"
|
||||
distfiles="https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-${version%.*}.tar.xz
|
||||
https://cdn.kernel.org/pub/linux/kernel/v5.x/patch-${version}.xz"
|
||||
checksum="57b2cf6991910e3b67a1b3490022e8a0674b6965c74c12da1e99d138d1991ee8
|
||||
c820aa0d09647e9b9d32ff746d8581600696f5a16b1485af9c9826c228e990ec"
|
||||
distfiles="https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-${version%.*}.tar.xz"
|
||||
distfiles="https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-${version%.*}.tar.xz
|
||||
https://cdn.kernel.org/pub/linux/kernel/v6.x/patch-${version}.xz"
|
||||
checksum="2ca1f17051a430f6fed1196e4952717507171acfd97d96577212502703b25deb
|
||||
64e27f1de56225372d29ff92dc2d8fca6ae961e7470f2364e98c5af0aef261dc"
|
||||
skip_extraction="patch-${version}.xz"
|
||||
python_version=3
|
||||
|
||||
|
@ -21,7 +22,7 @@ noshlibprovides=yes
|
|||
preserve=yes
|
||||
|
||||
hostmakedepends="tar xz bc elfutils-devel flex gmp-devel kmod libmpc-devel
|
||||
openssl-devel perl uboot-mkimage cpio pahole python3"
|
||||
openssl-devel perl uboot-mkimage cpio pahole python3 zstd"
|
||||
|
||||
_kernver="${version}_${revision}"
|
||||
triggers="kernel-hooks"
|
||||
|
@ -161,7 +162,7 @@ do_install() {
|
|||
cp -a drivers/media/pci/${i}/*.h ${hdrdest}/drivers/media/pci/${i}
|
||||
done
|
||||
# usb
|
||||
for i in cpia2 em28xx pwc; do
|
||||
for i in em28xx pwc; do
|
||||
mkdir -p ${hdrdest}/drivers/media/usb/${i}
|
||||
cp -a drivers/media/usb/${i}/*.h ${hdrdest}/drivers/media/usb/${i}
|
||||
done
|
||||
|
|
Loading…
Reference in New Issue