[U-Boot] [PATCH V2 1/2] driver:usb:s3c_udc: add support for Exynos4x12

This patch add new defines for usb phy for Exynos4x12.
Signed-off-by: Piotr Wilczek p.wilczek@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Minkyu Kang mk7.kang@samsung.com --- Changes for v2: - no changes
drivers/usb/gadget/regs-otg.h | 5 +++++ drivers/usb/gadget/s3c_udc_otg.c | 10 ++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/drivers/usb/gadget/regs-otg.h b/drivers/usb/gadget/regs-otg.h index 84bfcc5..ac5d112 100644 --- a/drivers/usb/gadget/regs-otg.h +++ b/drivers/usb/gadget/regs-otg.h @@ -226,6 +226,11 @@ struct s3c_usbotg_reg { #define CLK_SEL_12MHZ (0x2 << 0) #define CLK_SEL_48MHZ (0x0 << 0)
+#define EXYNOS4X12_ID_PULLUP0 (0x01 << 3) +#define EXYNOS4X12_COMMON_ON_N0 (0x01 << 4) +#define EXYNOS4X12_CLK_SEL_12MHZ (0x02 << 0) +#define EXYNOS4X12_CLK_SEL_24MHZ (0x05 << 0) + /* Device Configuration Register DCFG */ #define DEV_SPEED_HIGH_SPEED_20 (0x0 << 0) #define DEV_SPEED_FULL_SPEED_20 (0x1 << 0) diff --git a/drivers/usb/gadget/s3c_udc_otg.c b/drivers/usb/gadget/s3c_udc_otg.c index 7e20209..cecd280 100644 --- a/drivers/usb/gadget/s3c_udc_otg.c +++ b/drivers/usb/gadget/s3c_udc_otg.c @@ -36,6 +36,7 @@ #include "regs-otg.h" #include <usb/lin_gadget_compat.h>
+ /***********************************************************/
#define OTG_DMA_MODE 1 @@ -167,8 +168,13 @@ void otg_phy_init(struct s3c_udc *dev) writel((readl(&phy->phypwr) &~(OTG_DISABLE_0 | ANALOG_PWRDOWN) &~FORCE_SUSPEND_0), &phy->phypwr);
- writel((readl(&phy->phyclk) &~(ID_PULLUP0 | COMMON_ON_N0)) | - CLK_SEL_24MHZ, &phy->phyclk); /* PLL 24Mhz */ + if (s5p_cpu_id == 0x4412) + writel((readl(&phy->phyclk) & ~(EXYNOS4X12_ID_PULLUP0 | + EXYNOS4X12_COMMON_ON_N0)) | EXYNOS4X12_CLK_SEL_24MHZ, + &phy->phyclk); /* PLL 24Mhz */ + else + writel((readl(&phy->phyclk) & ~(ID_PULLUP0 | COMMON_ON_N0)) | + CLK_SEL_24MHZ, &phy->phyclk); /* PLL 24Mhz */
writel((readl(&phy->rstcon) &~(LINK_SW_RST | PHYLNK_SW_RST)) | PHY_SW_RST0, &phy->rstcon);

This patch adds support for USB and enables 'ums' command on Trats2 board.
Signed-off-by: Piotr Wilczek p.wilczek@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Minkyu Kang mk7.kang@samsung.com --- This patch depends on the lated u-boot-usb/master.
Changes for v2: - rebased on current USB tree - removed unnecessary pmic probing
board/samsung/trats2/trats2.c | 92 +++++++++++++++++++++++++++++++++++++++++ include/configs/trats2.h | 18 ++++++++ 2 files changed, 110 insertions(+)
diff --git a/board/samsung/trats2/trats2.c b/board/samsung/trats2/trats2.c index d44d825..41a7310 100644 --- a/board/samsung/trats2/trats2.c +++ b/board/samsung/trats2/trats2.c @@ -25,6 +25,9 @@ #include <power/max77693_fg.h> #include <libtizen.h> #include <errno.h> +#include <usb.h> +#include <usb/s3c_udc.h> +#include <usb_mass_storage.h>
DECLARE_GLOBAL_DATA_PTR;
@@ -308,6 +311,95 @@ int board_mmc_init(bd_t *bis) return err0 & err2; }
+#ifdef CONFIG_USB_GADGET +static int s5pc210_phy_control(int on) +{ + int ret = 0; + unsigned int val; + struct pmic *p, *p_pmic, *p_muic; + + p_pmic = pmic_get("MAX77686_PMIC"); + if (!p_pmic) + return -ENODEV; + + if (pmic_probe(p_pmic)) + return -1; + + p_muic = pmic_get("MAX77693_MUIC"); + if (!p_muic) + return -ENODEV; + + if (pmic_probe(p_muic)) + return -1; + + if (on) { + ret = max77686_set_ldo_mode(p_pmic, 12, OPMODE_ON); + if (ret) + return -1; + + p = pmic_get("MAX77693_PMIC"); + if (!p) + return -ENODEV; + + if (pmic_probe(p)) + return -1; + + /* SAFEOUT */ + ret = pmic_reg_read(p, MAX77693_SAFEOUT, &val); + if (ret) + return -1; + + val |= MAX77693_ENSAFEOUT1; + ret = pmic_reg_write(p, MAX77693_SAFEOUT, val); + if (ret) + return -1; + + /* PATH: USB */ + ret = pmic_reg_write(p_muic, MAX77693_MUIC_CONTROL1, + MAX77693_MUIC_CTRL1_DN1DP2); + + } else { + ret = max77686_set_ldo_mode(p_pmic, 12, OPMODE_LPM); + if (ret) + return -1; + + /* PATH: UART */ + ret = pmic_reg_write(p_muic, MAX77693_MUIC_CONTROL1, + MAX77693_MUIC_CTRL1_UT1UR2); + } + + if (ret) + return -1; + + + return 0; +} + +struct s3c_plat_otg_data s5pc210_otg_data = { + .phy_control = s5pc210_phy_control, + .regs_phy = EXYNOS4X12_USBPHY_BASE, + .regs_otg = EXYNOS4X12_USBOTG_BASE, + .usb_phy_ctrl = EXYNOS4X12_USBPHY_CONTROL, + .usb_flags = PHY0_SLEEP, +}; + +int board_usb_init(int index, enum usb_init_type init) +{ + debug("USB_udc_probe\n"); + return s3c_udc_probe(&s5pc210_otg_data); +} + +#ifdef CONFIG_USB_CABLE_CHECK +int usb_cable_connected(void) +{ + struct pmic *muic = pmic_get("MAX77693_MUIC"); + int cable_connected = muic->chrg->chrg_type(muic); + + return !!cable_connected; +} +#endif +#endif + static int pmic_init_max77686(void) { struct pmic *p = pmic_get("MAX77686_PMIC"); diff --git a/include/configs/trats2.h b/include/configs/trats2.h index 0e93836..66b1c95 100644 --- a/include/configs/trats2.h +++ b/include/configs/trats2.h @@ -113,6 +113,16 @@ #define CONFIG_CMD_EXT4 #define CONFIG_CMD_EXT4_WRITE
+/* USB Composite download gadget - g_dnl */ +#define CONFIG_USBDOWNLOAD_GADGET +#define CONFIG_DFU_FUNCTION +#define CONFIG_DFU_MMC + +/* USB Samsung's IDs */ +#define CONFIG_G_DNL_VENDOR_NUM 0x04E8 +#define CONFIG_G_DNL_PRODUCT_NUM 0x6601 +#define CONFIG_G_DNL_MANUFACTURER "Samsung" + /* To use the TFTPBOOT over USB, Please enable the CONFIG_CMD_NET */ #undef CONFIG_CMD_NET
@@ -293,6 +303,11 @@ #define CONFIG_POWER_MUIC_MAX77693 #define CONFIG_POWER_FG_MAX77693 #define CONFIG_POWER_BATTERY_TRATS2 +#define CONFIG_USB_GADGET +#define CONFIG_USB_GADGET_S3C_UDC_OTG +#define CONFIG_USB_GADGET_DUALSPEED +#define CONFIG_USB_GADGET_VBUS_DRAW 2 +#define CONFIG_USB_CABLE_CHECK
/* LCD */ #define CONFIG_EXYNOS_FB @@ -305,6 +320,9 @@ #define CONFIG_VIDEO_BMP_GZIP #define CONFIG_SYS_VIDEO_LOGO_MAX_SIZE ((500 * 250 * 4) + (1 << 12))
+#define CONFIG_CMD_USB_MASS_STORAGE +#define CONFIG_USB_GADGET_MASS_STORAGE + /* Pass open firmware flat tree */ #define CONFIG_OF_LIBFDT 1

