Enable USB peripheral on dm365 EVM
Subsystems (5)
PATCH v4 1/1 Enable USB peripheral on dm365 EVM
From: Constantine Shulyupin <[email protected]>
---
Note:
USBPHY_CTL_PADDR and USBPHY_CLKFREQ_24MHZ are defined in board-dm365-evm.c because davinci.h can't be included from drivers/usb/musb/. May be davinci.h should be renamed and moved to arch/arm/mach-davinci/include/mach/usb.h like arch/arm/plat-omap/include/plat/usb.h
Tested with usb gadget g_zero.
Changelog
Changes since v3 http://www.spinics.net/lists/kernel/msg1412544.html:
- removed optional altering of pr_info
Changes since v2 http://article.gmane.org/gmane.linux.kernel/1159868/
- reordered code
- removed alternation of GPIO33, which is multiplexed with DRVVBUS, because is not need for peripheral USB
Changes since v1 http://marc.info/?l=linux-kernel&m=130894150803661&w=2:
- removed optional code and reordered
This patch is based on code from Arago, Angstom, and RidgeRun projects. Original patch by miguel.aguilar at ridgerun.com is three years ago:
- http://www.mail-archive.com/davinci-linux-open-source at linux.davincidsp.com/msg14741.html
--- arch/arm/mach-davinci/board-dm365-evm.c | 8 ++++++++ arch/arm/mach-davinci/usb.c | 2 ++ drivers/usb/musb/davinci.h | 1 + drivers/usb/musb/musb_core.c | 20 ++++++++++++-------- 4 files changed, 23 insertions(+), 8 deletions(-)
arch/arm/mach-davinci/board-dm365-evm.c +8 -0
@@ -38,6 +38,8 @@#include <mach/mmc.h> #include <mach/nand.h> #include <mach/keyscan.h> +#include <mach/usb.h> +#include <mach/hardware.h> #include <media/tvp514x.h>
@@ -92,6 +94,9 @@ static inline int have_tvp7002(void)#define CPLD_CCD_DIR3 CPLD_OFFSET(0x3f,0)#define CPLD_CCD_IO3 CPLD_OFFSET(0x3f,1) +#define USBPHY_CTL_PADDR 0x01c40034 +#define USBPHY_CLKFREQ_24MHZ BIT(13) +static void __iomem *cpld;
@@ -613,6 +618,9 @@ static __init void dm365_evm_init(void)dm365_init_spi0 (BIT (0 ), dm365_evm_spi_info,ARRAY_SIZE (dm365_evm_spi_info)); +writel (readl (IO_ADDRESS (USBPHY_CTL_PADDR )) |USBPHY_CLKFREQ_24MHZ , +IO_ADDRESS (USBPHY_CTL_PADDR )); +davinci_setup_usb (500 ,8 ); }MACHINE_START (DAVINCI_DM365_EVM ,"DaVinci DM365 EVM" )
arch/arm/mach-davinci/usb.c +2 -0
@@ -49,6 +49,8 @@ static struct musb_hdrc_platform_data usb_data = { .mode = MUSB_PERIPHERAL,#elif defined(CONFIG_USB_MUSB_HOST ) .mode = MUSB_HOST, +#else + .mode = MUSB_OTG, #endif .clock = "usb", .config = &musb_config,
drivers/usb/musb/davinci.h +1 -0
@@ -16,6 +16,7 @@/* Integrated highspeed/otg PHY */ #define USBPHY_CTL_PADDR 0x01c40034 +#define USBPHY_CLKFREQ_24MHZ BIT(13)#define USBPHY_DATAPOL BIT(11)/* (dm355) switch D+/D- */ #define USBPHY_PHYCLKGD BIT(8)#define USBPHY_SESNDEN BIT(7)/* v(sess_end) comparator */
drivers/usb/musb/musb_core.c +11 -3
@@ -2051,9 +2051,17 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl)dev_info (dev,"USB %s mode controller at %p using %s, IRQ %d\n" , ({char *s;switch (musb->board_mode) { -case MUSB_HOST : s ="Host" ;break ; -case MUSB_PERIPHERAL : s ="Peripheral" ;break ; -default : s ="OTG" ;break ; +case MUSB_HOST : + s ="Host" ; +break ; +case MUSB_PERIPHERAL : + s ="Peripheral" ; +break ; +case MUSB_OTG : + s ="OTG" ; +break ; +default : + s ="Undefined" ; }; s; }), ctrl, (is_dma_capable() && musb->dma_controller)
Signature · 1 line
1.7.9.5
Greg KH
maintainerQuoted 20 lines · Constantine Shulyupin
From: Constantine Shulyupin <[email protected]>
Signed-off-by Constantine Shulyupin <[email protected]>---
Note:
USBPHY_CTL_PADDRandUSBPHY_CLKFREQ_24MHZare defined inboard-dm365-evm.cbecausedavinci.hcan't be included fromdrivers/usb/musb/. May bedavinci.hshould be renamed and moved toarch/arm/mach-davinci/include/mach/usb.hlikearch/arm/plat-omap/include/plat/usb.hTested with usb gadget
g_zero.Changelog
Changes since v3 http://www.spinics.net/lists/kernel/msg1412544.html:
- removed optional altering ofpr_infoChanges since v2 http://article.gmane.org/gmane.linux.kernel/1159868/
- reordered code
- removed alternation of GPIO33, which is multiplexed with DRVVBUS, because is not need for peripheral USB
Quoted 6 lines
Changes since v1 http://marc.info/?l=linux-kernel&m=130894150803661&w=2:
- removed optional code and reorderedThis patch is based on code from Arago, Angstom, and RidgeRun projects. Original patch by miguel.aguilar at ridgerun.com is three years ago:
- http://www.mail-archive.com/davinci-linux-open-source at linux.davincidsp.com/msg14741.html
Almost all of the information you put below the --- line here, should be above it, saying where the code originally came from, and most importantly, what exactly this patch does, and for what hardware. Your one-line Subject really isn't that descriptive at all.
Quoted 10 lines
drivers/usb/musb/musb_core.c +1
-3@@ -2051,9 +2051,17 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl) dev_info(dev, "USB %s mode controller at %p using %s, IRQ %d\n", ({char *s; switch (musb->board_mode) { - case MUSB_HOST: s = "Host"; break; - case MUSB_PERIPHERAL: s = "Peripheral"; break; - default: s = "OTG"; break; + case MUSB_HOST:
drivers/usb/musb/musb_core.c musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl) · line 2064
Quoted 10 lines
drivers/usb/musb/musb_core.c +10
-0+ s ="Host" ; +break ; +case MUSB_PERIPHERAL : + s ="Peripheral" ; +break ; +case MUSB_OTG : + s ="OTG" ; +break ; +default : + s ="Undefined" ;
Is this change really needed to get your hardware working? Shouldn't it be a separate patch?
greg k-h
Hi Constantine,
Quoted 58 lines · Constantine Shulyupin
From: Constantine Shulyupin <[email protected]>
Signed-off-by Constantine Shulyupin <[email protected]>---
Note:
USBPHY_CTL_PADDRandUSBPHY_CLKFREQ_24MHZare defined inboard-dm365-evm.cbecausedavinci.hcan't be included fromdrivers/usb/musb/. May bedavinci.hshould be renamed and moved toarch/arm/mach-davinci/include/mach/usb.hlikearch/arm/plat-omap/include/plat/usb.hTested with usb gadget
g_zero.Changelog
Changes since v3 http://www.spinics.net/lists/kernel/msg1412544.html:
- removed optional altering ofpr_infoChanges since v2 http://article.gmane.org/gmane.linux.kernel/1159868/
- reordered code
- removed alternation of GPIO33, which is multiplexed with DRVVBUS, because is not need for peripheral USBChanges since v1 http://marc.info/?l=linux-kernel&m=130894150803661&w=2:
- removed optional code and reorderedThis patch is based on code from Arago, Angstom, and RidgeRun projects. Original patch by miguel.aguilar at ridgerun.com is three years ago:
- http://www.mail-archive.com/davinci-linux-open-source at linux.davincidsp.com/msg14741.html--- arch/arm/mach-davinci/board-dm365-evm.c | 8 ++++++++ arch/arm/mach-davinci/usb.c | 2 ++ drivers/usb/musb/davinci.h | 1 + drivers/usb/musb/musb_core.c | 20 ++++++++++++-------- 4 files changed, 23 insertions(+), 8 deletions(-)arch/arm/mach-davinci/board-dm365-evm.c +5
-0@@ -38,6 +38,8 @@#include <mach/mmc.h> #include <mach/nand.h> #include <mach/keyscan.h> +#include <mach/usb.h> +#include <mach/hardware.h> #include <media/tvp514x.h> @@ -92,6 +94,9 @@ static inline int have_tvp7002(void)#define CPLD_CCD_DIR3 CPLD_OFFSET(0x3f,0)#define CPLD_CCD_IO3 CPLD_OFFSET(0x3f,1) +#define USBPHY_CTL_PADDR 0x01c40034 +#define USBPHY_CLKFREQ_24MHZ BIT(13) +static void __iomem *cpld;
arch/arm/mach-davinci/board-dm365-evm.c static __init void dm365_evm_init(void) · line 623
Quoted 6 lines
arch/arm/mach-davinci/board-dm365-evm.c +3
-0@@ -613,6 +618,9 @@ static __init void dm365_evm_init(void)dm365_init_spi0 (BIT (0 ), dm365_evm_spi_info,ARRAY_SIZE (dm365_evm_spi_info)); +writel (readl (IO_ADDRESS (USBPHY_CTL_PADDR )) |USBPHY_CLKFREQ_24MHZ , +IO_ADDRESS (USBPHY_CTL_PADDR )); +davinci_setup_usb (500 ,8 );
Add a comment here on why current is limited to 500 mA? Probably coming because of an on-board component?
arch/arm/mach-davinci/usb.c static struct musb_hdrc_platform_data usb_data = { · line 53
Quoted 13 lines
arch/arm/mach-davinci/board-dm365-evm.c +0
-0}MACHINE_START (DAVINCI_DM365_EVM ,"DaVinci DM365 EVM" )arch/arm/mach-davinci/usb.c +2
-0@@ -49,6 +49,8 @@ static struct musb_hdrc_platform_data usb_data = { .mode = MUSB_PERIPHERAL,#elif defined(CONFIG_USB_MUSB_HOST ) .mode = MUSB_HOST, +#else + .mode = MUSB_OTG,
This does not look to be directly related to DM365 support and should be separated into a different patch.
drivers/usb/musb/davinci.h line 19
Quoted 12 lines
arch/arm/mach-davinci/usb.c +0
-0#endif .clock = "usb", .config = &musb_config,drivers/usb/musb/davinci.h +1
-0@@ -16,6 +16,7 @@/* Integrated highspeed/otg PHY */ #define USBPHY_CTL_PADDR 0x01c40034 +#define USBPHY_CLKFREQ_24MHZ BIT(13)
You have added this repeat definition and do not use it anywhere.
Looks like all PHY related configuration is currently happening in drivers/usb/musb/davinci.c and the same register is also being written to for other platforms. Can you move the code you have included in board file to the driver? As we move towards DT, we need to avoid register configurations from board files anyway.
Thanks,
Sekhar