Support Samsung Exynos OHCI device and driver
Subsystems (5)
v2 cover Support Samsung Exynos OHCI device and driver
Hello.
This patch series adds USB OHCI device and initial driver for Samsung Exynos SoCs and is based from linux-samsung for-next branch. I have tested on SMDKV310 board using EXYNOS4.
Thanks.
Jingoo Han (3) :
ARM: EXYNOS: Add USB OHCI device
ARM: EXYNOS: Add USB OHCI support to SMDKV310 board
USB: Add Samsung Exynos OHCI diver
Changes since v1:
- Replace ohci-s5p with ohci-exynos
- Check phy control
PATCH v2 1/3 ARM: EXYNOS: Add USB OHCI device
This patch adds USB ohci device definition for Exynos SoCs.
--- arch/arm/mach-exynos/Kconfig | 5 +++ arch/arm/mach-exynos/Makefile | 1 + arch/arm/mach-exynos/dev-ohci.c | 52 +++++++++++++++++++++++++++++ arch/arm/mach-exynos/include/mach/map.h | 1 + arch/arm/mach-exynos/include/mach/ohci.h | 21 +++++++++++ arch/arm/mach-exynos/setup-usb-phy.c | 15 ++++++++ arch/arm/plat-samsung/include/plat/devs.h | 1 + 7 files changed, 96 insertions(+), 0 deletions(-) create mode 100644 arch/arm/mach-exynos/dev-ohci.c create mode 100644 arch/arm/mach-exynos/include/mach/ohci.h
arch/arm/mach-exynos/Kconfig +5 -0
@@ -87,6 +87,11 @@ config EXYNOS4_DEV_DWMCI help Compile in platform device definitions for DWMCI +config EXYNOS4_DEV_USB_OHCI + bool + help + Compile in platform device definition for USB OHCI + config EXYNOS4_SETUP_I2C1 bool help
arch/arm/mach-exynos/Makefile +1 -0
@@ -46,6 +46,7 @@ obj-$(CONFIG_EXYNOS4_DEV_AHCI) += dev-ahci.o obj-$(CONFIG_EXYNOS4_DEV_PD) += dev-pd.o obj-$(CONFIG_EXYNOS4_DEV_SYSMMU) += dev-sysmmu.o obj-$(CONFIG_EXYNOS4_DEV_DWMCI) += dev-dwmci.o +obj-$(CONFIG_EXYNOS4_DEV_USB_OHCI) += dev-ohci.o obj-$(CONFIG_EXYNOS4_DEV_DMA) += dma.o obj-$(CONFIG_EXYNOS4_SETUP_FIMC) += setup-fimc.o
arch/arm/mach-exynos/dev-ohci.c new file +52 -0
52 lines not on this page · raw message
arch/arm/mach-exynos/include/mach/map.h +1 -0
@@ -108,6 +108,7 @@#define EXYNOS4_PA_SROMC 0x12570000#define EXYNOS4_PA_EHCI 0x12580000 +#define EXYNOS4_PA_OHCI 0x12590000#define EXYNOS4_PA_HSPHY 0x125B0000#define EXYNOS4_PA_MFC 0x13400000
arch/arm/mach-exynos/include/mach/ohci.h new file +21 -0
@@ -0,0 +1,21 @@ +/* +* Copyright (C) 2011 Samsung Electronics Co.Ltd +* http://www.samsung.com/ +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at your +* option) any later version. +*/ + +#ifndef __MACH_EXYNOS_OHCI_H +#define __MACH_EXYNOS_OHCI_H + +struct exynos4_ohci_platdata { +int (*phy_init)(struct platform_device *pdev,int type); +int (*phy_exit)(struct platform_device *pdev,int type); +}; + +extern void exynos4_ohci_set_platdata (struct exynos4_ohci_platdata *pd); + +#endif /* __MACH_EXYNOS_OHCI_H */
arch/arm/mach-exynos/setup-usb-phy.c +15 -0
@@ -19,6 +19,13 @@#include <plat/cpu.h> #include <plat/usb-phy.h> +static atomic_t host_usage; + +static int exynos4_usb_host_phy_is_on (void ) +{ +return (readl (EXYNOS4_PHYPWR ) &PHY1_STD_ANALOG_POWERDOWN ) ?0 :1 ; +} +static int exynos4_usb_phy1_init (struct platform_device *pdev) {struct clk *otg_clk;
@@ -27,6 +34,8 @@ static int exynos4_usb_phy1_init(struct platform_device *pdev)u32 rstcon;int err; +atomic_inc (&host_usage); + otg_clk =clk_get (&pdev->dev,"otg" );if (IS_ERR (otg_clk)) {dev_err (&pdev->dev,"Failed to get otg clock\n" );
@@ -39,6 +48,9 @@ static int exynos4_usb_phy1_init(struct platform_device *pdev)return err; } +if (exynos4_usb_host_phy_is_on ()) +return 0 ; +writel (readl (S5P_USBHOST_PHY_CONTROL ) |S5P_USBHOST_PHY_ENABLE ,S5P_USBHOST_PHY_CONTROL );
@@ -95,6 +107,9 @@ static int exynos4_usb_phy1_exit(struct platform_device *pdev)struct clk *otg_clk;int err; +if (atomic_dec_return (&host_usage) >0 ) +return 0 ; + otg_clk =clk_get (&pdev->dev,"otg" );if (IS_ERR (otg_clk)) {dev_err (&pdev->dev,"Failed to get otg clock\n" );
arch/arm/plat-samsung/include/plat/devs.h +1 -0
@@ -129,6 +129,7 @@ extern struct platform_device exynos4_device_dwmci;extern struct platform_device exynos4_device_i2s0;extern struct platform_device exynos4_device_i2s1;extern struct platform_device exynos4_device_i2s2; +extern struct platform_device exynos4_device_ohci;extern struct platform_device exynos4_device_pcm0;extern struct platform_device exynos4_device_pcm1;extern struct platform_device exynos4_device_pcm2;
Signature · 1 line
1.7.1
PATCH v2 1/3 ARM: EXYNOS: Add USB OHCI device
Quoted 9 lines · Jingoo Han
This patch adds USB ohci device definition for Exynos SoCs.
Signed-off-by Jingoo Han<[email protected]>--- arch/arm/mach-exynos/Kconfig | 5 +++ arch/arm/mach-exynos/Makefile | 1 + arch/arm/mach-exynos/dev-ohci.c | 52 +++++++++++++++++++++++++++++ arch/arm/mach-exynos/include/mach/map.h | 1 + arch/arm/mach-exynos/include/mach/ohci.h | 21 +++++++++++
In the earlier patchset, platform_device struct for ohci was defined within plat-samsung, and ohci.h was located in plat-samsung/include/plat. These are still the locations where ehci related definitions are located.
What is the reason for movement of ohci related definitions to mach folder?
Signature · 1 line
Tushar Behera
PATCH v2 1/3 ARM: EXYNOS: Add USB OHCI device
Quoted 13 lines · Tushar Behera
Subject: Re: [PATCH v2 1/3] ARM: EXYNOS: Add USB OHCI device
Quoted 9 lines · Jingoo Han
This patch adds USB ohci device definition for Exynos SoCs.
Signed-off-by Jingoo Han<[email protected]>--- arch/arm/mach-exynos/Kconfig | 5 +++ arch/arm/mach-exynos/Makefile | 1 + arch/arm/mach-exynos/dev-ohci.c | 52 +++++++++++++++++++++++++++++ arch/arm/mach-exynos/include/mach/map.h | 1 + arch/arm/mach-exynos/include/mach/ohci.h | 21 +++++++++++
Quoted 6 lines
In the earlier patchset,
platform_devicestruct for ohci was defined within plat-samsung, andohci.hwas located in plat-samsung/include/plat. These are still the locations where ehci related definitions are located.What is the reason for movement of ohci related definitions to mach folder?
I changed the ohci name from ohci-s5p to ohci-exynos, because the ohci-exynos is used for exynos series such as Exynos4210 & Exynos4x12. Therefore, it should be located within mach-exynos/include/mach.
Also, If this patchset is accepted, I will move Samsung ehci definitions to mach-exynos due to the same reason.
Thanks.
Quoted 3 lines
--
Tushar Behera
PATCH v2 2/3 ARM: EXYNOS: Add USB OHCI support to SMDKV310 board
In reply to Jingoo HanThis patch adds USB OHCI support to SMDKV310 board.
--- arch/arm/mach-exynos/Kconfig | 1 + arch/arm/mach-exynos/mach-smdkv310.c | 13 +++++++++++++ 2 files changed, 14 insertions(+), 0 deletions(-)
arch/arm/mach-exynos/Kconfig +1 -0
@@ -190,6 +190,7 @@ config MACH_SMDKV310 select EXYNOS4_DEV_DMA select EXYNOS4_DEV_PD select SAMSUNG_DEV_PWM + select EXYNOS4_DEV_USB_OHCI select EXYNOS4_DEV_SYSMMU select EXYNOS4_SETUP_FIMD0 select EXYNOS4_SETUP_I2C1
arch/arm/mach-exynos/mach-smdkv310.c +13 -0
@@ -42,6 +42,7 @@#include <plat/clock.h> #include <mach/map.h> +#include <mach/ohci.h> /* Following are default values for UCON, ULCON and UFCON UART registers */ #define SMDKV310_UCON_DEFAULT (S3C2410_UCON_TXILEVEL | \
@@ -245,6 +246,16 @@ static void __init smdkv310_ehci_init(void)s5p_ehci_set_platdata (pdata); } +/* USB OHCI */ +static struct exynos4_ohci_platdata smdkv310_ohci_pdata; + +static void __init smdkv310_ohci_init (void ) +{ +struct exynos4_ohci_platdata *pdata = &smdkv310_ohci_pdata; + +exynos4_ohci_set_platdata (pdata); +} +static struct platform_device *smdkv310_devices[]__initdata = { &s3c_device_hsmmc0, &s3c_device_hsmmc1,
@@ -261,6 +272,7 @@ static struct platform_device *smdkv310_devices[] __initdata = { &s5p_device_fimc3, &exynos4_device_ac97, &exynos4_device_i2s0, + &exynos4_device_ohci, &samsung_device_keypad, &s5p_device_mfc, &s5p_device_mfc_l,
@@ -363,6 +375,7 @@ static void __init smdkv310_machine_init(void)s5p_fimd0_set_platdata (&smdkv310_lcd0_pdata);smdkv310_ehci_init (); +smdkv310_ohci_init (); clk_xusbxti.rate =24000000 ;platform_add_devices (smdkv310_devices,ARRAY_SIZE (smdkv310_devices));
Signature · 1 line
1.7.1
PATCH v2 3/3 USB: Add Samsung Exynos OHCI diver
In reply to Jingoo HanThis patch adds USB OHCI driver for Samsung Exynos SoCs.
--- drivers/usb/Kconfig | 1 + drivers/usb/host/Kconfig | 6 + drivers/usb/host/ohci-exynos.c | 274 ++++++++++++++++++++++++++++++++++++++++ drivers/usb/host/ohci-hcd.c | 5 + 4 files changed, 286 insertions(+), 0 deletions(-) create mode 100644 drivers/usb/host/ohci-exynos.c
drivers/usb/Kconfig +1 -0
@@ -48,6 +48,7 @@ config USB_ARCH_HAS_OHCI default y if ARCH_DAVINCI_DA8XX default y if ARCH_CNS3XXX default y if PLAT_SPEAR + default y if ARCH_EXYNOS # PPC: default y if STB03xxx default y if PPC_MPC52xx
drivers/usb/host/Kconfig +6 -0
@@ -371,6 +371,12 @@ config USB_OHCI_SH Enables support for the on-chip OHCI controller on the SuperH. If you use the PCI OHCI controller, this option is not necessary. +config USB_OHCI_EXYNOS + boolean "OHCI support for Samsung EXYNOS SoC Series" + depends on USB_OHCI_HCD && ARCH_EXYNOS + help + Enable support for the Samsung Exynos SOC's on-chip OHCI controller. + config USB_CNS3XXX_OHCI bool "Cavium CNS3XXX OHCI Module" depends on USB_OHCI_HCD && ARCH_CNS3XXX
drivers/usb/host/ohci-exynos.c new file +274 -0
274 lines not on this page · raw message
drivers/usb/host/ohci-hcd.c +5 -0
@@ -1005,6 +1005,11 @@ MODULE_LICENSE ("GPL");#define PLATFORM_DRIVER ohci_hcd_s3c2410_driver#endif +#ifdef CONFIG_USB_OHCI_EXYNOS +#include "ohci-exynos.c" +#define PLATFORM_DRIVER exynos_ohci_driver +#endif +#ifdef CONFIG_USB_OHCI_HCD_OMAP1 #include "ohci-omap.c" #define OMAP1_PLATFORM_DRIVER ohci_hcd_omap_driver
Signature · 1 line
1.7.1