Acked-by: Jaehoon Chung jh80.chung@samsung.com
On 11/06/2013 10:46 PM, Piotr Wilczek wrote:
This patch adds support for USB and enables 'ums' command on Trats2 board.
Signed-off-by: Piotr Wilczek p.wilczek@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Minkyu Kang mk7.kang@samsung.com
This patch depends on the lated u-boot-usb/master.
Changes for v2:
- rebased on current USB tree
- removed unnecessary pmic probing
board/samsung/trats2/trats2.c | 92 +++++++++++++++++++++++++++++++++++++++++ include/configs/trats2.h | 18 ++++++++ 2 files changed, 110 insertions(+)
diff --git a/board/samsung/trats2/trats2.c b/board/samsung/trats2/trats2.c index d44d825..41a7310 100644 --- a/board/samsung/trats2/trats2.c +++ b/board/samsung/trats2/trats2.c @@ -25,6 +25,9 @@ #include <power/max77693_fg.h> #include <libtizen.h> #include <errno.h> +#include <usb.h> +#include <usb/s3c_udc.h> +#include <usb_mass_storage.h>
DECLARE_GLOBAL_DATA_PTR;
@@ -308,6 +311,95 @@ int board_mmc_init(bd_t *bis) return err0 & err2; }
+#ifdef CONFIG_USB_GADGET +static int s5pc210_phy_control(int on) +{
- int ret = 0;
- unsigned int val;
- struct pmic *p, *p_pmic, *p_muic;
- p_pmic = pmic_get("MAX77686_PMIC");
- if (!p_pmic)
return -ENODEV;
- if (pmic_probe(p_pmic))
return -1;
- p_muic = pmic_get("MAX77693_MUIC");
- if (!p_muic)
return -ENODEV;
- if (pmic_probe(p_muic))
return -1;
- if (on) {
ret = max77686_set_ldo_mode(p_pmic, 12, OPMODE_ON);
if (ret)
return -1;
p = pmic_get("MAX77693_PMIC");
if (!p)
return -ENODEV;
if (pmic_probe(p))
return -1;
/* SAFEOUT */
ret = pmic_reg_read(p, MAX77693_SAFEOUT, &val);
if (ret)
return -1;
val |= MAX77693_ENSAFEOUT1;
ret = pmic_reg_write(p, MAX77693_SAFEOUT, val);
if (ret)
return -1;
/* PATH: USB */
ret = pmic_reg_write(p_muic, MAX77693_MUIC_CONTROL1,
MAX77693_MUIC_CTRL1_DN1DP2);
- } else {
ret = max77686_set_ldo_mode(p_pmic, 12, OPMODE_LPM);
if (ret)
return -1;
/* PATH: UART */
ret = pmic_reg_write(p_muic, MAX77693_MUIC_CONTROL1,
MAX77693_MUIC_CTRL1_UT1UR2);
- }
- if (ret)
return -1;
- return 0;
+}
+struct s3c_plat_otg_data s5pc210_otg_data = {
- .phy_control = s5pc210_phy_control,
- .regs_phy = EXYNOS4X12_USBPHY_BASE,
- .regs_otg = EXYNOS4X12_USBOTG_BASE,
- .usb_phy_ctrl = EXYNOS4X12_USBPHY_CONTROL,
- .usb_flags = PHY0_SLEEP,
+};
+int board_usb_init(int index, enum usb_init_type init) +{
- debug("USB_udc_probe\n");
- return s3c_udc_probe(&s5pc210_otg_data);
+}
+#ifdef CONFIG_USB_CABLE_CHECK +int usb_cable_connected(void) +{
- struct pmic *muic = pmic_get("MAX77693_MUIC");
- int cable_connected = muic->chrg->chrg_type(muic);
- return !!cable_connected;
+} +#endif +#endif
static int pmic_init_max77686(void) { struct pmic *p = pmic_get("MAX77686_PMIC"); diff --git a/include/configs/trats2.h b/include/configs/trats2.h index 0e93836..66b1c95 100644 --- a/include/configs/trats2.h +++ b/include/configs/trats2.h @@ -113,6 +113,16 @@ #define CONFIG_CMD_EXT4 #define CONFIG_CMD_EXT4_WRITE
+/* USB Composite download gadget - g_dnl */ +#define CONFIG_USBDOWNLOAD_GADGET +#define CONFIG_DFU_FUNCTION +#define CONFIG_DFU_MMC
+/* USB Samsung's IDs */ +#define CONFIG_G_DNL_VENDOR_NUM 0x04E8 +#define CONFIG_G_DNL_PRODUCT_NUM 0x6601 +#define CONFIG_G_DNL_MANUFACTURER "Samsung"
/* To use the TFTPBOOT over USB, Please enable the CONFIG_CMD_NET */ #undef CONFIG_CMD_NET
@@ -293,6 +303,11 @@ #define CONFIG_POWER_MUIC_MAX77693 #define CONFIG_POWER_FG_MAX77693 #define CONFIG_POWER_BATTERY_TRATS2 +#define CONFIG_USB_GADGET +#define CONFIG_USB_GADGET_S3C_UDC_OTG +#define CONFIG_USB_GADGET_DUALSPEED +#define CONFIG_USB_GADGET_VBUS_DRAW 2 +#define CONFIG_USB_CABLE_CHECK
/* LCD */ #define CONFIG_EXYNOS_FB @@ -305,6 +320,9 @@ #define CONFIG_VIDEO_BMP_GZIP #define CONFIG_SYS_VIDEO_LOGO_MAX_SIZE ((500 * 250 * 4) + (1 << 12))
+#define CONFIG_CMD_USB_MASS_STORAGE +#define CONFIG_USB_GADGET_MASS_STORAGE
/* Pass open firmware flat tree */ #define CONFIG_OF_LIBFDT 1

Dear Piotr.
On 11/06/2013 10:46 PM, Piotr Wilczek wrote:
This patch add new defines for usb phy for Exynos4x12.
Signed-off-by: Piotr Wilczek p.wilczek@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Minkyu Kang mk7.kang@samsung.com
Changes for v2:
- no changes
drivers/usb/gadget/regs-otg.h | 5 +++++ drivers/usb/gadget/s3c_udc_otg.c | 10 ++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/drivers/usb/gadget/regs-otg.h b/drivers/usb/gadget/regs-otg.h index 84bfcc5..ac5d112 100644 --- a/drivers/usb/gadget/regs-otg.h +++ b/drivers/usb/gadget/regs-otg.h @@ -226,6 +226,11 @@ struct s3c_usbotg_reg { #define CLK_SEL_12MHZ (0x2 << 0) #define CLK_SEL_48MHZ (0x0 << 0)
+#define EXYNOS4X12_ID_PULLUP0 (0x01 << 3) +#define EXYNOS4X12_COMMON_ON_N0 (0x01 << 4) +#define EXYNOS4X12_CLK_SEL_12MHZ (0x02 << 0) +#define EXYNOS4X12_CLK_SEL_24MHZ (0x05 << 0)
/* Device Configuration Register DCFG */ #define DEV_SPEED_HIGH_SPEED_20 (0x0 << 0) #define DEV_SPEED_FULL_SPEED_20 (0x1 << 0) diff --git a/drivers/usb/gadget/s3c_udc_otg.c b/drivers/usb/gadget/s3c_udc_otg.c index 7e20209..cecd280 100644 --- a/drivers/usb/gadget/s3c_udc_otg.c +++ b/drivers/usb/gadget/s3c_udc_otg.c @@ -36,6 +36,7 @@ #include "regs-otg.h" #include <usb/lin_gadget_compat.h>
remove white-space.
/***********************************************************/
#define OTG_DMA_MODE 1 @@ -167,8 +168,13 @@ void otg_phy_init(struct s3c_udc *dev) writel((readl(&phy->phypwr) &~(OTG_DISABLE_0 | ANALOG_PWRDOWN) &~FORCE_SUSPEND_0), &phy->phypwr);
- writel((readl(&phy->phyclk) &~(ID_PULLUP0 | COMMON_ON_N0)) |
CLK_SEL_24MHZ, &phy->phyclk); /* PLL 24Mhz */
if (s5p_cpu_id == 0x4412)
writel((readl(&phy->phyclk) & ~(EXYNOS4X12_ID_PULLUP0 |
EXYNOS4X12_COMMON_ON_N0)) | EXYNOS4X12_CLK_SEL_24MHZ,
&phy->phyclk); /* PLL 24Mhz */
else
writel((readl(&phy->phyclk) & ~(ID_PULLUP0 | COMMON_ON_N0)) |
CLK_SEL_24MHZ, &phy->phyclk); /* PLL 24Mhz */
writel((readl(&phy->rstcon) &~(LINK_SW_RST | PHYLNK_SW_RST)) | PHY_SW_RST0, &phy->rstcon);

Dear Jaehoon,
-----Original Message----- From: Jaehoon Chung [mailto:jh80.chung@samsung.com] Sent: Thursday, November 07, 2013 5:49 AM To: Piotr Wilczek; u-boot@lists.denx.de Cc: Kyungmin Park Subject: Re: [U-Boot] [PATCH V2 1/2] driver:usb:s3c_udc: add support for Exynos4x12
Dear Piotr.
On 11/06/2013 10:46 PM, Piotr Wilczek wrote:
This patch add new defines for usb phy for Exynos4x12.
Signed-off-by: Piotr Wilczek p.wilczek@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Minkyu Kang mk7.kang@samsung.com
Changes for v2:
- no changes
drivers/usb/gadget/regs-otg.h | 5 +++++ drivers/usb/gadget/s3c_udc_otg.c | 10 ++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/drivers/usb/gadget/regs-otg.h b/drivers/usb/gadget/regs-otg.h index 84bfcc5..ac5d112 100644 --- a/drivers/usb/gadget/regs-otg.h +++ b/drivers/usb/gadget/regs-otg.h @@ -226,6 +226,11 @@ struct s3c_usbotg_reg { #define CLK_SEL_12MHZ (0x2 << 0) #define CLK_SEL_48MHZ (0x0 << 0)
+#define EXYNOS4X12_ID_PULLUP0 (0x01 << 3) +#define EXYNOS4X12_COMMON_ON_N0 (0x01 << 4) +#define EXYNOS4X12_CLK_SEL_12MHZ (0x02 << 0) +#define EXYNOS4X12_CLK_SEL_24MHZ (0x05 << 0)
/* Device Configuration Register DCFG */ #define DEV_SPEED_HIGH_SPEED_20 (0x0 << 0) #define DEV_SPEED_FULL_SPEED_20 (0x1 << 0) diff --git a/drivers/usb/gadget/s3c_udc_otg.c b/drivers/usb/gadget/s3c_udc_otg.c index 7e20209..cecd280 100644 --- a/drivers/usb/gadget/s3c_udc_otg.c +++ b/drivers/usb/gadget/s3c_udc_otg.c @@ -36,6 +36,7 @@ #include "regs-otg.h" #include <usb/lin_gadget_compat.h>
remove white-space.
I will, thanks for review.
/***********************************************************/
#define OTG_DMA_MODE 1 @@ -167,8 +168,13 @@ void otg_phy_init(struct s3c_udc *dev) writel((readl(&phy->phypwr) &~(OTG_DISABLE_0 |
ANALOG_PWRDOWN)
&~FORCE_SUSPEND_0), &phy->phypwr);
- writel((readl(&phy->phyclk) &~(ID_PULLUP0 | COMMON_ON_N0)) |
CLK_SEL_24MHZ, &phy->phyclk); /* PLL 24Mhz */
- if (s5p_cpu_id == 0x4412)
writel((readl(&phy->phyclk) & ~(EXYNOS4X12_ID_PULLUP0 |
EXYNOS4X12_COMMON_ON_N0)) |
EXYNOS4X12_CLK_SEL_24MHZ,
&phy->phyclk); /* PLL 24Mhz */
- else
writel((readl(&phy->phyclk) & ~(ID_PULLUP0 | COMMON_ON_N0))
|
CLK_SEL_24MHZ, &phy->phyclk); /* PLL 24Mhz */
writel((readl(&phy->rstcon) &~(LINK_SW_RST | PHYLNK_SW_RST)) | PHY_SW_RST0, &phy->rstcon);
Best regards, Piotr Wilczek

