[RAMEN9610-14113] [9610] usb: support usb panel
authorKim Taejeong <tj.kim@samsung.com>
Tue, 2 Apr 2019 01:10:17 +0000 (10:10 +0900)
committerhskang <hs1218.kang@samsung.com>
Wed, 3 Apr 2019 07:39:42 +0000 (16:39 +0900)
Change-Id: Ic4c9862bdaf21fa906f583ca061fa5fa3f77f99f
Signed-off-by: Kim Taejeong <tj.kim@samsung.com>
arch/arm64/configs/erd9610_defconfig
drivers/usb/dwc3/otg.c
drivers/usb/typec/Kconfig

index c537ea6d5b5faa7d8405546f66108b0dffac0142..4ab0f7147ed12043308316bf6892ac5cfe4dfaee 100644 (file)
@@ -439,6 +439,7 @@ CONFIG_USB_HW_PARAM=y
 CONFIG_USB_DWC3=y
 #CONFIG_DUAL_ROLE_USB_INTF=y
 CONFIG_TYPEC=y
+CONFIG_TYPEC_DEFAULT=y
 CONFIG_USB_GADGET=y
 CONFIG_USB_CONFIGFS=y
 CONFIG_USB_CONFIGFS_ACM=y
index e6077060d0d07c90633f422f6fd69bd3ea90c3d0..7accaeee8a80e9503abf554a45371893bc0634fd 100644 (file)
 #include <soc/samsung/exynos-pm.h>
 #endif
 
+#if defined(CONFIG_TYPEC_DEFAULT)
+#include <linux/usb/typec.h>
+#endif
+
 #include "core.h"
 #include "otg.h"
 #include "io.h"
 
 /* -------------------------------------------------------------------------- */
 
+#if defined(CONFIG_TYPEC_DEFAULT)
+struct intf_typec {
+       /* struct mutex lock; */ /* device lock */
+       struct device *dev;
+       struct typec_port *port;
+       struct typec_capability cap;
+       struct typec_partner *partner;
+};
+#endif
+
 int otg_connection;
 static int dwc3_otg_statemachine(struct otg_fsm *fsm)
 {
@@ -689,6 +703,10 @@ int dwc3_otg_init(struct dwc3 *dwc)
        struct dwc3_otg *dotg;
        struct dwc3_ext_otg_ops *ops = NULL;
        int ret = 0;
+#if defined(CONFIG_TYPEC_DEFAULT)
+       struct intf_typec       *typec;
+       struct typec_partner_desc partner;
+#endif
 
        dev_info(dwc->dev, "%s\n", __func__);
 
@@ -747,6 +765,33 @@ int dwc3_otg_init(struct dwc3 *dwc)
                }
        }
 
+#if defined(CONFIG_TYPEC_DEFAULT)
+       typec = devm_kzalloc(dwc->dev, sizeof(*typec), GFP_KERNEL);
+       if (!typec)
+               return -ENOMEM;
+
+       /* mutex_init(&md05->lock); */
+       typec->dev = dwc->dev;
+
+       typec->cap.type = TYPEC_PORT_DRP;
+       typec->cap.revision = USB_TYPEC_REV_1_1;
+       typec->cap.prefer_role = TYPEC_NO_PREFERRED_ROLE;
+
+       typec->port = typec_register_port(dwc->dev, &typec->cap);
+       if (!typec->port)
+               return -ENODEV;
+
+       typec_set_data_role(typec->port, TYPEC_DEVICE);
+       typec_set_pwr_role(typec->port, TYPEC_SINK);
+       typec_set_pwr_opmode(typec->port, TYPEC_PWR_MODE_USB);
+
+       dotg->typec = typec;
+
+       typec->partner = typec_register_partner(typec->port, &partner);
+       if (!dotg->typec->partner)
+               dev_err(dwc->dev, "failed register partner\n");
+#endif
+
        wake_lock_init(&dotg->wakelock, WAKE_LOCK_SUSPEND, "dwc3-otg");
 
        ret = sysfs_create_group(&dwc->dev->kobj, &dwc3_otg_attr_group);
@@ -767,6 +812,11 @@ void dwc3_otg_exit(struct dwc3 *dwc)
        if (!dotg->ext_otg_ops)
                return;
 
+#if defined(CONFIG_TYPEC_DEFAULT)
+       typec_unregister_partner(dotg->typec->partner);
+       typec_unregister_port(dotg->typec->port);
+#endif
+
        dwc3_ext_otg_exit(dotg);
 
        sysfs_remove_group(&dwc->dev->kobj, &dwc3_otg_attr_group);
index bc1b7745f1d4f3e73fc74b80a475d2bf02bcded5..1b8d8fe93313fa66e2a7cd7079750a3f240bcbdc 100644 (file)
@@ -4,6 +4,12 @@ menu "USB Power Delivery and Type-C drivers"
 config TYPEC
        tristate
 
+config TYPEC_DEFAULT
+       bool "TYPEC for Default Setting"
+       depends on TYPEC && USBPD_S2MM005
+       help
+         Select this when you want to use TYPEC in ERD.
+
 config TYPEC_WCOVE
        tristate "Intel WhiskeyCove PMIC USB Type-C PHY driver"
        depends on ACPI