From patchwork Thu Nov 23 13:47:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frieder Schrempf X-Patchwork-Id: 13466286 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=fris.de header.i=@fris.de header.b="N8Dg/nEY" X-Greylist: delayed 351 seconds by postgrey-1.37 at lindbergh.monkeyblade.net; Thu, 23 Nov 2023 05:53:37 PST Received: from mail.fris.de (unknown [IPv6:2a01:4f8:c2c:390b::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A22B1B9 for ; Thu, 23 Nov 2023 05:53:37 -0800 (PST) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 54028BFC26; Thu, 23 Nov 2023 14:47:37 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fris.de; s=dkim; t=1700747259; h=from:subject:date:message-id:to:cc:mime-version: content-transfer-encoding; bh=P+qJkp9/x0LF6AlZcKBVhLb5rg5xcRwmC1heMFnS1dA=; b=N8Dg/nEYgbKV1lxtWHHDD4991rt98n2eXNnl2jtHjw39cN+6imtMRTEbxsWR8oxQkgwfNl MUDWm+qqaXJ+SYIl2SvdJ5nL13uAQTjDicZzI1X+gFQIwN05SJMipPTE7tpYdA0UFxPevh z0vC9g2v6+BcApw3ZxYZPohpyWbjea4lj6Phoe5btvVmQ9vKhoYGbfSPCeCnJY9dvLXKw0 EBvdpkD1zZne/P8F1othz9D13GEzX6Ysok6lnMOyxAyMySv2lgHlDrnHyIYVB48EtAStCm wWwU+SH1O/lVsdvHc41lKjRYpWV7Lz4CYAVR8Mi6x/P+GuUtADMPf4S8nxy/kA== From: Frieder Schrempf To: Greg Kroah-Hartman , linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, Matthias Kaehlcke Cc: Frieder Schrempf , Anand Moon , Benjamin Bara , Icenowy Zheng , Rob Herring , =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= Subject: [PATCH 1/2] usb: misc: onboard_usb_hub: Add support for clock input Date: Thu, 23 Nov 2023 14:47:20 +0100 Message-ID: <20231123134728.709533-1-frieder@fris.de> Precedence: bulk X-Mailing-List: linux-usb@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Last-TLS-Session-Version: TLSv1.3 From: Frieder Schrempf Most onboard USB hubs have a dedicated crystal oscillator but on some boards the clock signal for the hub is provided by the SoC. In order to support this, we add the possibility of specifying a clock in the devicetree that gets enabled/disabled when the hub is powered up/down. Signed-off-by: Frieder Schrempf --- drivers/usb/misc/onboard_usb_hub.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/drivers/usb/misc/onboard_usb_hub.c b/drivers/usb/misc/onboard_usb_hub.c index a341b2fbb7b44..e710e3c82ba9b 100644 --- a/drivers/usb/misc/onboard_usb_hub.c +++ b/drivers/usb/misc/onboard_usb_hub.c @@ -5,6 +5,7 @@ * Copyright (c) 2022, Google LLC */ +#include #include #include #include @@ -60,12 +61,19 @@ struct onboard_hub { bool going_away; struct list_head udev_list; struct mutex lock; + struct clk *clk; }; static int onboard_hub_power_on(struct onboard_hub *hub) { int err; + err = clk_prepare_enable(hub->clk); + if (err) { + dev_err(hub->dev, "failed to enable clock: %d\n", err); + return err; + } + err = regulator_bulk_enable(hub->pdata->num_supplies, hub->supplies); if (err) { dev_err(hub->dev, "failed to enable supplies: %d\n", err); @@ -92,6 +100,8 @@ static int onboard_hub_power_off(struct onboard_hub *hub) return err; } + clk_disable_unprepare(hub->clk); + hub->is_powered_on = false; return 0; @@ -266,6 +276,10 @@ static int onboard_hub_probe(struct platform_device *pdev) return err; } + hub->clk = devm_clk_get_optional(dev, NULL); + if (IS_ERR(hub->clk)) + return dev_err_probe(dev, PTR_ERR(hub->clk), "failed to get clock\n"); + hub->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH); if (IS_ERR(hub->reset_gpio)) From patchwork Thu Nov 23 13:47:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frieder Schrempf X-Patchwork-Id: 13466289 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=fris.de header.i=@fris.de header.b="DjSml9xe" X-Greylist: delayed 955 seconds by postgrey-1.37 at lindbergh.monkeyblade.net; Thu, 23 Nov 2023 06:03:37 PST Received: from mail.fris.de (mail.fris.de [116.203.77.234]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 882411A8 for ; Thu, 23 Nov 2023 06:03:37 -0800 (PST) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 18DBAC00AE; Thu, 23 Nov 2023 14:47:43 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fris.de; s=dkim; t=1700747263; h=from:subject:date:message-id:to:cc:mime-version: content-transfer-encoding:in-reply-to:references; bh=Pi1atu12zkAcY/0bmm6zXxbZy+hVAt8zjD1oA7GM5ps=; b=DjSml9xeT0BDWxXcWv3y8oXbTULW96QVQjWzGnwMfFpNWivzdsiVT/uBAlv1k5+4moGrdC sRang3SAPExGwUQtYXPYVrLtf82cNCbGPQSrUR3Nq858jJtW2QDpRFgbk+1Wx74pEl9IH7 iI0j1/kx7OhA0VeQKrfS2Gb2kcNi9Ko+ZwFX4HiBN/D+g1ZLV1JkDz/E8yLbw9g1jMtO7g 6rgydz+EUzbmK93ooyqdGeRKEvNxHSxyaoSFa4pc0o9PO56+CH/YQoGZqqpl9Nm8eQdxZT FR85dQXw8PxFojCUf1vURgBgXf+DmnO+X05IEQHDVm6iX5b2yGVNt+msGcxWLw== From: Frieder Schrempf To: Greg Kroah-Hartman , linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, Matthias Kaehlcke Cc: Frieder Schrempf , Anand Moon , Benjamin Bara , Icenowy Zheng , Javier Carrasco , Rob Herring , =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= Subject: [PATCH 2/2] usb: misc: onboard_usb_hub: Add support for Cypress CY7C6563x Date: Thu, 23 Nov 2023 14:47:21 +0100 Message-ID: <20231123134728.709533-2-frieder@fris.de> In-Reply-To: <20231123134728.709533-1-frieder@fris.de> References: <20231123134728.709533-1-frieder@fris.de> Precedence: bulk X-Mailing-List: linux-usb@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Last-TLS-Session-Version: TLSv1.3 From: Frieder Schrempf The Cypress CY7C6563x is a 2/4-port USB 2.0 hub. Add support for this hub in the driver in order to bring up reset, supply or clock dependencies. There is no reset pulse width given in the datasheet so we expect a minimal value of 1us to be enough. This hasn't been tested though due to lack of hardware which has the reset connected to a GPIO. Signed-off-by: Frieder Schrempf --- drivers/usb/misc/onboard_usb_hub.c | 1 + drivers/usb/misc/onboard_usb_hub.h | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/drivers/usb/misc/onboard_usb_hub.c b/drivers/usb/misc/onboard_usb_hub.c index e710e3c82ba9b..e2e011036d359 100644 --- a/drivers/usb/misc/onboard_usb_hub.c +++ b/drivers/usb/misc/onboard_usb_hub.c @@ -440,6 +440,7 @@ static void onboard_hub_usbdev_disconnect(struct usb_device *udev) static const struct usb_device_id onboard_hub_id_table[] = { { USB_DEVICE(VENDOR_ID_CYPRESS, 0x6504) }, /* CYUSB33{0,1,2}x/CYUSB230x 3.0 */ { USB_DEVICE(VENDOR_ID_CYPRESS, 0x6506) }, /* CYUSB33{0,1,2}x/CYUSB230x 2.0 */ + { USB_DEVICE(VENDOR_ID_CYPRESS, 0x6570) }, /* CY7C6563x 2.0 */ { USB_DEVICE(VENDOR_ID_GENESYS, 0x0608) }, /* Genesys Logic GL850G USB 2.0 */ { USB_DEVICE(VENDOR_ID_GENESYS, 0x0610) }, /* Genesys Logic GL852G USB 2.0 */ { USB_DEVICE(VENDOR_ID_GENESYS, 0x0620) }, /* Genesys Logic GL3523 USB 3.1 */ diff --git a/drivers/usb/misc/onboard_usb_hub.h b/drivers/usb/misc/onboard_usb_hub.h index c4e24a7b92904..67b2cc1e15e67 100644 --- a/drivers/usb/misc/onboard_usb_hub.h +++ b/drivers/usb/misc/onboard_usb_hub.h @@ -31,6 +31,11 @@ static const struct onboard_hub_pdata cypress_hx3_data = { .num_supplies = 2, }; +static const struct onboard_hub_pdata cypress_hx2vl_data = { + .reset_us = 1, + .num_supplies = 1, +}; + static const struct onboard_hub_pdata genesys_gl850g_data = { .reset_us = 3, .num_supplies = 1, @@ -54,6 +59,7 @@ static const struct of_device_id onboard_hub_match[] = { { .compatible = "usb451,8142", .data = &ti_tusb8041_data, }, { .compatible = "usb4b4,6504", .data = &cypress_hx3_data, }, { .compatible = "usb4b4,6506", .data = &cypress_hx3_data, }, + { .compatible = "usb4b4,6570", .data = &cypress_hx2vl_data, }, { .compatible = "usb5e3,608", .data = &genesys_gl850g_data, }, { .compatible = "usb5e3,610", .data = &genesys_gl852g_data, }, { .compatible = "usb5e3,620", .data = &genesys_gl852g_data, },