This patch add new defines for usb phy for Exynos4x12.
Signed-off-by: Piotr Wilczek p.wilczek@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Minkyu Kang mk7.kang@samsung.com ---
Chnages for v3: - removed unnecessary empty line
Changes for v2: - no changes
drivers/usb/gadget/regs-otg.h | 5 +++++ drivers/usb/gadget/s3c_udc_otg.c | 9 +++++++-- 2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/drivers/usb/gadget/regs-otg.h b/drivers/usb/gadget/regs-otg.h index 84bfcc5..ac5d112 100644 --- a/drivers/usb/gadget/regs-otg.h +++ b/drivers/usb/gadget/regs-otg.h @@ -226,6 +226,11 @@ struct s3c_usbotg_reg { #define CLK_SEL_12MHZ (0x2 << 0) #define CLK_SEL_48MHZ (0x0 << 0)
+#define EXYNOS4X12_ID_PULLUP0 (0x01 << 3) +#define EXYNOS4X12_COMMON_ON_N0 (0x01 << 4) +#define EXYNOS4X12_CLK_SEL_12MHZ (0x02 << 0) +#define EXYNOS4X12_CLK_SEL_24MHZ (0x05 << 0) + /* Device Configuration Register DCFG */ #define DEV_SPEED_HIGH_SPEED_20 (0x0 << 0) #define DEV_SPEED_FULL_SPEED_20 (0x1 << 0) diff --git a/drivers/usb/gadget/s3c_udc_otg.c b/drivers/usb/gadget/s3c_udc_otg.c index 7e20209..ba17a04 100644 --- a/drivers/usb/gadget/s3c_udc_otg.c +++ b/drivers/usb/gadget/s3c_udc_otg.c @@ -167,8 +167,13 @@ void otg_phy_init(struct s3c_udc *dev) writel((readl(&phy->phypwr) &~(OTG_DISABLE_0 | ANALOG_PWRDOWN) &~FORCE_SUSPEND_0), &phy->phypwr);
- writel((readl(&phy->phyclk) &~(ID_PULLUP0 | COMMON_ON_N0)) | - CLK_SEL_24MHZ, &phy->phyclk); /* PLL 24Mhz */ + if (s5p_cpu_id == 0x4412) + writel((readl(&phy->phyclk) & ~(EXYNOS4X12_ID_PULLUP0 | + EXYNOS4X12_COMMON_ON_N0)) | EXYNOS4X12_CLK_SEL_24MHZ, + &phy->phyclk); /* PLL 24Mhz */ + else + writel((readl(&phy->phyclk) & ~(ID_PULLUP0 | COMMON_ON_N0)) | + CLK_SEL_24MHZ, &phy->phyclk); /* PLL 24Mhz */
writel((readl(&phy->rstcon) &~(LINK_SW_RST | PHYLNK_SW_RST)) | PHY_SW_RST0, &phy->rstcon);

This patch adds support for USB and enables 'ums' command on Trats2 board.
Signed-off-by: Piotr Wilczek p.wilczek@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Minkyu Kang mk7.kang@samsung.com
Acked-by: Jaehoon Chung jh80.chung@samsung.com --- This patch depends on the lated u-boot-usb/master.
Changes for v3: - no changes
Changes for v2: - rebased on current USB tree - removed unnecessary pmic probing
board/samsung/trats2/trats2.c | 92 +++++++++++++++++++++++++++++++++++++++++ include/configs/trats2.h | 18 ++++++++ 2 files changed, 110 insertions(+)
diff --git a/board/samsung/trats2/trats2.c b/board/samsung/trats2/trats2.c index d44d825..41a7310 100644 --- a/board/samsung/trats2/trats2.c +++ b/board/samsung/trats2/trats2.c @@ -25,6 +25,9 @@ #include <power/max77693_fg.h> #include <libtizen.h> #include <errno.h> +#include <usb.h> +#include <usb/s3c_udc.h> +#include <usb_mass_storage.h>
DECLARE_GLOBAL_DATA_PTR;
@@ -308,6 +311,95 @@ int board_mmc_init(bd_t *bis) return err0 & err2; }
+#ifdef CONFIG_USB_GADGET +static int s5pc210_phy_control(int on) +{ + int ret = 0; + unsigned int val; + struct pmic *p, *p_pmic, *p_muic; + + p_pmic = pmic_get("MAX77686_PMIC"); + if (!p_pmic) + return -ENODEV; + + if (pmic_probe(p_pmic)) + return -1; + + p_muic = pmic_get("MAX77693_MUIC"); + if (!p_muic) + return -ENODEV; + + if (pmic_probe(p_muic)) + return -1; + + if (on) { + ret = max77686_set_ldo_mode(p_pmic, 12, OPMODE_ON); + if (ret) + return -1; + + p = pmic_get("MAX77693_PMIC"); + if (!p) + return -ENODEV; + + if (pmic_probe(p)) + return -1; + + /* SAFEOUT */ + ret = pmic_reg_read(p, MAX77693_SAFEOUT, &val); + if (ret) + return -1; + + val |= MAX77693_ENSAFEOUT1; + ret = pmic_reg_write(p, MAX77693_SAFEOUT, val); + if (ret) + return -1; + + /* PATH: USB */ + ret = pmic_reg_write(p_muic, MAX77693_MUIC_CONTROL1, + MAX77693_MUIC_CTRL1_DN1DP2); + + } else { + ret = max77686_set_ldo_mode(p_pmic, 12, OPMODE_LPM); + if (ret) + return -1; + + /* PATH: UART */ + ret = pmic_reg_write(p_muic, MAX77693_MUIC_CONTROL1, + MAX77693_MUIC_CTRL1_UT1UR2); + } + + if (ret) + return -1; + + + return 0; +} + +struct s3c_plat_otg_data s5pc210_otg_data = { + .phy_control = s5pc210_phy_control, + .regs_phy = EXYNOS4X12_USBPHY_BASE, + .regs_otg = EXYNOS4X12_USBOTG_BASE, + .usb_phy_ctrl = EXYNOS4X12_USBPHY_CONTROL, + .usb_flags = PHY0_SLEEP, +}; + +int board_usb_init(int index, enum usb_init_type init) +{ + debug("USB_udc_probe\n"); + return s3c_udc_probe(&s5pc210_otg_data); +} + +#ifdef CONFIG_USB_CABLE_CHECK +int usb_cable_connected(void) +{ + struct pmic *muic = pmic_get("MAX77693_MUIC"); + int cable_connected = muic->chrg->chrg_type(muic); + + return !!cable_connected; +} +#endif +#endif + static int pmic_init_max77686(void) { struct pmic *p = pmic_get("MAX77686_PMIC"); diff --git a/include/configs/trats2.h b/include/configs/trats2.h index 0e93836..66b1c95 100644 --- a/include/configs/trats2.h +++ b/include/configs/trats2.h @@ -113,6 +113,16 @@ #define CONFIG_CMD_EXT4 #define CONFIG_CMD_EXT4_WRITE
+/* USB Composite download gadget - g_dnl */ +#define CONFIG_USBDOWNLOAD_GADGET +#define CONFIG_DFU_FUNCTION +#define CONFIG_DFU_MMC + +/* USB Samsung's IDs */ +#define CONFIG_G_DNL_VENDOR_NUM 0x04E8 +#define CONFIG_G_DNL_PRODUCT_NUM 0x6601 +#define CONFIG_G_DNL_MANUFACTURER "Samsung" + /* To use the TFTPBOOT over USB, Please enable the CONFIG_CMD_NET */ #undef CONFIG_CMD_NET
@@ -293,6 +303,11 @@ #define CONFIG_POWER_MUIC_MAX77693 #define CONFIG_POWER_FG_MAX77693 #define CONFIG_POWER_BATTERY_TRATS2 +#define CONFIG_USB_GADGET +#define CONFIG_USB_GADGET_S3C_UDC_OTG +#define CONFIG_USB_GADGET_DUALSPEED +#define CONFIG_USB_GADGET_VBUS_DRAW 2 +#define CONFIG_USB_CABLE_CHECK
/* LCD */ #define CONFIG_EXYNOS_FB @@ -305,6 +320,9 @@ #define CONFIG_VIDEO_BMP_GZIP #define CONFIG_SYS_VIDEO_LOGO_MAX_SIZE ((500 * 250 * 4) + (1 << 12))
+#define CONFIG_CMD_USB_MASS_STORAGE +#define CONFIG_USB_GADGET_MASS_STORAGE + /* Pass open firmware flat tree */ #define CONFIG_OF_LIBFDT 1

