From patchwork Thu Feb 19 02:29:59 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Owen Kirby X-Patchwork-Id: 441523 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from arrakis.dune.hu (arrakis.dune.hu [78.24.191.176]) (using TLSv1.1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id D60651400DE for ; Thu, 19 Feb 2015 13:32:26 +1100 (AEDT) Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id 075C828C1AE; Thu, 19 Feb 2015 03:30:58 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on arrakis.dune.hu X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=BAYES_00 autolearn=unavailable version=3.3.2 Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id 9690328C18E for ; Thu, 19 Feb 2015 03:30:13 +0100 (CET) X-policyd-weight: using cached result; rate: -5.5 Received: from mail-pd0-f176.google.com (mail-pd0-f176.google.com [209.85.192.176]) by arrakis.dune.hu (Postfix) with ESMTPS for ; Thu, 19 Feb 2015 03:30:12 +0100 (CET) Received: by pdjp10 with SMTP id p10so5549688pdj.3 for ; Wed, 18 Feb 2015 18:30:15 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=V+9xYGHNbxFbk4HCcxLWo1JIAOm0jkHhAxxayzBsWt8=; b=H/+KSKDn6WaVX6Fl346jYyrFy/xB7AtqpDuGpWsz1WzYgph5962Oi6ha6uKXEULntD eEI36JDLa7WJbbfnzVdKbHgvoO2ndQrGdyR+GtVabqHKK5gEcn2q+DDxaAevGTueSDn6 GAmYJr5zjs0FYoib8Szm83mqtyiyg5WOE4+cRejFn53lHowSoUDmGFbaWLIEMw00Dd59 HxYvcjfuaSbzd1x/UwDL4aA05RfC84/tQHwWJDe8n0lleOXsKm1I3ty+mVS1GOtFoGgm W9iuzQFesMIchT/GcTWH6iWNUVtHawUOPHoIjkN96MF4HAP5RuuphA5OU1aou9kLDSXq UG8A== X-Gm-Message-State: ALoCoQmTUvEQfmMq1VStJgzXHJrf4X15Pn24jazFLnTddGKKgSMIh9CnG/NQp7RPjFopcPKkifCx X-Received: by 10.70.48.33 with SMTP id i1mr3373711pdn.153.1424313015171; Wed, 18 Feb 2015 18:30:15 -0800 (PST) Received: from xenon.microplex.com ([184.71.143.130]) by mx.google.com with ESMTPSA id hd4sm21846031pbc.86.2015.02.18.18.30.13 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 18 Feb 2015 18:30:14 -0800 (PST) From: Owen Kirby To: openwrt-devel@lists.openwrt.org Date: Wed, 18 Feb 2015 18:29:59 -0800 Message-Id: <1424313000-22714-3-git-send-email-osk@exegin.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1424313000-22714-1-git-send-email-osk@exegin.com> References: <1424313000-22714-1-git-send-email-osk@exegin.com> Subject: [OpenWrt-Devel] [PATCH 2/3] at91: USB gadget subsystem cleanup and driver fix. X-BeenThere: openwrt-devel@lists.openwrt.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: OpenWrt Development List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: openwrt-devel-bounces@lists.openwrt.org Sender: "openwrt-devel" Signed-off-by: Owen Kirby --- target/linux/at91/Makefile | 4 +- target/linux/at91/config-default | 8 --- target/linux/at91/modules.mk | 18 +++++ .../100-ARM-at91-build-dtb-for-LMU5000.patch | 2 +- .../200-ARM-at91-udc-clockfix-backport.patch | 82 ++++++++++++++++++++++ 5 files changed, 103 insertions(+), 11 deletions(-) create mode 100644 target/linux/at91/patches/200-ARM-at91-udc-clockfix-backport.patch diff --git a/target/linux/at91/Makefile b/target/linux/at91/Makefile index 040df33..e1c771a 100644 --- a/target/linux/at91/Makefile +++ b/target/linux/at91/Makefile @@ -10,13 +10,13 @@ ARCH:=arm BOARD:=at91 MAINTAINER:=Claudio Mignanti BOARDNAME:=Atmel AT91 -FEATURES:=squashfs targz ext2 usb +FEATURES:=squashfs targz ext2 usb usbgadget ubifs SUBTARGETS:=legacy sama5d3 KERNEL_PATCHVER:=3.18 include $(INCLUDE_DIR)/target.mk -DEFAULT_PACKAGES += kmod-usb-ohci +DEFAULT_PACKAGES += kmod-usb-ohci kmod-at91-udc kmod-usb-eth-gadget $(eval $(call BuildTarget)) diff --git a/target/linux/at91/config-default b/target/linux/at91/config-default index 6972e80..85cacd8 100644 --- a/target/linux/at91/config-default +++ b/target/linux/at91/config-default @@ -215,15 +215,7 @@ CONFIG_UID16=y CONFIG_UIDGID_CONVERTED=y CONFIG_UNCOMPRESS_INCLUDE="mach/uncompress.h" # CONFIG_USB_ARCH_HAS_XHCI is not set -CONFIG_USB_AT91=y # CONFIG_USB_ATMEL_USBA is not set -CONFIG_USB_COMMON=y -CONFIG_USB_ETH=y -# CONFIG_USB_ETH_EEM is not set -CONFIG_USB_ETH_RNDIS=y -CONFIG_USB_GADGET=y -# CONFIG_USB_GADGET_XILINX is not set -CONFIG_USB_LIBCOMPOSITE=y CONFIG_USB_SUPPORT=y CONFIG_USE_OF=y CONFIG_VECTORS_BASE=0xffff0000 diff --git a/target/linux/at91/modules.mk b/target/linux/at91/modules.mk index 7f98233..6cfc3e4 100644 --- a/target/linux/at91/modules.mk +++ b/target/linux/at91/modules.mk @@ -50,6 +50,24 @@ endef $(eval $(call KernelPackage,at91-adc)) +define KernelPackage/at91-udc + SUBMENU:=$(USB_MENU) + TITLE:=USB Device Controller on atmel SoC + DEPENDS:=@TARGET_at91 +kmod-usb-gadget + KCONFIG:=CONFIG_USB_AT91 +ifneq ($(wildcard $(LINUX_DIR)/drivers/usb/gadget/udc/at91_udc.ko),) + FILES:=$(LINUX_DIR)/drivers/usb/gadget/udc/at91_udc.ko +else + FILES:=$(LINUX_DIR)/drivers/usb/gadget/at91_udc.ko +endif + AUTOLOAD:=$(call AutoLoad,51,at91_udc) +endef + +define KernelPackage/at91-adc/description + Kernel module to use the USB Device controller for Atmel AT91 +endef + +$(eval $(call KernelPackage,at91-udc)) I2C_AT91_MODULES:=\ CONFIG_I2C_AT91:drivers/i2c/busses/i2c-at91 diff --git a/target/linux/at91/patches/100-ARM-at91-build-dtb-for-LMU5000.patch b/target/linux/at91/patches/100-ARM-at91-build-dtb-for-LMU5000.patch index e8cc68d..8852b6a 100644 --- a/target/linux/at91/patches/100-ARM-at91-build-dtb-for-LMU5000.patch +++ b/target/linux/at91/patches/100-ARM-at91-build-dtb-for-LMU5000.patch @@ -1,6 +1,6 @@ --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile -@@ -26,6 +26,7 @@ dtb-$(CONFIG_ARCH_AT91) += usb_a9g20.dtb +@@ -28,6 +28,7 @@ dtb-$(CONFIG_ARCH_AT91) += usb_a9g20.dtb dtb-$(CONFIG_ARCH_AT91) += usb_a9g20_lpw.dtb # sam9g45 dtb-$(CONFIG_ARCH_AT91) += at91sam9m10g45ek.dtb diff --git a/target/linux/at91/patches/200-ARM-at91-udc-clockfix-backport.patch b/target/linux/at91/patches/200-ARM-at91-udc-clockfix-backport.patch new file mode 100644 index 0000000..1aec3d0 --- /dev/null +++ b/target/linux/at91/patches/200-ARM-at91-udc-clockfix-backport.patch @@ -0,0 +1,82 @@ +--- a/drivers/usb/gadget/udc/at91_udc.c ++++ b/drivers/usb/gadget/udc/at91_udc.c +@@ -870,8 +870,6 @@ + return; + udc->clocked = 1; + +- if (IS_ENABLED(CONFIG_COMMON_CLK)) +- clk_enable(udc->uclk); + clk_enable(udc->iclk); + clk_enable(udc->fclk); + } +@@ -884,8 +882,6 @@ + udc->gadget.speed = USB_SPEED_UNKNOWN; + clk_disable(udc->fclk); + clk_disable(udc->iclk); +- if (IS_ENABLED(CONFIG_COMMON_CLK)) +- clk_disable(udc->uclk); + } + + /* +@@ -1766,27 +1762,18 @@ + udc_reinit(udc); + + /* get interface and function clocks */ +- udc->iclk = clk_get(dev, "udc_clk"); +- udc->fclk = clk_get(dev, "udpck"); +- if (IS_ENABLED(CONFIG_COMMON_CLK)) +- udc->uclk = clk_get(dev, "usb_clk"); +- if (IS_ERR(udc->iclk) || IS_ERR(udc->fclk) || +- (IS_ENABLED(CONFIG_COMMON_CLK) && IS_ERR(udc->uclk))) { ++ udc->iclk = clk_get(dev, "pclk"); ++ udc->fclk = clk_get(dev, "hclk"); ++ if (IS_ERR(udc->iclk) || IS_ERR(udc->fclk)) { + DBG("clocks missing\n"); + retval = -ENODEV; + goto fail1; + } + +- /* don't do anything until we have both gadget driver and VBUS */ +- if (IS_ENABLED(CONFIG_COMMON_CLK)) { +- clk_set_rate(udc->uclk, 48000000); +- retval = clk_prepare(udc->uclk); +- if (retval) +- goto fail1; +- } ++ clk_set_rate(udc->fclk, 48000000); + retval = clk_prepare(udc->fclk); + if (retval) +- goto fail1a; ++ goto fail1; + + retval = clk_prepare_enable(udc->iclk); + if (retval) +@@ -1860,12 +1847,7 @@ + clk_unprepare(udc->iclk); + fail1b: + clk_unprepare(udc->fclk); +-fail1a: +- if (IS_ENABLED(CONFIG_COMMON_CLK)) +- clk_unprepare(udc->uclk); + fail1: +- if (IS_ENABLED(CONFIG_COMMON_CLK) && !IS_ERR(udc->uclk)) +- clk_put(udc->uclk); + if (!IS_ERR(udc->fclk)) + clk_put(udc->fclk); + if (!IS_ERR(udc->iclk)) +@@ -1911,15 +1893,11 @@ + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + release_mem_region(res->start, resource_size(res)); + +- if (IS_ENABLED(CONFIG_COMMON_CLK)) +- clk_unprepare(udc->uclk); + clk_unprepare(udc->fclk); + clk_unprepare(udc->iclk); + + clk_put(udc->iclk); + clk_put(udc->fclk); +- if (IS_ENABLED(CONFIG_COMMON_CLK)) +- clk_put(udc->uclk); + + return 0; + }