Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp2650906pxj; Mon, 14 Jun 2021 04:04:06 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxRkuz7sfk6fz5rkUzpRIH0J1IeWOgdwyFQ4xyv+yQpFK2aACgO2Vex/53HzZzG58DHOaMZ X-Received: by 2002:a17:906:4e96:: with SMTP id v22mr14499653eju.23.1623668645958; Mon, 14 Jun 2021 04:04:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1623668645; cv=none; d=google.com; s=arc-20160816; b=dvNtAXhzaIfrqJnliJO5luCWza2bkJSp+jSUoDjN+GFxmvtYy5CTHQH1iW0JJXoFsw w25G0vHk1jhVYwj5hj93HVhc74Szlh5575Z3XzvVwsaquR3TG5pfCPZI29xeUtqOvwX3 7C3f0s1FzteMXHx0x7tSAvvk91dVFHEM4cY3jTQHCkUol4mNfZUu+d9HWKhS7OFMO6nO 2Qtn94mI58K9+VTkug6J3kEt9HJAjde0McLhYqwpqAVhuSjIE2GFUTcb4HvE9Uh1bKi3 9fR+DwoAsvl8b2R7gB7f5oXrpXtO21Bev7jm+9/bhVmmlBpGP9G3YnDBsQL0xuT/5J1n wVmw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=ufgodz6Xr370Ql8YqDbcmCK+qJhww7dYr0leJx6kCco=; b=d+UHhrK55av49vxUptB/YqyZ9AGUEE5aKSFi6YTzyojBMNFQ+mRoDE8wZ6Dy4NWWye mUZZwX+aJQsXdQy+FXTVrdM9ckEqaLxULhz0gJH4p765zN+rbTyYs/PRd9YEn04wV9Gq QpO4YbqoCgJ1XUEyQnP1lmBoCIO64qjQ72rLmlgZXiRLF+fFfV8oJq1gMb9IYhkqT8g2 wYO0V6LeCHQRx9Ep65/THodWmeR9Ly4qsekgkn8qzp5wgPF6ylyEUIriPqqfEzHtJBXQ jrXvqnAHZpY8YUSPnoDxfSBX1IUhhUx6TTM5aY1MTDvZd0N55yXDjFhYurQARVdzILPD DoTg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=WLrzyX2o; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id c1si10934604edv.260.2021.06.14.04.03.43; Mon, 14 Jun 2021 04:04:05 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=WLrzyX2o; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234615AbhFNLCc (ORCPT + 99 others); Mon, 14 Jun 2021 07:02:32 -0400 Received: from mail.kernel.org ([198.145.29.99]:59482 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234436AbhFNKxo (ORCPT ); Mon, 14 Jun 2021 06:53:44 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 01C076141C; Mon, 14 Jun 2021 10:40:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1623667201; bh=3+8WzlBtbKUmzTGRwl3VbJgmYkOf+TNqmBx7n5EBUEI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WLrzyX2oOJ192smIDUSalzsmBefmQSzDAG5BWHVEj77GETYrKsYEUgqVwJk0wTLdk idS6SnRuVOIWHfiar7Yjx5FzOExwcpAnfp3kpcOFin1KkzT+hmvZOssDTH7m4rRRdi 91ioyfM90gP+ivrEu6epliCil204+2TWp5rQ17ns= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Stefan Agner , Johan Hovold Subject: [PATCH 5.4 58/84] USB: serial: cp210x: fix alternate function for CP2102N QFN20 Date: Mon, 14 Jun 2021 12:27:36 +0200 Message-Id: <20210614102648.343188071@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210614102646.341387537@linuxfoundation.org> References: <20210614102646.341387537@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Stefan Agner commit 6f7ec77cc8b64ff5037c1945e4650c65c458037d upstream. The QFN20 part has a different GPIO/port function assignment. The configuration struct bit field ordered as TX/RX/RS485/WAKEUP/CLK which exactly matches GPIO0-3 for QFN24/28. However, QFN20 has a different GPIO to primary function assignment. Special case QFN20 to follow to properly detect which GPIOs are available. Signed-off-by: Stefan Agner Link: https://lore.kernel.org/r/51830b2b24118eb0f77c5c9ac64ffb2f519dbb1d.1622218300.git.stefan@agner.ch Fixes: c8acfe0aadbe ("USB: serial: cp210x: implement GPIO support for CP2102N") Cc: stable@vger.kernel.org # 4.19 Signed-off-by: Johan Hovold Signed-off-by: Greg Kroah-Hartman --- drivers/usb/serial/cp210x.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) --- a/drivers/usb/serial/cp210x.c +++ b/drivers/usb/serial/cp210x.c @@ -507,6 +507,12 @@ struct cp210x_single_port_config { #define CP210X_2NCONFIG_GPIO_RSTLATCH_IDX 587 #define CP210X_2NCONFIG_GPIO_CONTROL_IDX 600 +/* CP2102N QFN20 port configuration values */ +#define CP2102N_QFN20_GPIO2_TXLED_MODE BIT(2) +#define CP2102N_QFN20_GPIO3_RXLED_MODE BIT(3) +#define CP2102N_QFN20_GPIO1_RS485_MODE BIT(4) +#define CP2102N_QFN20_GPIO0_CLK_MODE BIT(6) + /* CP210X_VENDOR_SPECIFIC, CP210X_WRITE_LATCH call writes these 0x2 bytes. */ struct cp210x_gpio_write { u8 mask; @@ -1691,7 +1697,19 @@ static int cp2102n_gpioconf_init(struct priv->gpio_pushpull = (gpio_pushpull >> 3) & 0x0f; /* 0 indicates GPIO mode, 1 is alternate function */ - priv->gpio_altfunc = (gpio_ctrl >> 2) & 0x0f; + if (priv->partnum == CP210X_PARTNUM_CP2102N_QFN20) { + /* QFN20 is special... */ + if (gpio_ctrl & CP2102N_QFN20_GPIO0_CLK_MODE) /* GPIO 0 */ + priv->gpio_altfunc |= BIT(0); + if (gpio_ctrl & CP2102N_QFN20_GPIO1_RS485_MODE) /* GPIO 1 */ + priv->gpio_altfunc |= BIT(1); + if (gpio_ctrl & CP2102N_QFN20_GPIO2_TXLED_MODE) /* GPIO 2 */ + priv->gpio_altfunc |= BIT(2); + if (gpio_ctrl & CP2102N_QFN20_GPIO3_RXLED_MODE) /* GPIO 3 */ + priv->gpio_altfunc |= BIT(3); + } else { + priv->gpio_altfunc = (gpio_ctrl >> 2) & 0x0f; + } if (priv->partnum == CP210X_PARTNUM_CP2102N_QFN28) { /*