Dear Piotr Wilczek,
On 08/11/13 00:00, Piotr Wilczek wrote:
This patch adds support for USB and enables 'ums' command on Trats2 board.
Signed-off-by: Piotr Wilczek p.wilczek@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Minkyu Kang mk7.kang@samsung.com
Acked-by: Jaehoon Chung jh80.chung@samsung.com
This patch depends on the lated u-boot-usb/master.
Changes for v3:
- no changes
Changes for v2:
- rebased on current USB tree
- removed unnecessary pmic probing
board/samsung/trats2/trats2.c | 92 +++++++++++++++++++++++++++++++++++++++++ include/configs/trats2.h | 18 ++++++++ 2 files changed, 110 insertions(+)
diff --git a/board/samsung/trats2/trats2.c b/board/samsung/trats2/trats2.c index d44d825..41a7310 100644 --- a/board/samsung/trats2/trats2.c +++ b/board/samsung/trats2/trats2.c @@ -25,6 +25,9 @@ #include <power/max77693_fg.h> #include <libtizen.h> #include <errno.h> +#include <usb.h> +#include <usb/s3c_udc.h> +#include <usb_mass_storage.h>
DECLARE_GLOBAL_DATA_PTR;
@@ -308,6 +311,95 @@ int board_mmc_init(bd_t *bis) return err0 & err2; }
+#ifdef CONFIG_USB_GADGET +static int s5pc210_phy_control(int on) +{
- int ret = 0;
- unsigned int val;
- struct pmic *p, *p_pmic, *p_muic;
- p_pmic = pmic_get("MAX77686_PMIC");
- if (!p_pmic)
return -ENODEV;
- if (pmic_probe(p_pmic))
return -1;
- p_muic = pmic_get("MAX77693_MUIC");
- if (!p_muic)
return -ENODEV;
- if (pmic_probe(p_muic))
return -1;
- if (on) {
ret = max77686_set_ldo_mode(p_pmic, 12, OPMODE_ON);
if (ret)
return -1;
p = pmic_get("MAX77693_PMIC");
if (!p)
return -ENODEV;
if (pmic_probe(p))
return -1;
/* SAFEOUT */
ret = pmic_reg_read(p, MAX77693_SAFEOUT, &val);
if (ret)
return -1;
val |= MAX77693_ENSAFEOUT1;
ret = pmic_reg_write(p, MAX77693_SAFEOUT, val);
if (ret)
return -1;
/* PATH: USB */
ret = pmic_reg_write(p_muic, MAX77693_MUIC_CONTROL1,
MAX77693_MUIC_CTRL1_DN1DP2);
- } else {
ret = max77686_set_ldo_mode(p_pmic, 12, OPMODE_LPM);
if (ret)
return -1;
/* PATH: UART */
ret = pmic_reg_write(p_muic, MAX77693_MUIC_CONTROL1,
MAX77693_MUIC_CTRL1_UT1UR2);
- }
- if (ret)
return -1;
please remove blank line.
- return 0;
+}
+struct s3c_plat_otg_data s5pc210_otg_data = {
- .phy_control = s5pc210_phy_control,
- .regs_phy = EXYNOS4X12_USBPHY_BASE,
- .regs_otg = EXYNOS4X12_USBOTG_BASE,
- .usb_phy_ctrl = EXYNOS4X12_USBPHY_CONTROL,
- .usb_flags = PHY0_SLEEP,
+};
+int board_usb_init(int index, enum usb_init_type init) +{
- debug("USB_udc_probe\n");
- return s3c_udc_probe(&s5pc210_otg_data);
+}
+#ifdef CONFIG_USB_CABLE_CHECK +int usb_cable_connected(void) +{
- struct pmic *muic = pmic_get("MAX77693_MUIC");
- int cable_connected = muic->chrg->chrg_type(muic);
Please check that muic is available.
- return !!cable_connected;
I think, cable_connected is unnecessary.
return !!muic->chrg->chrg_type(muic);
+} +#endif +#endif
static int pmic_init_max77686(void) { struct pmic *p = pmic_get("MAX77686_PMIC"); diff --git a/include/configs/trats2.h b/include/configs/trats2.h index 0e93836..66b1c95 100644 --- a/include/configs/trats2.h +++ b/include/configs/trats2.h @@ -113,6 +113,16 @@ #define CONFIG_CMD_EXT4 #define CONFIG_CMD_EXT4_WRITE
+/* USB Composite download gadget - g_dnl */ +#define CONFIG_USBDOWNLOAD_GADGET +#define CONFIG_DFU_FUNCTION +#define CONFIG_DFU_MMC
+/* USB Samsung's IDs */ +#define CONFIG_G_DNL_VENDOR_NUM 0x04E8 +#define CONFIG_G_DNL_PRODUCT_NUM 0x6601 +#define CONFIG_G_DNL_MANUFACTURER "Samsung"
/* To use the TFTPBOOT over USB, Please enable the CONFIG_CMD_NET */ #undef CONFIG_CMD_NET
@@ -293,6 +303,11 @@ #define CONFIG_POWER_MUIC_MAX77693 #define CONFIG_POWER_FG_MAX77693 #define CONFIG_POWER_BATTERY_TRATS2 +#define CONFIG_USB_GADGET +#define CONFIG_USB_GADGET_S3C_UDC_OTG +#define CONFIG_USB_GADGET_DUALSPEED +#define CONFIG_USB_GADGET_VBUS_DRAW 2 +#define CONFIG_USB_CABLE_CHECK
/* LCD */ #define CONFIG_EXYNOS_FB @@ -305,6 +320,9 @@ #define CONFIG_VIDEO_BMP_GZIP #define CONFIG_SYS_VIDEO_LOGO_MAX_SIZE ((500 * 250 * 4) + (1 << 12))
+#define CONFIG_CMD_USB_MASS_STORAGE +#define CONFIG_USB_GADGET_MASS_STORAGE
/* Pass open firmware flat tree */ #define CONFIG_OF_LIBFDT 1
Thanks, Minkyu Kang.

Dear Minkyu Kang,
-----Original Message----- From: Minkyu Kang [mailto:mk7.kang@samsung.com] Sent: Thursday, November 21, 2013 9:24 AM To: Piotr Wilczek Cc: u-boot@lists.denx.de; Kyungmin Park Subject: Re: [PATCH V3 2/2] trats2: enable ums support on Trats2
Dear Piotr Wilczek,
On 08/11/13 00:00, Piotr Wilczek wrote:
This patch adds support for USB and enables 'ums' command on Trats2
board.
Signed-off-by: Piotr Wilczek p.wilczek@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Minkyu Kang mk7.kang@samsung.com
Acked-by: Jaehoon Chung jh80.chung@samsung.com
This patch depends on the lated u-boot-usb/master.
Changes for v3:
- no changes
Changes for v2:
- rebased on current USB tree
- removed unnecessary pmic probing
board/samsung/trats2/trats2.c | 92
+++++++++++++++++++++++++++++++++++++++++
include/configs/trats2.h | 18 ++++++++ 2 files changed, 110 insertions(+)
diff --git a/board/samsung/trats2/trats2.c b/board/samsung/trats2/trats2.c index d44d825..41a7310 100644 --- a/board/samsung/trats2/trats2.c +++ b/board/samsung/trats2/trats2.c @@ -25,6 +25,9 @@ #include <power/max77693_fg.h> #include <libtizen.h> #include <errno.h> +#include <usb.h> +#include <usb/s3c_udc.h> +#include <usb_mass_storage.h>
DECLARE_GLOBAL_DATA_PTR;
@@ -308,6 +311,95 @@ int board_mmc_init(bd_t *bis) return err0 & err2; }
+#ifdef CONFIG_USB_GADGET +static int s5pc210_phy_control(int on) {
- int ret = 0;
- unsigned int val;
- struct pmic *p, *p_pmic, *p_muic;
- p_pmic = pmic_get("MAX77686_PMIC");
- if (!p_pmic)
return -ENODEV;
- if (pmic_probe(p_pmic))
return -1;
- p_muic = pmic_get("MAX77693_MUIC");
- if (!p_muic)
return -ENODEV;
- if (pmic_probe(p_muic))
return -1;
- if (on) {
ret = max77686_set_ldo_mode(p_pmic, 12, OPMODE_ON);
if (ret)
return -1;
p = pmic_get("MAX77693_PMIC");
if (!p)
return -ENODEV;
if (pmic_probe(p))
return -1;
/* SAFEOUT */
ret = pmic_reg_read(p, MAX77693_SAFEOUT, &val);
if (ret)
return -1;
val |= MAX77693_ENSAFEOUT1;
ret = pmic_reg_write(p, MAX77693_SAFEOUT, val);
if (ret)
return -1;
/* PATH: USB */
ret = pmic_reg_write(p_muic, MAX77693_MUIC_CONTROL1,
MAX77693_MUIC_CTRL1_DN1DP2);
- } else {
ret = max77686_set_ldo_mode(p_pmic, 12, OPMODE_LPM);
if (ret)
return -1;
/* PATH: UART */
ret = pmic_reg_write(p_muic, MAX77693_MUIC_CONTROL1,
MAX77693_MUIC_CTRL1_UT1UR2);
- }
- if (ret)
return -1;
please remove blank line.
Ok
- return 0;
+}
+struct s3c_plat_otg_data s5pc210_otg_data = {
- .phy_control = s5pc210_phy_control,
- .regs_phy = EXYNOS4X12_USBPHY_BASE,
- .regs_otg = EXYNOS4X12_USBOTG_BASE,
- .usb_phy_ctrl = EXYNOS4X12_USBPHY_CONTROL,
- .usb_flags = PHY0_SLEEP,
+};
+int board_usb_init(int index, enum usb_init_type init) {
- debug("USB_udc_probe\n");
- return s3c_udc_probe(&s5pc210_otg_data); }
+#ifdef CONFIG_USB_CABLE_CHECK +int usb_cable_connected(void) +{
- struct pmic *muic = pmic_get("MAX77693_MUIC");
- int cable_connected = muic->chrg->chrg_type(muic);
Please check that muic is available.
Ok
- return !!cable_connected;
I think, cable_connected is unnecessary.
return !!muic->chrg->chrg_type(muic);
Ok
+} +#endif +#endif
static int pmic_init_max77686(void) { struct pmic *p = pmic_get("MAX77686_PMIC"); diff --git a/include/configs/trats2.h b/include/configs/trats2.h index 0e93836..66b1c95 100644 --- a/include/configs/trats2.h +++ b/include/configs/trats2.h @@ -113,6 +113,16 @@ #define CONFIG_CMD_EXT4 #define CONFIG_CMD_EXT4_WRITE
+/* USB Composite download gadget - g_dnl */ #define +CONFIG_USBDOWNLOAD_GADGET #define CONFIG_DFU_FUNCTION #define +CONFIG_DFU_MMC
+/* USB Samsung's IDs */ +#define CONFIG_G_DNL_VENDOR_NUM 0x04E8 #define +CONFIG_G_DNL_PRODUCT_NUM 0x6601 #define CONFIG_G_DNL_MANUFACTURER +"Samsung"
/* To use the TFTPBOOT over USB, Please enable the CONFIG_CMD_NET */ #undef CONFIG_CMD_NET
@@ -293,6 +303,11 @@ #define CONFIG_POWER_MUIC_MAX77693 #define CONFIG_POWER_FG_MAX77693 #define CONFIG_POWER_BATTERY_TRATS2 +#define CONFIG_USB_GADGET +#define CONFIG_USB_GADGET_S3C_UDC_OTG #define +CONFIG_USB_GADGET_DUALSPEED +#define CONFIG_USB_GADGET_VBUS_DRAW 2 +#define CONFIG_USB_CABLE_CHECK
/* LCD */ #define CONFIG_EXYNOS_FB @@ -305,6 +320,9 @@ #define CONFIG_VIDEO_BMP_GZIP #define CONFIG_SYS_VIDEO_LOGO_MAX_SIZE ((500 * 250 * 4) + (1 << 12))
+#define CONFIG_CMD_USB_MASS_STORAGE +#define CONFIG_USB_GADGET_MASS_STORAGE
/* Pass open firmware flat tree */ #define CONFIG_OF_LIBFDT 1
Thanks, Minkyu Kang.
Best regards, Piotr Wilczek

Dear Piotr,
On 08/11/13 00:00, Piotr Wilczek wrote:
This patch add new defines for usb phy for Exynos4x12.
Signed-off-by: Piotr Wilczek p.wilczek@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Minkyu Kang mk7.kang@samsung.com
Chnages for v3:
- removed unnecessary empty line
Changes for v2:
- no changes
drivers/usb/gadget/regs-otg.h | 5 +++++ drivers/usb/gadget/s3c_udc_otg.c | 9 +++++++-- 2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/drivers/usb/gadget/regs-otg.h b/drivers/usb/gadget/regs-otg.h index 84bfcc5..ac5d112 100644 --- a/drivers/usb/gadget/regs-otg.h +++ b/drivers/usb/gadget/regs-otg.h @@ -226,6 +226,11 @@ struct s3c_usbotg_reg { #define CLK_SEL_12MHZ (0x2 << 0) #define CLK_SEL_48MHZ (0x0 << 0)
+#define EXYNOS4X12_ID_PULLUP0 (0x01 << 3) +#define EXYNOS4X12_COMMON_ON_N0 (0x01 << 4) +#define EXYNOS4X12_CLK_SEL_12MHZ (0x02 << 0) +#define EXYNOS4X12_CLK_SEL_24MHZ (0x05 << 0)
/* Device Configuration Register DCFG */ #define DEV_SPEED_HIGH_SPEED_20 (0x0 << 0) #define DEV_SPEED_FULL_SPEED_20 (0x1 << 0) diff --git a/drivers/usb/gadget/s3c_udc_otg.c b/drivers/usb/gadget/s3c_udc_otg.c index 7e20209..ba17a04 100644 --- a/drivers/usb/gadget/s3c_udc_otg.c +++ b/drivers/usb/gadget/s3c_udc_otg.c @@ -167,8 +167,13 @@ void otg_phy_init(struct s3c_udc *dev) writel((readl(&phy->phypwr) &~(OTG_DISABLE_0 | ANALOG_PWRDOWN) &~FORCE_SUSPEND_0), &phy->phypwr);
- writel((readl(&phy->phyclk) &~(ID_PULLUP0 | COMMON_ON_N0)) |
CLK_SEL_24MHZ, &phy->phyclk); /* PLL 24Mhz */
- if (s5p_cpu_id == 0x4412)
proid_is_exynos4412()
writel((readl(&phy->phyclk) & ~(EXYNOS4X12_ID_PULLUP0 |
EXYNOS4X12_COMMON_ON_N0)) | EXYNOS4X12_CLK_SEL_24MHZ,
&phy->phyclk); /* PLL 24Mhz */
else
writel((readl(&phy->phyclk) & ~(ID_PULLUP0 | COMMON_ON_N0)) |
CLK_SEL_24MHZ, &phy->phyclk); /* PLL 24Mhz */
writel((readl(&phy->rstcon) &~(LINK_SW_RST | PHYLNK_SW_RST)) | PHY_SW_RST0, &phy->rstcon);
Thanks, Minkyu Kang.

Dear Minkyu Kang,
-----Original Message----- From: Minkyu Kang [mailto:mk7.kang@samsung.com] Sent: Thursday, November 21, 2013 9:10 AM To: Piotr Wilczek Cc: u-boot@lists.denx.de; Kyungmin Park Subject: Re: [PATCH V3 1/2] driver:usb:s3c_udc: add support for Exynos4x12
Dear Piotr,
On 08/11/13 00:00, Piotr Wilczek wrote:
This patch add new defines for usb phy for Exynos4x12.
Signed-off-by: Piotr Wilczek p.wilczek@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Minkyu Kang mk7.kang@samsung.com
Chnages for v3:
- removed unnecessary empty line
Changes for v2:
- no changes
drivers/usb/gadget/regs-otg.h | 5 +++++ drivers/usb/gadget/s3c_udc_otg.c | 9 +++++++-- 2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/drivers/usb/gadget/regs-otg.h b/drivers/usb/gadget/regs-otg.h index 84bfcc5..ac5d112 100644 --- a/drivers/usb/gadget/regs-otg.h +++ b/drivers/usb/gadget/regs-otg.h @@ -226,6 +226,11 @@ struct s3c_usbotg_reg { #define CLK_SEL_12MHZ (0x2 << 0) #define CLK_SEL_48MHZ (0x0 << 0)
+#define EXYNOS4X12_ID_PULLUP0 (0x01 << 3) +#define EXYNOS4X12_COMMON_ON_N0 (0x01 << 4) +#define EXYNOS4X12_CLK_SEL_12MHZ (0x02 << 0) +#define EXYNOS4X12_CLK_SEL_24MHZ (0x05 << 0)
/* Device Configuration Register DCFG */ #define DEV_SPEED_HIGH_SPEED_20 (0x0 << 0) #define DEV_SPEED_FULL_SPEED_20 (0x1 << 0) diff --git a/drivers/usb/gadget/s3c_udc_otg.c b/drivers/usb/gadget/s3c_udc_otg.c index 7e20209..ba17a04 100644 --- a/drivers/usb/gadget/s3c_udc_otg.c +++ b/drivers/usb/gadget/s3c_udc_otg.c @@ -167,8 +167,13 @@ void otg_phy_init(struct s3c_udc *dev) writel((readl(&phy->phypwr) &~(OTG_DISABLE_0 |
ANALOG_PWRDOWN)
&~FORCE_SUSPEND_0), &phy->phypwr);
- writel((readl(&phy->phyclk) &~(ID_PULLUP0 | COMMON_ON_N0)) |
CLK_SEL_24MHZ, &phy->phyclk); /* PLL 24Mhz */
- if (s5p_cpu_id == 0x4412)
proid_is_exynos4412()
Ok but, proid_is_exynos4412() is not available for s5pc1**, ex the Goni board.
writel((readl(&phy->phyclk) & ~(EXYNOS4X12_ID_PULLUP0 |
EXYNOS4X12_COMMON_ON_N0)) |
EXYNOS4X12_CLK_SEL_24MHZ,
&phy->phyclk); /* PLL 24Mhz */
- else
writel((readl(&phy->phyclk) & ~(ID_PULLUP0 | COMMON_ON_N0))
|
CLK_SEL_24MHZ, &phy->phyclk); /* PLL 24Mhz */
writel((readl(&phy->rstcon) &~(LINK_SW_RST | PHYLNK_SW_RST)) | PHY_SW_RST0, &phy->rstcon);
Thanks, Minkyu Kang.
Best regards Piotr Wilczek

