Hi, On Mon, Oct 22, 2012 at 10:33 AM, Jingoo Han <jg1.han@xxxxxxxxxxx> wrote: > On Wednesday, October 10, 2012 7:43 PM Vivek Gautam wrote >> >> Adding usbphy node for Exynos5250 along with the platform data. >> >> Signed-off-by: Vivek Gautam <gautam.vivek@xxxxxxxxxxx> >> --- >> .../devicetree/bindings/usb/samsung-usbphy.txt | 12 +++++- >> arch/arm/boot/dts/exynos5250.dtsi | 5 ++ >> arch/arm/mach-exynos/Kconfig | 1 + >> arch/arm/mach-exynos/include/mach/map.h | 1 + >> arch/arm/mach-exynos/mach-exynos5-dt.c | 10 +++++ >> arch/arm/mach-exynos/setup-usb-phy.c | 43 ++++++++++++++++--- >> arch/arm/plat-samsung/include/plat/usb-phy.h | 1 + >> include/linux/platform_data/samsung-usbphy.h | 1 + >> 8 files changed, 65 insertions(+), 9 deletions(-) >> >> diff --git a/Documentation/devicetree/bindings/usb/samsung-usbphy.txt >> b/Documentation/devicetree/bindings/usb/samsung-usbphy.txt >> index 7d54d59..c644d01 100644 >> --- a/Documentation/devicetree/bindings/usb/samsung-usbphy.txt >> +++ b/Documentation/devicetree/bindings/usb/samsung-usbphy.txt >> @@ -1,11 +1,19 @@ >> * Samsung's usb phy transceiver >> >> -The Samsung's phy transceiver is used for controlling usb otg phy for >> -s3c-hsotg usb device controller. >> +The Samsung's phy transceiver is used for controlling usb phy for >> +s3c-hsotg as well as ehci-s5p and ohci-exynos usb controllers >> +across Samsung SOCs. >> TODO: Adding the PHY binding with controller(s) according to the under >> developement generic PHY driver. >> >> +Exynos4210: >> Required properties: >> - compatible : should be "samsung,exynos4210-usbphy" >> - reg : base physical address of the phy registers and length of memory mapped >> region. >> + >> +Exynos5250: >> +Required properties: >> +- compatible : should be "samsung,exynos5250-usbphy" >> +- reg : base physical address of the phy registers and length of memory mapped >> + region. >> diff --git a/arch/arm/boot/dts/exynos5250.dtsi b/arch/arm/boot/dts/exynos5250.dtsi >> index dddfd6e..82bf042 100644 >> --- a/arch/arm/boot/dts/exynos5250.dtsi >> +++ b/arch/arm/boot/dts/exynos5250.dtsi >> @@ -218,6 +218,11 @@ >> #size-cells = <0>; >> }; >> >> + usbphy { >> + compatible = "samsung,exynos5250-usbphy"; >> + reg = <0x12130000 0x100>; >> + }; >> + >> amba { >> #address-cells = <1>; >> #size-cells = <1>; >> diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig >> index 4372075..e8e3d7b 100644 >> --- a/arch/arm/mach-exynos/Kconfig >> +++ b/arch/arm/mach-exynos/Kconfig >> @@ -422,6 +422,7 @@ config MACH_EXYNOS5_DT >> select SOC_EXYNOS5250 >> select USE_OF >> select ARM_AMBA >> + select EXYNOS4_SETUP_USB_PHY >> help >> Machine support for Samsung EXYNOS5 machine with device tree enabled. >> Select this if a fdt blob is available for the EXYNOS5 SoC based board. >> diff --git a/arch/arm/mach-exynos/include/mach/map.h b/arch/arm/mach-exynos/include/mach/map.h >> index 9694424..7f5eb03 100644 >> --- a/arch/arm/mach-exynos/include/mach/map.h >> +++ b/arch/arm/mach-exynos/include/mach/map.h >> @@ -195,6 +195,7 @@ >> #define EXYNOS4_PA_EHCI 0x12580000 >> #define EXYNOS4_PA_OHCI 0x12590000 >> #define EXYNOS4_PA_HSPHY 0x125B0000 >> +#define EXYNOS5_PA_HSPHY 0x12130000 >> #define EXYNOS4_PA_MFC 0x13400000 >> >> #define EXYNOS4_PA_UART 0x13800000 >> diff --git a/arch/arm/mach-exynos/mach-exynos5-dt.c b/arch/arm/mach-exynos/mach-exynos5-dt.c >> index db1cd8e..bc041be 100644 >> --- a/arch/arm/mach-exynos/mach-exynos5-dt.c >> +++ b/arch/arm/mach-exynos/mach-exynos5-dt.c >> @@ -11,6 +11,7 @@ >> >> #include <linux/of_platform.h> >> #include <linux/serial_core.h> >> +#include <linux/platform_data/samsung-usbphy.h> >> >> #include <asm/mach/arch.h> >> #include <asm/hardware/gic.h> >> @@ -18,9 +19,16 @@ >> >> #include <plat/cpu.h> >> #include <plat/regs-serial.h> >> +#include <plat/usb-phy.h> >> >> #include "common.h" >> >> +static struct samsung_usbphy_data exynos5_usbphy_pdata = { >> + .pmu_isolation = s5p_usb_phy_pmu_isolation, >> + .phy_cfg_sel = s5p_usb_phy_cfg_sel, >> + .type = TYPE_HOST, >> +}; >> + >> /* >> * The following lookup table is used to override device names when devices >> * are registered from device tree. This is temporarily added to enable >> @@ -72,6 +80,8 @@ static const struct of_dev_auxdata exynos5250_auxdata_lookup[] __initconst = { >> "exynos-gsc.2", NULL), >> OF_DEV_AUXDATA("samsung,exynos5-gsc", EXYNOS5_PA_GSC3, >> "exynos-gsc.3", NULL), >> + OF_DEV_AUXDATA("samsung,exynos5250-usbphy", EXYNOS5_PA_HSPHY, >> + "s3c-usbphy", &exynos5_usbphy_pdata), >> {}, >> }; >> >> diff --git a/arch/arm/mach-exynos/setup-usb-phy.c b/arch/arm/mach-exynos/setup-usb-phy.c >> index be6cd4f..bebc99b 100644 >> --- a/arch/arm/mach-exynos/setup-usb-phy.c >> +++ b/arch/arm/mach-exynos/setup-usb-phy.c >> @@ -14,11 +14,15 @@ >> #include <linux/err.h> >> #include <linux/io.h> >> #include <linux/platform_device.h> >> +#include <linux/platform_data/samsung-usbphy.h> >> #include <mach/regs-pmu.h> >> #include <mach/regs-usb-phy.h> >> #include <plat/cpu.h> >> +#include <plat/map-base.h> >> #include <plat/usb-phy.h> >> >> +#define EXYNOS5_USB_CFG (S3C_VA_SYS + (0x230)) > > The parentheses around 0x230 is not necessary. > > +#define EXYNOS5_USB_CFG (S3C_VA_SYS + 0x230) > Ok, will remove them. > >> + >> static atomic_t host_usage; >> >> static int exynos4_usb_host_phy_is_on(void) >> @@ -224,13 +228,38 @@ int s5p_usb_phy_exit(struct platform_device *pdev, int type) >> >> void s5p_usb_phy_pmu_isolation(int on, int type) >> { >> - if (on) { >> - writel(readl(S5P_USBDEVICE_PHY_CONTROL) >> - & ~S5P_USBDEVICE_PHY_ENABLE, >> - S5P_USBDEVICE_PHY_CONTROL); >> + if (type == TYPE_HOST) { >> + if (on) { >> + writel(readl(S5P_USBHOST_PHY_CONTROL) >> + & ~S5P_USBHOST_PHY_ENABLE, >> + S5P_USBHOST_PHY_CONTROL); >> + } else { >> + writel(readl(S5P_USBHOST_PHY_CONTROL) >> + | S5P_USBHOST_PHY_ENABLE, >> + S5P_USBHOST_PHY_CONTROL); >> + } >> } else { >> - writel(readl(S5P_USBDEVICE_PHY_CONTROL) >> - | S5P_USBDEVICE_PHY_ENABLE, >> - S5P_USBDEVICE_PHY_CONTROL); >> + if (on) { >> + writel(readl(S5P_USBDEVICE_PHY_CONTROL) >> + & ~S5P_USBDEVICE_PHY_ENABLE, >> + S5P_USBDEVICE_PHY_CONTROL); >> + } else { >> + writel(readl(S5P_USBDEVICE_PHY_CONTROL) >> + | S5P_USBDEVICE_PHY_ENABLE, >> + S5P_USBDEVICE_PHY_CONTROL); >> + } >> } >> } >> + >> +/* Switch between HOST and OTG link from PHY_CFG */ >> +void s5p_usb_phy_cfg_sel(struct device *dev, int type) >> +{ >> + u32 is_host; >> + >> + is_host = readl(EXYNOS5_USB_CFG); >> + writel(type, EXYNOS5_USB_CFG); >> + >> + if (is_host != type) >> + dev_dbg(dev, "Changed USB MUX from %s to %s", >> + is_host ? "Host" : "Device", type ? "Host" : "Device"); >> +} >> diff --git a/arch/arm/plat-samsung/include/plat/usb-phy.h b/arch/arm/plat-samsung/include/plat/usb-phy.h >> index 7a4a959..a57b8bb 100644 >> --- a/arch/arm/plat-samsung/include/plat/usb-phy.h >> +++ b/arch/arm/plat-samsung/include/plat/usb-phy.h >> @@ -19,5 +19,6 @@ enum s5p_usb_phy_type { >> extern int s5p_usb_phy_init(struct platform_device *pdev, int type); >> extern int s5p_usb_phy_exit(struct platform_device *pdev, int type); >> extern void s5p_usb_phy_pmu_isolation(int on, int type); >> +extern void s5p_usb_phy_cfg_sel(struct device *dev, int type); >> >> #endif /* __PLAT_SAMSUNG_USB_PHY_H */ >> diff --git a/include/linux/platform_data/samsung-usbphy.h b/include/linux/platform_data/samsung-usbphy.h >> index 364a38a..2b400e0 100644 >> --- a/include/linux/platform_data/samsung-usbphy.h >> +++ b/include/linux/platform_data/samsung-usbphy.h >> @@ -25,6 +25,7 @@ enum phy_type { >> >> struct samsung_usbphy_data { >> void (*pmu_isolation)(int on, int phy_type); >> + void (*phy_cfg_sel)(struct device *dev, int phy_type); >> int type; >> }; >> >> -- >> 1.7.6.5 >> >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-usb" in >> the body of a message to majordomo@xxxxxxxxxxxxxxx >> More majordomo info at http://vger.kernel.org/majordomo-info.html > > -- > To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html Thanks & Regards Vivek -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html