Skip to content

Commit

Permalink
usb: s3c-otg: Allow custom gusbcfg
Browse files Browse the repository at this point in the history
Allow passing in a custom configuration of the gusbcfg register
via platform data.

Signed-off-by: Marek Vasut <[email protected]>
Cc: Chin Liang See <[email protected]>
Cc: Dinh Nguyen <[email protected]>
Cc: Vince Bridgers <[email protected]>
Acked-by: Pavel Machek <[email protected]>
Cc: Stefan Roese <[email protected]>
Reviewed-by: Lukasz Majewski <[email protected]>
Tested-by: Lukasz Majewski <[email protected]>
  • Loading branch information
Marek Vasut committed Nov 7, 2014
1 parent d1b6c77 commit 481a11c
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 7 deletions.
18 changes: 12 additions & 6 deletions drivers/usb/gadget/s3c_udc_otg.c
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ static void stop_activity(struct s3c_udc *dev,
struct usb_gadget_driver *driver);
static int udc_enable(struct s3c_udc *dev);
static void udc_set_address(struct s3c_udc *dev, unsigned char address);
static void reconfig_usbd(void);
static void reconfig_usbd(struct s3c_udc *dev);
static void set_max_pktsize(struct s3c_udc *dev, enum usb_device_speed speed);
static void nuke(struct s3c_ep *ep, int status);
static int s3c_udc_set_halt(struct usb_ep *_ep, int value);
Expand Down Expand Up @@ -215,7 +215,7 @@ static int udc_enable(struct s3c_udc *dev)
debug_cond(DEBUG_SETUP != 0, "%s: %p\n", __func__, dev);

otg_phy_init(dev);
reconfig_usbd();
reconfig_usbd(dev);

debug_cond(DEBUG_SETUP != 0,
"S3C USB 2.0 OTG Controller Core Initialized : 0x%x\n",
Expand Down Expand Up @@ -396,15 +396,17 @@ static void stop_activity(struct s3c_udc *dev,
udc_reinit(dev);
}

static void reconfig_usbd(void)
static void reconfig_usbd(struct s3c_udc *dev)
{
/* 2. Soft-reset OTG Core and then unreset again. */
int i;
unsigned int uTemp = writel(CORE_SOFT_RESET, &reg->grstctl);
uint32_t dflt_gusbcfg;

debug("Reseting OTG controller\n");

writel(0<<15 /* PHY Low Power Clock sel*/
dflt_gusbcfg =
0<<15 /* PHY Low Power Clock sel*/
|1<<14 /* Non-Periodic TxFIFO Rewind Enable*/
|0x5<<10 /* Turnaround time*/
|0<<9 | 0<<8 /* [0:HNP disable,1:HNP enable][ 0:SRP disable*/
Expand All @@ -413,8 +415,12 @@ static void reconfig_usbd(void)
|0<<6 /* 0: high speed utmi+, 1: full speed serial*/
|0<<4 /* 0: utmi+, 1:ulpi*/
|1<<3 /* phy i/f 0:8bit, 1:16bit*/
|0x7<<0, /* HS/FS Timeout**/
&reg->gusbcfg);
|0x7<<0; /* HS/FS Timeout**/

if (dev->pdata->usb_gusbcfg)
dflt_gusbcfg = dev->pdata->usb_gusbcfg;

writel(dflt_gusbcfg, &reg->gusbcfg);

/* 3. Put the OTG device core in the disconnected state.*/
uTemp = readl(&reg->dctl);
Expand Down
2 changes: 1 addition & 1 deletion drivers/usb/gadget/s3c_udc_otg_xfer_dma.c
Original file line number Diff line number Diff line change
Expand Up @@ -551,7 +551,7 @@ static int s3c_udc_irq(int irq, void *_dev)
debug_cond(DEBUG_ISR,
"\t\tOTG core got reset (%d)!!\n",
reset_available);
reconfig_usbd();
reconfig_usbd(dev);
dev->ep0state = WAIT_FOR_SETUP;
reset_available = 0;
s3c_udc_pre_setup();
Expand Down
1 change: 1 addition & 0 deletions include/usb/s3c_udc.h
Original file line number Diff line number Diff line change
Expand Up @@ -108,5 +108,6 @@ struct s3c_plat_otg_data {
unsigned int regs_otg;
unsigned int usb_phy_ctrl;
unsigned int usb_flags;
unsigned int usb_gusbcfg;
};
#endif

0 comments on commit 481a11c

Please sign in to comment.