On 21/11/13 17:40, Piotr Wilczek wrote:
Dear Minkyu Kang,
-----Original Message----- From: Minkyu Kang [mailto:mk7.kang@samsung.com] Sent: Thursday, November 21, 2013 9:10 AM To: Piotr Wilczek Cc: u-boot@lists.denx.de; Kyungmin Park Subject: Re: [PATCH V3 1/2] driver:usb:s3c_udc: add support for Exynos4x12
Dear Piotr,
On 08/11/13 00:00, Piotr Wilczek wrote:
This patch add new defines for usb phy for Exynos4x12.
Signed-off-by: Piotr Wilczek p.wilczek@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Minkyu Kang mk7.kang@samsung.com
Chnages for v3:
- removed unnecessary empty line
Changes for v2:
- no changes
drivers/usb/gadget/regs-otg.h | 5 +++++ drivers/usb/gadget/s3c_udc_otg.c | 9 +++++++-- 2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/drivers/usb/gadget/regs-otg.h b/drivers/usb/gadget/regs-otg.h index 84bfcc5..ac5d112 100644 --- a/drivers/usb/gadget/regs-otg.h +++ b/drivers/usb/gadget/regs-otg.h @@ -226,6 +226,11 @@ struct s3c_usbotg_reg { #define CLK_SEL_12MHZ (0x2 << 0) #define CLK_SEL_48MHZ (0x0 << 0)
+#define EXYNOS4X12_ID_PULLUP0 (0x01 << 3) +#define EXYNOS4X12_COMMON_ON_N0 (0x01 << 4) +#define EXYNOS4X12_CLK_SEL_12MHZ (0x02 << 0) +#define EXYNOS4X12_CLK_SEL_24MHZ (0x05 << 0)
/* Device Configuration Register DCFG */ #define DEV_SPEED_HIGH_SPEED_20 (0x0 << 0) #define DEV_SPEED_FULL_SPEED_20 (0x1 << 0) diff --git a/drivers/usb/gadget/s3c_udc_otg.c b/drivers/usb/gadget/s3c_udc_otg.c index 7e20209..ba17a04 100644 --- a/drivers/usb/gadget/s3c_udc_otg.c +++ b/drivers/usb/gadget/s3c_udc_otg.c @@ -167,8 +167,13 @@ void otg_phy_init(struct s3c_udc *dev) writel((readl(&phy->phypwr) &~(OTG_DISABLE_0 |
ANALOG_PWRDOWN)
&~FORCE_SUSPEND_0), &phy->phypwr);
- writel((readl(&phy->phyclk) &~(ID_PULLUP0 | COMMON_ON_N0)) |
CLK_SEL_24MHZ, &phy->phyclk); /* PLL 24Mhz */
- if (s5p_cpu_id == 0x4412)
proid_is_exynos4412()
Ok but, proid_is_exynos4412() is not available for s5pc1**, ex the Goni board.
Right.. just keep going. I'll fix it later.
writel((readl(&phy->phyclk) & ~(EXYNOS4X12_ID_PULLUP0 |
EXYNOS4X12_COMMON_ON_N0)) |
EXYNOS4X12_CLK_SEL_24MHZ,
&phy->phyclk); /* PLL 24Mhz */
- else
writel((readl(&phy->phyclk) & ~(ID_PULLUP0 | COMMON_ON_N0))
|
CLK_SEL_24MHZ, &phy->phyclk); /* PLL 24Mhz */
writel((readl(&phy->rstcon) &~(LINK_SW_RST | PHYLNK_SW_RST)) | PHY_SW_RST0, &phy->rstcon);
Thanks, Minkyu Kang.
Best regards Piotr Wilczek
Thanks, Minkyu Kang.

