linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4] Enable USB peripheral on dm365 EVM
@ 2012-10-04 16:22 Constantine Shulyupin
  2012-10-04 17:21 ` Greg KH
  2012-10-08 11:41 ` Sekhar Nori
  0 siblings, 2 replies; 3+ messages in thread
From: Constantine Shulyupin @ 2012-10-04 16:22 UTC (permalink / raw)
  To: linux-arm-kernel

From: Constantine Shulyupin <const@MakeLinux.com>

Signed-off-by: Constantine Shulyupin <const@MakeLinux.com>
---

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(-)

diff --git a/arch/arm/mach-davinci/board-dm365-evm.c b/arch/arm/mach-davinci/board-dm365-evm.c
index 3a4743b..dfcb67f 100644
--- a/arch/arm/mach-davinci/board-dm365-evm.c
+++ b/arch/arm/mach-davinci/board-dm365-evm.c
@@ -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")
diff --git a/arch/arm/mach-davinci/usb.c b/arch/arm/mach-davinci/usb.c
index 23d2b6d..664c689 100644
--- a/arch/arm/mach-davinci/usb.c
+++ b/arch/arm/mach-davinci/usb.c
@@ -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,
diff --git a/drivers/usb/musb/davinci.h b/drivers/usb/musb/davinci.h
index 371baa0..e737d97 100644
--- a/drivers/usb/musb/davinci.h
+++ b/drivers/usb/musb/davinci.h
@@ -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 */
diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
index 26f1bef..277fe65 100644
--- a/drivers/usb/musb/musb_core.c
+++ b/drivers/usb/musb/musb_core.c
@@ -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)
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH v4] Enable USB peripheral on dm365 EVM
  2012-10-04 16:22 [PATCH v4] Enable USB peripheral on dm365 EVM Constantine Shulyupin
@ 2012-10-04 17:21 ` Greg KH
  2012-10-08 11:41 ` Sekhar Nori
  1 sibling, 0 replies; 3+ messages in thread
From: Greg KH @ 2012-10-04 17:21 UTC (permalink / raw)
  To: linux-arm-kernel

On Thu, Oct 04, 2012 at 06:22:33PM +0200, Constantine Shulyupin wrote:
> From: Constantine Shulyupin <const@MakeLinux.com>
> 
> Signed-off-by: Constantine Shulyupin <const@MakeLinux.com>
> ---
> 
> 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

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.

> --- a/drivers/usb/musb/musb_core.c
> +++ b/drivers/usb/musb/musb_core.c
> @@ -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";

Is this change really needed to get your hardware working?  Shouldn't it
be a separate patch?

greg k-h

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH v4] Enable USB peripheral on dm365 EVM
  2012-10-04 16:22 [PATCH v4] Enable USB peripheral on dm365 EVM Constantine Shulyupin
  2012-10-04 17:21 ` Greg KH
@ 2012-10-08 11:41 ` Sekhar Nori
  1 sibling, 0 replies; 3+ messages in thread
From: Sekhar Nori @ 2012-10-08 11:41 UTC (permalink / raw)
  To: linux-arm-kernel

Hi Constantine,

On 10/4/2012 9:52 PM, Constantine Shulyupin wrote:
> From: Constantine Shulyupin <const@MakeLinux.com>
> 
> Signed-off-by: Constantine Shulyupin <const@MakeLinux.com>
> ---
> 
> 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(-)
> 
> diff --git a/arch/arm/mach-davinci/board-dm365-evm.c b/arch/arm/mach-davinci/board-dm365-evm.c
> index 3a4743b..dfcb67f 100644
> --- a/arch/arm/mach-davinci/board-dm365-evm.c
> +++ b/arch/arm/mach-davinci/board-dm365-evm.c
> @@ -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);

Add a comment here on why current is limited to 500 mA? Probably coming
because of an on-board component?

>  }
>  
>  MACHINE_START(DAVINCI_DM365_EVM, "DaVinci DM365 EVM")
> diff --git a/arch/arm/mach-davinci/usb.c b/arch/arm/mach-davinci/usb.c
> index 23d2b6d..664c689 100644
> --- a/arch/arm/mach-davinci/usb.c
> +++ b/arch/arm/mach-davinci/usb.c
> @@ -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.


>  #endif
>  	.clock		= "usb",
>  	.config		= &musb_config,
> diff --git a/drivers/usb/musb/davinci.h b/drivers/usb/musb/davinci.h
> index 371baa0..e737d97 100644
> --- a/drivers/usb/musb/davinci.h
> +++ b/drivers/usb/musb/davinci.h
> @@ -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

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2012-10-08 11:41 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-10-04 16:22 [PATCH v4] Enable USB peripheral on dm365 EVM Constantine Shulyupin
2012-10-04 17:21 ` Greg KH
2012-10-08 11:41 ` Sekhar Nori

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).