Received: by 2002:a05:6a10:1a4d:0:0:0:0 with SMTP id nk13csp6023428pxb; Mon, 14 Feb 2022 13:21:13 -0800 (PST) X-Google-Smtp-Source: ABdhPJwDIFtqF2wFCgJvS2ET7GO13aQ1KNU22p2fY5Pqdixe01cWmYncfdKoJT1PVy9iJFIj50S5 X-Received: by 2002:a17:902:da81:: with SMTP id j1mr791864plx.3.1644873673160; Mon, 14 Feb 2022 13:21:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1644873673; cv=none; d=google.com; s=arc-20160816; b=U78pCE24ZbWAqbhZq0bfOxRprp2CoJU0QmsNf/vqS7i4GH3GSsDoNphuKKoK0E0sUS Q+q1YA8MCg8wW7/2KQie580XGIKBKrDcHWSs5aR0MBcwBsP3K228QREz0aZVWI8t2fLY 5zmhaiqj+j7PKGWYY7sMmjRF4zuR7ouc3CcIrop/Arf+o0DeZdeKzCr7GhW91U2tX8Wl kO6nfOMDxK8PGC8OdliRiU8yO5/yQdlyyFMTB12zn97PLBifLY0XDQ7xgSbsf8EvdH/6 fKQG3tq+hZUsM8DUn56VN1zw+lkYOfcI05oB2wlx1/7KDx7B94tgJCc/yJhWdh7CSU+C 3Tsw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=0X10fqVg5ykSsl0oa12K6qvRRlEqIFV+m6yNZED4E7A=; b=ti5FCTJeXwAXaaYerXO4t5rQOacYKwGtLcX9o7vQS0lIX3BZ66FKj9FqkJYqapWThx lvtDXphi2xhEPanUA5QkRv9vSFCBRiIQoVRvb6wS7ygtUW9N7Num752ViaaEe1M2ePZo rm8ztj5H1hUV6DQHOdVzRuedaNsF/KV0Dsh6xQCOYOs/ms+f2yB0woLlQ941mQ6zb9PW qJDgWzWgEMBGckkdqk+iXTEoZfpEYxwHL+aYgS/awEz/P2aZi8baJnhYtX/geadh/A+z dSgbnctC60GkjlusWbd1Xy7SoJJ9RybwOGXOwjBrCh/wkL8ntdvTowHXO/DQEDlcHzkN slhg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=rKKxy2R8; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id v21si3167376pfc.187.2022.02.14.13.21.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Feb 2022 13:21:13 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=rKKxy2R8; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 2A2BD8A312; Mon, 14 Feb 2022 12:37:36 -0800 (PST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1353566AbiBNMqR (ORCPT + 99 others); Mon, 14 Feb 2022 07:46:17 -0500 Received: from mxb-00190b01.gslb.pphosted.com ([23.128.96.19]:39664 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245676AbiBNMqO (ORCPT ); Mon, 14 Feb 2022 07:46:14 -0500 Received: from mail-pl1-x635.google.com (mail-pl1-x635.google.com [IPv6:2607:f8b0:4864:20::635]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5A9F64B42A for ; Mon, 14 Feb 2022 04:46:07 -0800 (PST) Received: by mail-pl1-x635.google.com with SMTP id z17so10414741plb.9 for ; Mon, 14 Feb 2022 04:46:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=0X10fqVg5ykSsl0oa12K6qvRRlEqIFV+m6yNZED4E7A=; b=rKKxy2R8fGUZxy4yN6sE3nZA0tl06MCzW2Ls++PHOTDVrPXLzygCzac8nZSMCDQyrM CprDceB4vcha58qMi6w99egwcMY599n+6rvJIdQ9zM76OCGOGZY9Mdkm/vTmQ2UNLxyS 3ETiLInfrZfB/IgOhZ8Fd6PRzRQz917hIRlcakTbWCl9LLEF3Oval4zMV11mkhjXR5Eg oMpcmm8mwP07qi2AScrsM2z3ft9FLxi+qRE+Fkq7FzDUDWd3S3YaTRZ4v/bhju5gQXi9 bk7AyOTUc2/elIt8DFwxUniVxI292uGSKGYnnqVP8mToeF278huGYKjGU5y3xKJ0xqBK 8fyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=0X10fqVg5ykSsl0oa12K6qvRRlEqIFV+m6yNZED4E7A=; b=TEAmRoLaBSr2/zcq6J0f4TzhCpvy9eDlTnRIVqCLPPAhmk2rLn5YC6zkC8BfU7P4p8 jphY/5iHvS1GT/F50Nm61HUcld4VGKumfDTyqxHiZS7+/7wc4UpHJptojgZsKTk6nlhU 5nbJ6wZyx0I8qQja2B0200T00G89fG2QPEIiaSbF04tcCfuAs01xk+vDcRAtNzpoamsW IAQDQbIaV8VBFdjYVK505eReOYed+hR72J4Oxh0V7kH8AmZ1yz4UP37Dvx3fCCKsnYo/ R3zd3acIEj5kY4OvKhkDzK5LS+INJUTvwStSPMIXaCb+ohdswAv1dikfws8cMuguYtIO 0o2A== X-Gm-Message-State: AOAM530ez/NfbQ3uH64cGriKHpadEi/ECIIgEV55S5/AfeLNXs92gBDj Mmgx3+BvSTKzAs8GFuBgTH6GdyVzpU9p+zHQvbuLJQ== X-Received: by 2002:a17:902:714a:: with SMTP id u10mr14145494plm.21.1644842766711; Mon, 14 Feb 2022 04:46:06 -0800 (PST) MIME-Version: 1.0 References: <20220213103437.3363848-1-hsinyi@chromium.org> In-Reply-To: <20220213103437.3363848-1-hsinyi@chromium.org> From: Robert Foss Date: Mon, 14 Feb 2022 13:45:55 +0100 Message-ID: Subject: Re: [PATCH v7 1/4] drm/bridge: anx7625: send DPCD command to downstream To: Hsin-Yi Wang Cc: Rob Herring , Xin Ji , David Airlie , Daniel Vetter , Laurent Pinchart , dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Neil Armstrong , Jonas Karlman , Jernej Skrabec , Sam Ravnborg , Maxime Ripard Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sun, 13 Feb 2022 at 11:34, Hsin-Yi Wang wrote: > > From: Xin Ji > > Send DPCD command to downstream before anx7625 power down, > let downstream monitor enter into standby mode. > > Signed-off-by: Xin Ji > Signed-off-by: Hsin-Yi Wang > Reviewed-by: Hsin-Yi Wang > --- > v3->v4: > Use common DP_AUX_NATIVE_READ/WRITE > > Previously in: > https://patchwork.kernel.org/project/dri-devel/patch/1f36f8bf0a48fb2bba17bacec23700e58c1d407d.1641891874.git.xji@analogixsemi.com/ > --- > drivers/gpu/drm/bridge/analogix/anx7625.c | 42 +++++++++++++++++++---- > drivers/gpu/drm/bridge/analogix/anx7625.h | 2 -- > 2 files changed, 35 insertions(+), 9 deletions(-) > > diff --git a/drivers/gpu/drm/bridge/analogix/anx7625.c b/drivers/gpu/drm/bridge/analogix/anx7625.c > index 76662fce4ce61d..17b23940549a42 100644 > --- a/drivers/gpu/drm/bridge/analogix/anx7625.c > +++ b/drivers/gpu/drm/bridge/analogix/anx7625.c > @@ -129,6 +129,23 @@ static int anx7625_reg_write(struct anx7625_data *ctx, > return ret; > } > > +static int anx7625_reg_block_write(struct anx7625_data *ctx, > + struct i2c_client *client, > + u8 reg_addr, u8 len, u8 *buf) > +{ > + int ret; > + struct device *dev = &client->dev; > + > + i2c_access_workaround(ctx, client); > + > + ret = i2c_smbus_write_i2c_block_data(client, reg_addr, len, buf); > + if (ret < 0) > + dev_err(dev, "write i2c block failed id=%x\n:%x", > + client->addr, reg_addr); > + > + return ret; > +} > + > static int anx7625_write_or(struct anx7625_data *ctx, > struct i2c_client *client, > u8 offset, u8 mask) > @@ -214,8 +231,8 @@ static int wait_aux_op_finish(struct anx7625_data *ctx) > return 0; > } > > -static int anx7625_aux_dpcd_read(struct anx7625_data *ctx, > - u32 address, u8 len, u8 *buf) > +static int anx7625_aux_dpcd_trans(struct anx7625_data *ctx, u8 op, > + u32 address, u8 len, u8 *buf) > { > struct device *dev = &ctx->client->dev; > int ret; > @@ -231,8 +248,7 @@ static int anx7625_aux_dpcd_read(struct anx7625_data *ctx, > addrm = (address >> 8) & 0xFF; > addrh = (address >> 16) & 0xFF; > > - cmd = DPCD_CMD(len, DPCD_READ); > - cmd = ((len - 1) << 4) | 0x09; > + cmd = DPCD_CMD(len, op); > > /* Set command and length */ > ret = anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, > @@ -246,6 +262,9 @@ static int anx7625_aux_dpcd_read(struct anx7625_data *ctx, > ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, > AP_AUX_ADDR_19_16, addrh); > > + if (op == DP_AUX_NATIVE_WRITE) > + ret |= anx7625_reg_block_write(ctx, ctx->i2c.rx_p0_client, > + AP_AUX_BUFF_START, len, buf); > /* Enable aux access */ > ret |= anx7625_write_or(ctx, ctx->i2c.rx_p0_client, > AP_AUX_CTRL_STATUS, AP_AUX_CTRL_OP_EN); > @@ -255,14 +274,17 @@ static int anx7625_aux_dpcd_read(struct anx7625_data *ctx, > return -EIO; > } > > - usleep_range(2000, 2100); > - > ret = wait_aux_op_finish(ctx); > if (ret) { > dev_err(dev, "aux IO error: wait aux op finish.\n"); > return ret; > } > > + /* Write done */ > + if (op == DP_AUX_NATIVE_WRITE) > + return 0; > + > + /* Read done, read out dpcd data */ > ret = anx7625_reg_block_read(ctx, ctx->i2c.rx_p0_client, > AP_AUX_BUFF_START, len, buf); > if (ret < 0) { > @@ -845,7 +867,7 @@ static int anx7625_hdcp_enable(struct anx7625_data *ctx) > } > > /* Read downstream capability */ > - anx7625_aux_dpcd_read(ctx, 0x68028, 1, &bcap); > + anx7625_aux_dpcd_trans(ctx, DP_AUX_NATIVE_READ, 0x68028, 1, &bcap); > if (!(bcap & 0x01)) { > pr_warn("downstream not support HDCP 1.4, cap(%x).\n", bcap); > return 0; > @@ -918,6 +940,7 @@ static void anx7625_dp_stop(struct anx7625_data *ctx) > { > struct device *dev = &ctx->client->dev; > int ret; > + u8 data; > > DRM_DEV_DEBUG_DRIVER(dev, "stop dp output\n"); > > @@ -929,6 +952,11 @@ static void anx7625_dp_stop(struct anx7625_data *ctx) > ret |= anx7625_write_and(ctx, ctx->i2c.tx_p2_client, 0x08, 0x7f); > > ret |= anx7625_video_mute_control(ctx, 1); > + > + dev_dbg(dev, "notify downstream enter into standby\n"); > + /* Downstream monitor enter into standby mode */ > + data = 2; > + ret |= anx7625_aux_dpcd_trans(ctx, DP_AUX_NATIVE_WRITE, 0x000600, 1, &data); > if (ret < 0) > DRM_DEV_ERROR(dev, "IO error : mute video fail\n"); > > diff --git a/drivers/gpu/drm/bridge/analogix/anx7625.h b/drivers/gpu/drm/bridge/analogix/anx7625.h > index 56165f5b254c14..64a8ab56529404 100644 > --- a/drivers/gpu/drm/bridge/analogix/anx7625.h > +++ b/drivers/gpu/drm/bridge/analogix/anx7625.h > @@ -242,8 +242,6 @@ > > #define AP_AUX_COMMAND 0x27 /* com+len */ > #define LENGTH_SHIFT 4 > -#define DPCD_READ 0x09 > -#define DPCD_WRITE 0x08 > #define DPCD_CMD(len, cmd) ((((len) - 1) << LENGTH_SHIFT) | (cmd)) > > /* Bit 0&1: 3D video structure */ > -- > 2.35.1.265.g69c8d7142f-goog > Applied series to drm-misc-next.