This patch add new defines for usb phy for Exynos4x12.
Signed-off-by: Piotr Wilczek p.wilczek@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Minkyu Kang mk7.kang@samsung.com --- Chnages for v4: - no changes
Chnages for v3: - removed unnecessary empty line
Changes for v2: - no changes
drivers/usb/gadget/regs-otg.h | 5 +++++ drivers/usb/gadget/s3c_udc_otg.c | 9 +++++++-- 2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/drivers/usb/gadget/regs-otg.h b/drivers/usb/gadget/regs-otg.h index 84bfcc5..ac5d112 100644 --- a/drivers/usb/gadget/regs-otg.h +++ b/drivers/usb/gadget/regs-otg.h @@ -226,6 +226,11 @@ struct s3c_usbotg_reg { #define CLK_SEL_12MHZ (0x2 << 0) #define CLK_SEL_48MHZ (0x0 << 0)
+#define EXYNOS4X12_ID_PULLUP0 (0x01 << 3) +#define EXYNOS4X12_COMMON_ON_N0 (0x01 << 4) +#define EXYNOS4X12_CLK_SEL_12MHZ (0x02 << 0) +#define EXYNOS4X12_CLK_SEL_24MHZ (0x05 << 0) + /* Device Configuration Register DCFG */ #define DEV_SPEED_HIGH_SPEED_20 (0x0 << 0) #define DEV_SPEED_FULL_SPEED_20 (0x1 << 0) diff --git a/drivers/usb/gadget/s3c_udc_otg.c b/drivers/usb/gadget/s3c_udc_otg.c index 7e20209..ba17a04 100644 --- a/drivers/usb/gadget/s3c_udc_otg.c +++ b/drivers/usb/gadget/s3c_udc_otg.c @@ -167,8 +167,13 @@ void otg_phy_init(struct s3c_udc *dev) writel((readl(&phy->phypwr) &~(OTG_DISABLE_0 | ANALOG_PWRDOWN) &~FORCE_SUSPEND_0), &phy->phypwr);
- writel((readl(&phy->phyclk) &~(ID_PULLUP0 | COMMON_ON_N0)) | - CLK_SEL_24MHZ, &phy->phyclk); /* PLL 24Mhz */ + if (s5p_cpu_id == 0x4412) + writel((readl(&phy->phyclk) & ~(EXYNOS4X12_ID_PULLUP0 | + EXYNOS4X12_COMMON_ON_N0)) | EXYNOS4X12_CLK_SEL_24MHZ, + &phy->phyclk); /* PLL 24Mhz */ + else + writel((readl(&phy->phyclk) & ~(ID_PULLUP0 | COMMON_ON_N0)) | + CLK_SEL_24MHZ, &phy->phyclk); /* PLL 24Mhz */
writel((readl(&phy->rstcon) &~(LINK_SW_RST | PHYLNK_SW_RST)) | PHY_SW_RST0, &phy->rstcon);

This patch adds support for USB and enables 'ums' command on Trats2 board.
Signed-off-by: Piotr Wilczek p.wilczek@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Minkyu Kang mk7.kang@samsung.com
Acked-by: Jaehoon Chung jh80.chung@samsung.com --- Changes for v4: - removed empty line - added check if muic is available - removed cable_connected
Changes for v3: - no changes
Changes for v2: - rebased on current USB tree - removed unnecessary pmic probing
board/samsung/trats2/trats2.c | 92 +++++++++++++++++++++++++++++++++++++++++ include/configs/trats2.h | 18 ++++++++ 2 files changed, 110 insertions(+)
diff --git a/board/samsung/trats2/trats2.c b/board/samsung/trats2/trats2.c index d44d825..b932a60 100644 --- a/board/samsung/trats2/trats2.c +++ b/board/samsung/trats2/trats2.c @@ -25,6 +25,9 @@ #include <power/max77693_fg.h> #include <libtizen.h> #include <errno.h> +#include <usb.h> +#include <usb/s3c_udc.h> +#include <usb_mass_storage.h>
DECLARE_GLOBAL_DATA_PTR;
@@ -308,6 +311,95 @@ int board_mmc_init(bd_t *bis) return err0 & err2; }
+#ifdef CONFIG_USB_GADGET +static int s5pc210_phy_control(int on) +{ + int ret = 0; + unsigned int val; + struct pmic *p, *p_pmic, *p_muic; + + p_pmic = pmic_get("MAX77686_PMIC"); + if (!p_pmic) + return -ENODEV; + + if (pmic_probe(p_pmic)) + return -1; + + p_muic = pmic_get("MAX77693_MUIC"); + if (!p_muic) + return -ENODEV; + + if (pmic_probe(p_muic)) + return -1; + + if (on) { + ret = max77686_set_ldo_mode(p_pmic, 12, OPMODE_ON); + if (ret) + return -1; + + p = pmic_get("MAX77693_PMIC"); + if (!p) + return -ENODEV; + + if (pmic_probe(p)) + return -1; + + /* SAFEOUT */ + ret = pmic_reg_read(p, MAX77693_SAFEOUT, &val); + if (ret) + return -1; + + val |= MAX77693_ENSAFEOUT1; + ret = pmic_reg_write(p, MAX77693_SAFEOUT, val); + if (ret) + return -1; + + /* PATH: USB */ + ret = pmic_reg_write(p_muic, MAX77693_MUIC_CONTROL1, + MAX77693_MUIC_CTRL1_DN1DP2); + + } else { + ret = max77686_set_ldo_mode(p_pmic, 12, OPMODE_LPM); + if (ret) + return -1; + + /* PATH: UART */ + ret = pmic_reg_write(p_muic, MAX77693_MUIC_CONTROL1, + MAX77693_MUIC_CTRL1_UT1UR2); + } + + if (ret) + return -1; + + return 0; +} + +struct s3c_plat_otg_data s5pc210_otg_data = { + .phy_control = s5pc210_phy_control, + .regs_phy = EXYNOS4X12_USBPHY_BASE, + .regs_otg = EXYNOS4X12_USBOTG_BASE, + .usb_phy_ctrl = EXYNOS4X12_USBPHY_CONTROL, + .usb_flags = PHY0_SLEEP, +}; + +int board_usb_init(int index, enum usb_init_type init) +{ + debug("USB_udc_probe\n"); + return s3c_udc_probe(&s5pc210_otg_data); +} + +#ifdef CONFIG_USB_CABLE_CHECK +int usb_cable_connected(void) +{ + struct pmic *muic = pmic_get("MAX77693_MUIC"); + if (!muic) + return 0; + + return !!muic->chrg->chrg_type(muic); +} +#endif +#endif + static int pmic_init_max77686(void) { struct pmic *p = pmic_get("MAX77686_PMIC"); diff --git a/include/configs/trats2.h b/include/configs/trats2.h index 0e93836..66b1c95 100644 --- a/include/configs/trats2.h +++ b/include/configs/trats2.h @@ -113,6 +113,16 @@ #define CONFIG_CMD_EXT4 #define CONFIG_CMD_EXT4_WRITE
+/* USB Composite download gadget - g_dnl */ +#define CONFIG_USBDOWNLOAD_GADGET +#define CONFIG_DFU_FUNCTION +#define CONFIG_DFU_MMC + +/* USB Samsung's IDs */ +#define CONFIG_G_DNL_VENDOR_NUM 0x04E8 +#define CONFIG_G_DNL_PRODUCT_NUM 0x6601 +#define CONFIG_G_DNL_MANUFACTURER "Samsung" + /* To use the TFTPBOOT over USB, Please enable the CONFIG_CMD_NET */ #undef CONFIG_CMD_NET
@@ -293,6 +303,11 @@ #define CONFIG_POWER_MUIC_MAX77693 #define CONFIG_POWER_FG_MAX77693 #define CONFIG_POWER_BATTERY_TRATS2 +#define CONFIG_USB_GADGET +#define CONFIG_USB_GADGET_S3C_UDC_OTG +#define CONFIG_USB_GADGET_DUALSPEED +#define CONFIG_USB_GADGET_VBUS_DRAW 2 +#define CONFIG_USB_CABLE_CHECK
/* LCD */ #define CONFIG_EXYNOS_FB @@ -305,6 +320,9 @@ #define CONFIG_VIDEO_BMP_GZIP #define CONFIG_SYS_VIDEO_LOGO_MAX_SIZE ((500 * 250 * 4) + (1 << 12))
+#define CONFIG_CMD_USB_MASS_STORAGE +#define CONFIG_USB_GADGET_MASS_STORAGE + /* Pass open firmware flat tree */ #define CONFIG_OF_LIBFDT 1

