You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'usb-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6
* 'usb-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6: (205 commits)
USB: EHCI: Remove SPARC_LEON {read,write}_be definitions from ehci.h
USB: UHCI: Support big endian GRUSBHC HC
sparc: add {read,write}*_be routines
USB: UHCI: Add support for big endian descriptors
USB: UHCI: Use ACCESS_ONCE rather than using a full compiler barrier
USB: UHCI: Add support for big endian mmio
usb-storage: Correct adjust_quirks to include latest flags
usb/isp1760: Fix possible unlink problems
usb/isp1760: Move function isp1760_endpoint_disable() within file.
USB: remove remaining usages of hcd->state from usbcore and fix regression
usb: musb: ux500: add configuration and build options for ux500 dma
usb: musb: ux500: add dma glue layer for ux500
usb: musb: ux500: add dma name for ux500
usb: musb: ux500: add ux500 specific code for gadget side
usb: musb: fix compile error
usb-storage: fix up the unusual_realtek device list
USB: gadget: f_audio: Fix invalid dereference of initdata
EHCI: don't rescan interrupt QHs needlessly
OHCI: fix regression caused by nVidia shutdown workaround
USB: OTG: msm: Free VCCCX regulator even if we can't set the voltage
...
This commit is contained in:
@@ -2585,6 +2585,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||
bytes of sense data);
|
||||
c = FIX_CAPACITY (decrease the reported
|
||||
device capacity by one sector);
|
||||
d = NO_READ_DISC_INFO (don't use
|
||||
READ_DISC_INFO command);
|
||||
e = NO_READ_CAPACITY_16 (don't use
|
||||
READ_CAPACITY_16 command);
|
||||
h = CAPACITY_HEURISTICS (decrease the
|
||||
reported device capacity by one
|
||||
sector if the number is odd);
|
||||
|
||||
@@ -95,9 +95,11 @@ pre_reset
|
||||
|
||||
int (*pre_reset)(struct usb_interface *intf);
|
||||
|
||||
Another driver or user space is triggering a reset on the device which
|
||||
contains the interface passed as an argument. Cease IO and save any
|
||||
device state you need to restore.
|
||||
A driver or user space is triggering a reset on the device which
|
||||
contains the interface passed as an argument. Cease IO, wait for all
|
||||
outstanding URBs to complete, and save any device state you need to
|
||||
restore. No more URBs may be submitted until the post_reset method
|
||||
is called.
|
||||
|
||||
If you need to allocate memory here, use GFP_NOIO or GFP_ATOMIC, if you
|
||||
are in atomic context.
|
||||
|
||||
@@ -90,10 +90,10 @@ ServiceBinary=%12%\USBSER.sys
|
||||
[SourceDisksFiles]
|
||||
[SourceDisksNames]
|
||||
[DeviceList]
|
||||
%DESCRIPTION%=DriverInstall, USB\VID_0525&PID_A4A7, USB\VID_0525&PID_A4AB&MI_02
|
||||
%DESCRIPTION%=DriverInstall, USB\VID_0525&PID_A4A7, USB\VID_1D6B&PID_0104&MI_02
|
||||
|
||||
[DeviceList.NTamd64]
|
||||
%DESCRIPTION%=DriverInstall, USB\VID_0525&PID_A4A7, USB\VID_0525&PID_A4AB&MI_02
|
||||
%DESCRIPTION%=DriverInstall, USB\VID_0525&PID_A4A7, USB\VID_1D6B&PID_0104&MI_02
|
||||
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
|
||||
@@ -18,15 +18,15 @@ DriverVer = 06/21/2006,6.0.6000.16384
|
||||
|
||||
; Decoration for x86 architecture
|
||||
[LinuxDevices.NTx86]
|
||||
%LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2, USB\VID_0525&PID_a4ab&MI_00
|
||||
%LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2, USB\VID_1d6b&PID_0104&MI_00
|
||||
|
||||
; Decoration for x64 architecture
|
||||
[LinuxDevices.NTamd64]
|
||||
%LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2, USB\VID_0525&PID_a4ab&MI_00
|
||||
%LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2, USB\VID_1d6b&PID_0104&MI_00
|
||||
|
||||
; Decoration for ia64 architecture
|
||||
[LinuxDevices.NTia64]
|
||||
%LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2, USB\VID_0525&PID_a4ab&MI_00
|
||||
%LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2, USB\VID_1d6b&PID_0104&MI_00
|
||||
|
||||
;@@@ This is the common setting for setup
|
||||
[ControlFlags]
|
||||
|
||||
+2
-1
@@ -4253,7 +4253,7 @@ F: include/linux/isicom.h
|
||||
MUSB MULTIPOINT HIGH SPEED DUAL-ROLE CONTROLLER
|
||||
M: Felipe Balbi <balbi@ti.com>
|
||||
L: linux-usb@vger.kernel.org
|
||||
T: git git://gitorious.org/usb/usb.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git
|
||||
S: Maintained
|
||||
F: drivers/usb/musb/
|
||||
|
||||
@@ -4588,6 +4588,7 @@ M: Felipe Balbi <balbi@ti.com>
|
||||
M: David Brownell <dbrownell@users.sourceforge.net>
|
||||
L: linux-usb@vger.kernel.org
|
||||
L: linux-omap@vger.kernel.org
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git
|
||||
S: Maintained
|
||||
F: drivers/usb/*/*omap*
|
||||
F: arch/arm/*omap*/usb*
|
||||
|
||||
@@ -170,6 +170,7 @@ config MACH_NURI
|
||||
select S3C_DEV_HSMMC3
|
||||
select S3C_DEV_I2C1
|
||||
select S3C_DEV_I2C5
|
||||
select S5P_DEV_USB_EHCI
|
||||
select EXYNOS4_SETUP_I2C1
|
||||
select EXYNOS4_SETUP_I2C5
|
||||
select EXYNOS4_SETUP_SDHCI
|
||||
|
||||
@@ -54,3 +54,5 @@ obj-$(CONFIG_EXYNOS4_SETUP_I2C7) += setup-i2c7.o
|
||||
obj-$(CONFIG_EXYNOS4_SETUP_KEYPAD) += setup-keypad.o
|
||||
obj-$(CONFIG_EXYNOS4_SETUP_SDHCI) += setup-sdhci.o
|
||||
obj-$(CONFIG_EXYNOS4_SETUP_SDHCI_GPIO) += setup-sdhci-gpio.o
|
||||
|
||||
obj-$(CONFIG_USB_SUPPORT) += usb-phy.o
|
||||
|
||||
@@ -97,7 +97,12 @@ static struct map_desc exynos4_iodesc[] __initdata = {
|
||||
.pfn = __phys_to_pfn(EXYNOS4_PA_SROMC),
|
||||
.length = SZ_4K,
|
||||
.type = MT_DEVICE,
|
||||
},
|
||||
}, {
|
||||
.virtual = (unsigned long)S5P_VA_USB_HSPHY,
|
||||
.pfn = __phys_to_pfn(EXYNOS4_PA_HSPHY),
|
||||
.length = SZ_4K,
|
||||
.type = MT_DEVICE,
|
||||
}
|
||||
};
|
||||
|
||||
static void exynos4_idle(void)
|
||||
|
||||
@@ -101,6 +101,9 @@
|
||||
|
||||
#define EXYNOS4_PA_SROMC 0x12570000
|
||||
|
||||
#define EXYNOS4_PA_EHCI 0x12580000
|
||||
#define EXYNOS4_PA_HSPHY 0x125B0000
|
||||
|
||||
#define EXYNOS4_PA_UART 0x13800000
|
||||
|
||||
#define EXYNOS4_PA_IIC(x) (0x13860000 + ((x) * 0x10000))
|
||||
@@ -143,6 +146,7 @@
|
||||
#define S5P_PA_SROMC EXYNOS4_PA_SROMC
|
||||
#define S5P_PA_SYSCON EXYNOS4_PA_SYSCON
|
||||
#define S5P_PA_TIMER EXYNOS4_PA_TIMER
|
||||
#define S5P_PA_EHCI EXYNOS4_PA_EHCI
|
||||
|
||||
#define SAMSUNG_PA_KEYPAD EXYNOS4_PA_KEYPAD
|
||||
|
||||
|
||||
@@ -33,6 +33,9 @@
|
||||
#define S5P_EINT_WAKEUP_MASK S5P_PMUREG(0x0604)
|
||||
#define S5P_WAKEUP_MASK S5P_PMUREG(0x0608)
|
||||
|
||||
#define S5P_USBHOST_PHY_CONTROL S5P_PMUREG(0x0708)
|
||||
#define S5P_USBHOST_PHY_ENABLE (1 << 0)
|
||||
|
||||
#define S5P_MIPI_DPHY_CONTROL(n) S5P_PMUREG(0x0710 + (n) * 4)
|
||||
#define S5P_MIPI_DPHY_ENABLE (1 << 0)
|
||||
#define S5P_MIPI_DPHY_SRESETN (1 << 1)
|
||||
|
||||
@@ -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 */
|
||||
@@ -30,6 +30,8 @@
|
||||
#include <plat/cpu.h>
|
||||
#include <plat/devs.h>
|
||||
#include <plat/sdhci.h>
|
||||
#include <plat/ehci.h>
|
||||
#include <plat/clock.h>
|
||||
|
||||
#include <mach/map.h>
|
||||
|
||||
@@ -262,6 +264,16 @@ static struct i2c_board_info i2c5_devs[] __initdata = {
|
||||
/* max8997, To be updated */
|
||||
};
|
||||
|
||||
/* USB EHCI */
|
||||
static struct s5p_ehci_platdata nuri_ehci_pdata;
|
||||
|
||||
static void __init nuri_ehci_init(void)
|
||||
{
|
||||
struct s5p_ehci_platdata *pdata = &nuri_ehci_pdata;
|
||||
|
||||
s5p_ehci_set_platdata(pdata);
|
||||
}
|
||||
|
||||
static struct platform_device *nuri_devices[] __initdata = {
|
||||
/* Samsung Platform Devices */
|
||||
&emmc_fixed_voltage,
|
||||
@@ -270,6 +282,7 @@ static struct platform_device *nuri_devices[] __initdata = {
|
||||
&s3c_device_hsmmc3,
|
||||
&s3c_device_wdt,
|
||||
&s3c_device_timer[0],
|
||||
&s5p_device_ehci,
|
||||
|
||||
/* NURI Devices */
|
||||
&nuri_gpio_keys,
|
||||
@@ -291,6 +304,9 @@ static void __init nuri_machine_init(void)
|
||||
i2c_register_board_info(1, i2c1_devs, ARRAY_SIZE(i2c1_devs));
|
||||
i2c_register_board_info(5, i2c5_devs, ARRAY_SIZE(i2c5_devs));
|
||||
|
||||
nuri_ehci_init();
|
||||
clk_xusbxti.rate = 24000000;
|
||||
|
||||
/* Last */
|
||||
platform_add_devices(nuri_devices, ARRAY_SIZE(nuri_devices));
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -21,6 +21,10 @@
|
||||
/* USB host controller */
|
||||
#define S3C2410_PA_USBHOST (0x49000000)
|
||||
|
||||
/* S3C2416/S3C2443/S3C2450 High-Speed USB Gadget */
|
||||
#define S3C2416_PA_HSUDC (0x49800000)
|
||||
#define S3C2416_SZ_HSUDC (SZ_4K)
|
||||
|
||||
/* DMA controller */
|
||||
#define S3C2410_PA_DMA (0x4B000000)
|
||||
#define S3C24XX_SZ_DMA SZ_1M
|
||||
|
||||
@@ -37,6 +37,10 @@
|
||||
#define S3C2443_SYSID S3C2443_CLKREG(0x5C)
|
||||
#define S3C2443_PWRCFG S3C2443_CLKREG(0x60)
|
||||
#define S3C2443_RSTCON S3C2443_CLKREG(0x64)
|
||||
#define S3C2443_PHYCTRL S3C2443_CLKREG(0x80)
|
||||
#define S3C2443_PHYPWR S3C2443_CLKREG(0x84)
|
||||
#define S3C2443_URSTCON S3C2443_CLKREG(0x88)
|
||||
#define S3C2443_UCLKCON S3C2443_CLKREG(0x8C)
|
||||
|
||||
#define S3C2443_SWRST_RESET (0x533c2443)
|
||||
|
||||
@@ -121,6 +125,27 @@
|
||||
|
||||
#define S3C2443_PWRCFG_SLEEP (1<<15)
|
||||
|
||||
#define S3C2443_PWRCFG_USBPHY (1 << 4)
|
||||
|
||||
#define S3C2443_URSTCON_FUNCRST (1 << 2)
|
||||
#define S3C2443_URSTCON_PHYRST (1 << 0)
|
||||
|
||||
#define S3C2443_PHYCTRL_CLKSEL (1 << 3)
|
||||
#define S3C2443_PHYCTRL_EXTCLK (1 << 2)
|
||||
#define S3C2443_PHYCTRL_PLLSEL (1 << 1)
|
||||
#define S3C2443_PHYCTRL_DSPORT (1 << 0)
|
||||
|
||||
#define S3C2443_PHYPWR_COMMON_ON (1 << 31)
|
||||
#define S3C2443_PHYPWR_ANALOG_PD (1 << 4)
|
||||
#define S3C2443_PHYPWR_PLL_REFCLK (1 << 3)
|
||||
#define S3C2443_PHYPWR_XO_ON (1 << 2)
|
||||
#define S3C2443_PHYPWR_PLL_PWRDN (1 << 1)
|
||||
#define S3C2443_PHYPWR_FSUSPEND (1 << 0)
|
||||
|
||||
#define S3C2443_UCLKCON_DETECT_VBUS (1 << 31)
|
||||
#define S3C2443_UCLKCON_FUNC_CLKEN (1 << 2)
|
||||
#define S3C2443_UCLKCON_TCLKEN (1 << 0)
|
||||
|
||||
#include <asm/div64.h>
|
||||
|
||||
static inline unsigned int
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/fb.h>
|
||||
#include <linux/delay.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
@@ -35,6 +36,7 @@
|
||||
#include <plat/regs-serial.h>
|
||||
#include <mach/regs-gpio.h>
|
||||
#include <mach/regs-lcd.h>
|
||||
#include <mach/regs-s3c2443-clock.h>
|
||||
|
||||
#include <mach/idle.h>
|
||||
#include <mach/leds-gpio.h>
|
||||
@@ -47,6 +49,7 @@
|
||||
#include <plat/cpu.h>
|
||||
#include <plat/nand.h>
|
||||
#include <plat/sdhci.h>
|
||||
#include <plat/udc.h>
|
||||
|
||||
#include <plat/regs-fb-v4.h>
|
||||
#include <plat/fb.h>
|
||||
@@ -121,6 +124,27 @@ static struct s3c2410_uartcfg smdk2416_uartcfgs[] __initdata = {
|
||||
}
|
||||
};
|
||||
|
||||
void smdk2416_hsudc_gpio_init(void)
|
||||
{
|
||||
s3c_gpio_setpull(S3C2410_GPH(14), S3C_GPIO_PULL_UP);
|
||||
s3c_gpio_setpull(S3C2410_GPF(2), S3C_GPIO_PULL_NONE);
|
||||
s3c_gpio_cfgpin(S3C2410_GPH(14), S3C_GPIO_SFN(1));
|
||||
s3c2410_modify_misccr(S3C2416_MISCCR_SEL_SUSPND, 0);
|
||||
}
|
||||
|
||||
void smdk2416_hsudc_gpio_uninit(void)
|
||||
{
|
||||
s3c2410_modify_misccr(S3C2416_MISCCR_SEL_SUSPND, 1);
|
||||
s3c_gpio_setpull(S3C2410_GPH(14), S3C_GPIO_PULL_NONE);
|
||||
s3c_gpio_cfgpin(S3C2410_GPH(14), S3C_GPIO_SFN(0));
|
||||
}
|
||||
|
||||
struct s3c24xx_hsudc_platdata smdk2416_hsudc_platdata = {
|
||||
.epnum = 9,
|
||||
.gpio_init = smdk2416_hsudc_gpio_init,
|
||||
.gpio_uninit = smdk2416_hsudc_gpio_uninit,
|
||||
};
|
||||
|
||||
struct s3c_fb_pd_win smdk2416_fb_win[] = {
|
||||
[0] = {
|
||||
/* think this is the same as the smdk6410 */
|
||||
@@ -186,6 +210,7 @@ static struct platform_device *smdk2416_devices[] __initdata = {
|
||||
&s3c_device_i2c0,
|
||||
&s3c_device_hsmmc0,
|
||||
&s3c_device_hsmmc1,
|
||||
&s3c_device_usb_hsudc,
|
||||
};
|
||||
|
||||
static void __init smdk2416_map_io(void)
|
||||
@@ -203,6 +228,8 @@ static void __init smdk2416_machine_init(void)
|
||||
s3c_sdhci0_set_platdata(&smdk2416_hsmmc0_pdata);
|
||||
s3c_sdhci1_set_platdata(&smdk2416_hsmmc1_pdata);
|
||||
|
||||
s3c24xx_hsudc_set_platdata(&smdk2416_hsudc_platdata);
|
||||
|
||||
gpio_request(S3C2410_GPB(4), "USBHost Power");
|
||||
gpio_direction_output(S3C2410_GPB(4), 1);
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#include <linux/io.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
@@ -233,6 +234,46 @@ void __init s3c24xx_udc_set_platdata(struct s3c2410_udc_mach_info *pd)
|
||||
}
|
||||
}
|
||||
|
||||
/* USB High Speed 2.0 Device (Gadget) */
|
||||
static struct resource s3c_hsudc_resource[] = {
|
||||
[0] = {
|
||||
.start = S3C2416_PA_HSUDC,
|
||||
.end = S3C2416_PA_HSUDC + S3C2416_SZ_HSUDC - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = IRQ_USBD,
|
||||
.end = IRQ_USBD,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
}
|
||||
};
|
||||
|
||||
static u64 s3c_hsudc_dmamask = DMA_BIT_MASK(32);
|
||||
|
||||
struct platform_device s3c_device_usb_hsudc = {
|
||||
.name = "s3c-hsudc",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(s3c_hsudc_resource),
|
||||
.resource = s3c_hsudc_resource,
|
||||
.dev = {
|
||||
.dma_mask = &s3c_hsudc_dmamask,
|
||||
.coherent_dma_mask = DMA_BIT_MASK(32),
|
||||
},
|
||||
};
|
||||
|
||||
void __init s3c24xx_hsudc_set_platdata(struct s3c24xx_hsudc_platdata *pd)
|
||||
{
|
||||
struct s3c24xx_hsudc_platdata *npd;
|
||||
|
||||
npd = kmalloc(sizeof(*npd), GFP_KERNEL);
|
||||
if (npd) {
|
||||
memcpy(npd, pd, sizeof(*npd));
|
||||
s3c_device_usb_hsudc.dev.platform_data = npd;
|
||||
} else {
|
||||
printk(KERN_ERR "no memory for udc platform data\n");
|
||||
}
|
||||
}
|
||||
|
||||
/* IIS */
|
||||
|
||||
static struct resource s3c_iis_resource[] = {
|
||||
|
||||
@@ -37,4 +37,21 @@ struct s3c2410_udc_mach_info {
|
||||
|
||||
extern void __init s3c24xx_udc_set_platdata(struct s3c2410_udc_mach_info *);
|
||||
|
||||
/**
|
||||
* s3c24xx_hsudc_platdata - Platform data for USB High-Speed gadget controller.
|
||||
* @epnum: Number of endpoints to be instantiated by the controller driver.
|
||||
* @gpio_init: Platform specific USB related GPIO initialization.
|
||||
* @gpio_uninit: Platform specific USB releted GPIO uninitialzation.
|
||||
*
|
||||
* Representation of platform data for the S3C24XX USB 2.0 High Speed gadget
|
||||
* controllers.
|
||||
*/
|
||||
struct s3c24xx_hsudc_platdata {
|
||||
unsigned int epnum;
|
||||
void (*gpio_init)(void);
|
||||
void (*gpio_uninit)(void);
|
||||
};
|
||||
|
||||
extern void __init s3c24xx_hsudc_set_platdata(struct s3c24xx_hsudc_platdata *pd);
|
||||
|
||||
#endif /* __ASM_ARM_ARCH_UDC_H */
|
||||
|
||||
@@ -85,6 +85,11 @@ config S5P_DEV_CSIS1
|
||||
help
|
||||
Compile in platform device definitions for MIPI-CSIS channel 1
|
||||
|
||||
config S5P_DEV_USB_EHCI
|
||||
bool
|
||||
help
|
||||
Compile in platform device definition for USB EHCI
|
||||
|
||||
config S5P_SETUP_MIPIPHY
|
||||
bool
|
||||
help
|
||||
|
||||
@@ -33,4 +33,5 @@ obj-$(CONFIG_S5P_DEV_FIMC3) += dev-fimc3.o
|
||||
obj-$(CONFIG_S5P_DEV_ONENAND) += dev-onenand.o
|
||||
obj-$(CONFIG_S5P_DEV_CSIS0) += dev-csis0.o
|
||||
obj-$(CONFIG_S5P_DEV_CSIS1) += dev-csis1.o
|
||||
obj-$(CONFIG_S5P_DEV_USB_EHCI) += dev-ehci.o
|
||||
obj-$(CONFIG_S5P_SETUP_MIPIPHY) += setup-mipiphy.o
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user