
This commit enables support for USB Gadgets on the GONI reference target.
Signed-off-by: Lukasz Majewski l.majewski@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com Cc: Minkyu Kang mk7.kang@samsung.com Cc: Remy Bohmer linux@bohmer.net --- Changes for v2: - None Changes for v3: - Error handlers for max8998_set_ldo functions Changes for v4: - Adjust to new generic PMIC framework Changes for v5: - superfluous include/asm/arch/hs_otg.h removed
Depend on: "New generic PMIC framework"
http://patchwork.ozlabs.org/patch/118071/ http://patchwork.ozlabs.org/patch/117565/ http://patchwork.ozlabs.org/patch/117563/
tools/checkpatch.pl - total: 0 errors, 0 warnings, 75 lines checked
--- arch/arm/include/asm/arch-s5pc1xx/cpu.h | 4 ++ board/samsung/goni/goni.c | 48 ++++++++++++++++++++++++++++++- include/configs/s5p_goni.h | 3 ++ 3 files changed, 54 insertions(+), 1 deletions(-)
diff --git a/arch/arm/include/asm/arch-s5pc1xx/cpu.h b/arch/arm/include/asm/arch-s5pc1xx/cpu.h index e74959f..e699fc4 100644 --- a/arch/arm/include/asm/arch-s5pc1xx/cpu.h +++ b/arch/arm/include/asm/arch-s5pc1xx/cpu.h @@ -55,6 +55,10 @@ #define S5PC110_VIC1_BASE 0xF2100000 #define S5PC110_VIC2_BASE 0xF2200000 #define S5PC110_VIC3_BASE 0xF2300000 +#define S5PC110_OTG_BASE 0xEC000000 +#define S5PC110_PHY_BASE 0xEC100000 +#define S5PC110_USB_PHY_CONTROL 0xE010E80C +
#ifndef __ASSEMBLY__ #include <asm/io.h> diff --git a/board/samsung/goni/goni.c b/board/samsung/goni/goni.c index e191bfb..e8fb1ea 100644 --- a/board/samsung/goni/goni.c +++ b/board/samsung/goni/goni.c @@ -26,7 +26,9 @@ #include <asm/arch/gpio.h> #include <asm/arch/mmc.h> #include <pmic.h> - +#include <usb/s3c_udc.h> +#include <asm/arch/cpu.h> +#include <max8998_pmic.h> DECLARE_GLOBAL_DATA_PTR;
static struct s5pc110_gpio *s5pc110_gpio; @@ -100,3 +102,47 @@ int board_mmc_init(bd_t *bis) return s5p_mmc_init(0, 4); } #endif + +#ifdef CONFIG_USB_GADGET +static int s5pc1xx_phy_control(int on) +{ + int ret; + static int status; + struct pmic *p = get_pmic(); + + if (pmic_probe(p)) + return -1; + + if (on && !status) { + ret = pmic_set_output(p, MAX8998_REG_ONOFF1, + MAX8998_LDO3, LDO_ON); + ret = pmic_set_output(p, MAX8998_REG_ONOFF2, + MAX8998_LDO8, LDO_ON); + if (ret) { + puts("MAX8998 LDO setting error!\n"); + return -1; + } + status = 1; + } else if (!on && status) { + ret = pmic_set_output(p, MAX8998_REG_ONOFF1, + MAX8998_LDO3, LDO_OFF); + ret = pmic_set_output(p, MAX8998_REG_ONOFF2, + MAX8998_LDO8, LDO_OFF); + if (ret) { + puts("MAX8998 LDO setting error!\n"); + return -1; + } + status = 0; + } + udelay(10000); + + return 0; +} + +struct s3c_plat_otg_data s5pc110_otg_data = { + .phy_control = s5pc1xx_phy_control, + .regs_phy = S5PC110_PHY_BASE, + .regs_otg = S5PC110_OTG_BASE, + .usb_phy_ctrl = S5PC110_USB_PHY_CONTROL, +}; +#endif diff --git a/include/configs/s5p_goni.h b/include/configs/s5p_goni.h index f58f4f1..a497e47 100644 --- a/include/configs/s5p_goni.h +++ b/include/configs/s5p_goni.h @@ -240,5 +240,8 @@ #define CONFIG_SYS_I2C_SPEED 50000 #define CONFIG_I2C_MULTI_BUS #define CONFIG_SYS_MAX_I2C_BUS 7 +#define CONFIG_USB_GADGET +#define CONFIG_USB_GADGET_S3C_UDC_OTG +#define CONFIG_USB_GADGET_DUALSPEED
#endif /* __CONFIG_H */