On 21/11/13 23:46, Piotr Wilczek wrote:
This patch adds support for USB and enables 'ums' command on Trats2 board.
Signed-off-by: Piotr Wilczek p.wilczek@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Minkyu Kang mk7.kang@samsung.com
Acked-by: Jaehoon Chung jh80.chung@samsung.com
Changes for v4:
- removed empty line
- added check if muic is available
- removed cable_connected
Changes for v3:
- no changes
Changes for v2:
- rebased on current USB tree
- removed unnecessary pmic probing
board/samsung/trats2/trats2.c | 92 +++++++++++++++++++++++++++++++++++++++++ include/configs/trats2.h | 18 ++++++++ 2 files changed, 110 insertions(+)
applied to u-boot-samsung.
Thanks, Minkyu Kang.

On 21/11/13 23:46, Piotr Wilczek wrote:
This patch add new defines for usb phy for Exynos4x12.
Signed-off-by: Piotr Wilczek p.wilczek@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Minkyu Kang mk7.kang@samsung.com
Chnages for v4:
- no changes
Chnages for v3:
- removed unnecessary empty line
Changes for v2:
- no changes
drivers/usb/gadget/regs-otg.h | 5 +++++ drivers/usb/gadget/s3c_udc_otg.c | 9 +++++++-- 2 files changed, 12 insertions(+), 2 deletions(-)
applied to u-boot-samsung.
Thanks, Minkyu Kang.
participants (4)
-
Jaehoon Chung
-
Jaehoon Chung
-
Minkyu Kang
-
Piotr Wilczek