-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This is needed to help resolve some xhci issues and other minor differences. Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
- Loading branch information
Showing
58 changed files
with
4,776 additions
and
657 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
/* | ||
* Copyright (C) 2011 Samsung Electronics Co.Ltd | ||
* Author: Joonyoung Shim <jy0922.shim@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 __PLAT_S5P_REGS_USB_PHY_H | ||
#define __PLAT_S5P_REGS_USB_PHY_H | ||
|
||
#define EXYNOS4_HSOTG_PHYREG(x) ((x) + S5P_VA_USB_HSPHY) | ||
|
||
#define EXYNOS4_PHYPWR EXYNOS4_HSOTG_PHYREG(0x00) | ||
#define PHY1_HSIC_NORMAL_MASK (0xf << 9) | ||
#define PHY1_HSIC1_SLEEP (1 << 12) | ||
#define PHY1_HSIC1_FORCE_SUSPEND (1 << 11) | ||
#define PHY1_HSIC0_SLEEP (1 << 10) | ||
#define PHY1_HSIC0_FORCE_SUSPEND (1 << 9) | ||
|
||
#define PHY1_STD_NORMAL_MASK (0x7 << 6) | ||
#define PHY1_STD_SLEEP (1 << 8) | ||
#define PHY1_STD_ANALOG_POWERDOWN (1 << 7) | ||
#define PHY1_STD_FORCE_SUSPEND (1 << 6) | ||
|
||
#define PHY0_NORMAL_MASK (0x39 << 0) | ||
#define PHY0_SLEEP (1 << 5) | ||
#define PHY0_OTG_DISABLE (1 << 4) | ||
#define PHY0_ANALOG_POWERDOWN (1 << 3) | ||
#define PHY0_FORCE_SUSPEND (1 << 0) | ||
|
||
#define EXYNOS4_PHYCLK EXYNOS4_HSOTG_PHYREG(0x04) | ||
#define PHY1_COMMON_ON_N (1 << 7) | ||
#define PHY0_COMMON_ON_N (1 << 4) | ||
#define PHY0_ID_PULLUP (1 << 2) | ||
#define CLKSEL_MASK (0x3 << 0) | ||
#define CLKSEL_SHIFT (0) | ||
#define CLKSEL_48M (0x0 << 0) | ||
#define CLKSEL_12M (0x2 << 0) | ||
#define CLKSEL_24M (0x3 << 0) | ||
|
||
#define EXYNOS4_RSTCON EXYNOS4_HSOTG_PHYREG(0x08) | ||
#define HOST_LINK_PORT_SWRST_MASK (0xf << 6) | ||
#define HOST_LINK_PORT2_SWRST (1 << 9) | ||
#define HOST_LINK_PORT1_SWRST (1 << 8) | ||
#define HOST_LINK_PORT0_SWRST (1 << 7) | ||
#define HOST_LINK_ALL_SWRST (1 << 6) | ||
|
||
#define PHY1_SWRST_MASK (0x7 << 3) | ||
#define PHY1_HSIC_SWRST (1 << 5) | ||
#define PHY1_STD_SWRST (1 << 4) | ||
#define PHY1_ALL_SWRST (1 << 3) | ||
|
||
#define PHY0_SWRST_MASK (0x7 << 0) | ||
#define PHY0_PHYLINK_SWRST (1 << 2) | ||
#define PHY0_HLINK_SWRST (1 << 1) | ||
#define PHY0_SWRST (1 << 0) | ||
|
||
#define EXYNOS4_PHY1CON EXYNOS4_HSOTG_PHYREG(0x34) | ||
#define FPENABLEN (1 << 0) | ||
|
||
#endif /* __PLAT_S5P_REGS_USB_PHY_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,136 @@ | ||
/* | ||
* Copyright (C) 2011 Samsung Electronics Co.Ltd | ||
* Author: Joonyoung Shim <jy0922.shim@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. | ||
* | ||
*/ | ||
|
||
#include <linux/clk.h> | ||
#include <linux/delay.h> | ||
#include <linux/err.h> | ||
#include <linux/io.h> | ||
#include <linux/platform_device.h> | ||
#include <mach/regs-pmu.h> | ||
#include <mach/regs-usb-phy.h> | ||
#include <plat/cpu.h> | ||
#include <plat/usb-phy.h> | ||
|
||
static int exynos4_usb_phy1_init(struct platform_device *pdev) | ||
{ | ||
struct clk *otg_clk; | ||
struct clk *xusbxti_clk; | ||
u32 phyclk; | ||
u32 rstcon; | ||
int err; | ||
|
||
otg_clk = clk_get(&pdev->dev, "otg"); | ||
if (IS_ERR(otg_clk)) { | ||
dev_err(&pdev->dev, "Failed to get otg clock\n"); | ||
return PTR_ERR(otg_clk); | ||
} | ||
|
||
err = clk_enable(otg_clk); | ||
if (err) { | ||
clk_put(otg_clk); | ||
return err; | ||
} | ||
|
||
writel(readl(S5P_USBHOST_PHY_CONTROL) | S5P_USBHOST_PHY_ENABLE, | ||
S5P_USBHOST_PHY_CONTROL); | ||
|
||
/* set clock frequency for PLL */ | ||
phyclk = readl(EXYNOS4_PHYCLK) & ~CLKSEL_MASK; | ||
|
||
xusbxti_clk = clk_get(&pdev->dev, "xusbxti"); | ||
if (xusbxti_clk && !IS_ERR(xusbxti_clk)) { | ||
switch (clk_get_rate(xusbxti_clk)) { | ||
case 12 * MHZ: | ||
phyclk |= CLKSEL_12M; | ||
break; | ||
case 24 * MHZ: | ||
phyclk |= CLKSEL_24M; | ||
break; | ||
default: | ||
case 48 * MHZ: | ||
/* default reference clock */ | ||
break; | ||
} | ||
clk_put(xusbxti_clk); | ||
} | ||
|
||
writel(phyclk, EXYNOS4_PHYCLK); | ||
|
||
/* floating prevention logic: disable */ | ||
writel((readl(EXYNOS4_PHY1CON) | FPENABLEN), EXYNOS4_PHY1CON); | ||
|
||
/* set to normal HSIC 0 and 1 of PHY1 */ | ||
writel((readl(EXYNOS4_PHYPWR) & ~PHY1_HSIC_NORMAL_MASK), | ||
EXYNOS4_PHYPWR); | ||
|
||
/* set to normal standard USB of PHY1 */ | ||
writel((readl(EXYNOS4_PHYPWR) & ~PHY1_STD_NORMAL_MASK), EXYNOS4_PHYPWR); | ||
|
||
/* reset all ports of both PHY and Link */ | ||
rstcon = readl(EXYNOS4_RSTCON) | HOST_LINK_PORT_SWRST_MASK | | ||
PHY1_SWRST_MASK; | ||
writel(rstcon, EXYNOS4_RSTCON); | ||
udelay(10); | ||
|
||
rstcon &= ~(HOST_LINK_PORT_SWRST_MASK | PHY1_SWRST_MASK); | ||
writel(rstcon, EXYNOS4_RSTCON); | ||
udelay(50); | ||
|
||
clk_disable(otg_clk); | ||
clk_put(otg_clk); | ||
|
||
return 0; | ||
} | ||
|
||
static int exynos4_usb_phy1_exit(struct platform_device *pdev) | ||
{ | ||
struct clk *otg_clk; | ||
int err; | ||
|
||
otg_clk = clk_get(&pdev->dev, "otg"); | ||
if (IS_ERR(otg_clk)) { | ||
dev_err(&pdev->dev, "Failed to get otg clock\n"); | ||
return PTR_ERR(otg_clk); | ||
} | ||
|
||
err = clk_enable(otg_clk); | ||
if (err) { | ||
clk_put(otg_clk); | ||
return err; | ||
} | ||
|
||
writel((readl(EXYNOS4_PHYPWR) | PHY1_STD_ANALOG_POWERDOWN), | ||
EXYNOS4_PHYPWR); | ||
|
||
writel(readl(S5P_USBHOST_PHY_CONTROL) & ~S5P_USBHOST_PHY_ENABLE, | ||
S5P_USBHOST_PHY_CONTROL); | ||
|
||
clk_disable(otg_clk); | ||
clk_put(otg_clk); | ||
|
||
return 0; | ||
} | ||
|
||
int s5p_usb_phy_init(struct platform_device *pdev, int type) | ||
{ | ||
if (type == S5P_USB_PHY_HOST) | ||
return exynos4_usb_phy1_init(pdev); | ||
|
||
return -EINVAL; | ||
} | ||
|
||
int s5p_usb_phy_exit(struct platform_device *pdev, int type) | ||
{ | ||
if (type == S5P_USB_PHY_HOST) | ||
return exynos4_usb_phy1_exit(pdev); | ||
|
||
return -EINVAL; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
/* | ||
* Copyright (C) 2011 Samsung Electronics Co.Ltd | ||
* Author: Joonyoung Shim <jy0922.shim@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. | ||
* | ||
*/ | ||
|
||
#include <linux/platform_device.h> | ||
#include <mach/irqs.h> | ||
#include <mach/map.h> | ||
#include <plat/devs.h> | ||
#include <plat/ehci.h> | ||
#include <plat/usb-phy.h> | ||
|
||
/* USB EHCI Host Controller registration */ | ||
static struct resource s5p_ehci_resource[] = { | ||
[0] = { | ||
.start = S5P_PA_EHCI, | ||
.end = S5P_PA_EHCI + SZ_256 - 1, | ||
.flags = IORESOURCE_MEM, | ||
}, | ||
[1] = { | ||
.start = IRQ_USB_HOST, | ||
.end = IRQ_USB_HOST, | ||
.flags = IORESOURCE_IRQ, | ||
} | ||
}; | ||
|
||
static u64 s5p_device_ehci_dmamask = 0xffffffffUL; | ||
|
||
struct platform_device s5p_device_ehci = { | ||
.name = "s5p-ehci", | ||
.id = -1, | ||
.num_resources = ARRAY_SIZE(s5p_ehci_resource), | ||
.resource = s5p_ehci_resource, | ||
.dev = { | ||
.dma_mask = &s5p_device_ehci_dmamask, | ||
.coherent_dma_mask = 0xffffffffUL | ||
} | ||
}; | ||
|
||
void __init s5p_ehci_set_platdata(struct s5p_ehci_platdata *pd) | ||
{ | ||
struct s5p_ehci_platdata *npd; | ||
|
||
npd = s3c_set_platdata(pd, sizeof(struct s5p_ehci_platdata), | ||
&s5p_device_ehci); | ||
|
||
if (!npd->phy_init) | ||
npd->phy_init = s5p_usb_phy_init; | ||
if (!npd->phy_exit) | ||
npd->phy_exit = s5p_usb_phy_exit; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
/* | ||
* Copyright (C) 2011 Samsung Electronics Co.Ltd | ||
* Author: Joonyoung Shim <jy0922.shim@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 __PLAT_S5P_EHCI_H | ||
#define __PLAT_S5P_EHCI_H | ||
|
||
struct s5p_ehci_platdata { | ||
int (*phy_init)(struct platform_device *pdev, int type); | ||
int (*phy_exit)(struct platform_device *pdev, int type); | ||
}; | ||
|
||
extern void s5p_ehci_set_platdata(struct s5p_ehci_platdata *pd); | ||
|
||
#endif /* __PLAT_S5P_EHCI_H */ |
Oops, something went wrong.