From patchwork Fri Mar 29 12:35:58 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Yannick FERTRE X-Patchwork-Id: 10876985 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CE09D922 for ; Fri, 29 Mar 2019 12:37:30 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B9D2B28B00 for ; Fri, 29 Mar 2019 12:37:30 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id ADB2B28FFD; Fri, 29 Mar 2019 12:37:30 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 5B2D528B00 for ; Fri, 29 Mar 2019 12:37:30 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 74F3D6E8DF; Fri, 29 Mar 2019 12:37:29 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mx07-00178001.pphosted.com (mx07-00178001.pphosted.com [62.209.51.94]) by gabe.freedesktop.org (Postfix) with ESMTPS id 46CF96E8DF for ; Fri, 29 Mar 2019 12:37:28 +0000 (UTC) Received: from pps.filterd (m0046668.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x2TCWl9A004462; Fri, 29 Mar 2019 13:36:24 +0100 Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by mx07-00178001.pphosted.com with ESMTP id 2rddhc4x5u-1 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Fri, 29 Mar 2019 13:36:24 +0100 Received: from zeta.dmz-eu.st.com (zeta.dmz-eu.st.com [164.129.230.9]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id D297A31; Fri, 29 Mar 2019 12:36:21 +0000 (GMT) Received: from Webmail-eu.st.com (Safex1hubcas22.st.com [10.75.90.92]) by zeta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 8B7CB2A3F; Fri, 29 Mar 2019 12:36:21 +0000 (GMT) Received: from SAFEX1HUBCAS23.st.com (10.75.90.47) by Safex1hubcas22.st.com (10.75.90.92) with Microsoft SMTP Server (TLS) id 14.3.361.1; Fri, 29 Mar 2019 13:36:21 +0100 Received: from localhost (10.201.23.97) by webmail-ga.st.com (10.75.90.48) with Microsoft SMTP Server (TLS) id 14.3.435.0; Fri, 29 Mar 2019 13:36:21 +0100 From: =?utf-8?q?Yannick_Fertr=C3=A9?= To: Andrzej Hajda , Laurent Pinchart , David Airlie , "Daniel Vetter" , , , Subject: [PATCH] drm/bridge: sii902x: initialize CEC device Date: Fri, 29 Mar 2019 13:35:58 +0100 Message-ID: <1553862958-6454-1-git-send-email-yannick.fertre@st.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 X-Originating-IP: [10.201.23.97] X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:, , definitions=2019-03-29_07:, , signatures=0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Yannick Fertre , Alexandre Torgue , Benjamin Gaignard , Philippe Cornu Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP Initialize the CEC device embedded into sii902x bridge. By default, the CEC device must be disabled to allow other CEC devices to bypass the bridge. Signed-off-by: Yannick Fertré --- drivers/gpu/drm/bridge/sii902x.c | 64 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/drivers/gpu/drm/bridge/sii902x.c b/drivers/gpu/drm/bridge/sii902x.c index 08e12fe..d33c097 100644 --- a/drivers/gpu/drm/bridge/sii902x.c +++ b/drivers/gpu/drm/bridge/sii902x.c @@ -83,9 +83,15 @@ #define SII902X_I2C_BUS_ACQUISITION_TIMEOUT_MS 500 +#define SII902X_CEC_I2C_ADDR_DEFAULT 0x60 +#define SII902X_CEC_SETUP 0x8e +#define CEC_EN BIT(4) + struct sii902x { struct i2c_client *i2c; + struct i2c_client *i2c_cec; struct regmap *regmap; + struct regmap *regmap_cec; struct drm_bridge bridge; struct drm_connector connector; struct gpio_desc *reset_gpio; @@ -331,6 +337,22 @@ static const struct regmap_config sii902x_regmap_config = { .cache_type = REGCACHE_NONE, }; +static const struct regmap_range sii902x_cec_volatile_ranges[] = { + { .range_min = 0x84, .range_max = 0xe4 }, +}; + +static const struct regmap_access_table sii902x_cec_volatile_table = { + .yes_ranges = sii902x_cec_volatile_ranges, + .n_yes_ranges = ARRAY_SIZE(sii902x_cec_volatile_ranges), +}; + +static const struct regmap_config sii902x_cec_regmap_config = { + .reg_bits = 8, + .val_bits = 8, + .volatile_table = &sii902x_cec_volatile_table, + .cache_type = REGCACHE_NONE, +}; + static irqreturn_t sii902x_interrupt(int irq, void *data) { struct sii902x *sii902x = data; @@ -460,6 +482,39 @@ static int sii902x_i2c_bypass_deselect(struct i2c_mux_core *mux, u32 chan_id) return 0; } +int sii902x_cec_init(struct device *dev, struct sii902x *sii902x) +{ + struct i2c_client *client; + int ret; + + client = i2c_new_secondary_device(sii902x->i2c, "cec", + SII902X_CEC_I2C_ADDR_DEFAULT); + if (!client) + return -EINVAL; + + sii902x->i2c_cec = client; + + i2c_set_clientdata(sii902x->i2c_cec, sii902x); + + sii902x->regmap_cec = devm_regmap_init_i2c(sii902x->i2c_cec, + &sii902x_cec_regmap_config); + if (IS_ERR(sii902x->regmap_cec)) { + ret = PTR_ERR(sii902x->regmap_cec); + goto err; + } + + /* + * By default, CEC must be disabled to allow other CEC devives + * to bypass the bridge. + */ + regmap_update_bits(sii902x->regmap_cec, SII902X_CEC_SETUP, CEC_EN, 0); + + return 0; +err: + i2c_unregister_device(sii902x->i2c_cec); + return ret; +} + static int sii902x_probe(struct i2c_client *client, const struct i2c_device_id *id) { @@ -542,7 +597,16 @@ static int sii902x_probe(struct i2c_client *client, return -ENOMEM; sii902x->i2cmux->priv = sii902x; + + ret = sii902x_cec_init(dev, sii902x); + if (ret) + goto err; + return i2c_mux_add_adapter(sii902x->i2cmux, 0, 0, 0); +err: + drm_bridge_remove(&sii902x->bridge); + + return ret; } static int sii902x_remove(struct i2c_client *client)