|
@@ -219,6 +219,7 @@ static int tusb_omap_dma_program(struct dma_channel *channel, u16 packet_sz,
|
|
u32 dma_remaining;
|
|
u32 dma_remaining;
|
|
int src_burst, dst_burst;
|
|
int src_burst, dst_burst;
|
|
u16 csr;
|
|
u16 csr;
|
|
|
|
+ u32 psize;
|
|
int ch;
|
|
int ch;
|
|
s8 dmareq;
|
|
s8 dmareq;
|
|
s8 sync_dev;
|
|
s8 sync_dev;
|
|
@@ -390,15 +391,19 @@ static int tusb_omap_dma_program(struct dma_channel *channel, u16 packet_sz,
|
|
|
|
|
|
if (chdat->tx) {
|
|
if (chdat->tx) {
|
|
/* Send transfer_packet_sz packets at a time */
|
|
/* Send transfer_packet_sz packets at a time */
|
|
- musb_writel(ep_conf, TUSB_EP_MAX_PACKET_SIZE_OFFSET,
|
|
|
|
- chdat->transfer_packet_sz);
|
|
|
|
|
|
+ psize = musb_readl(ep_conf, TUSB_EP_MAX_PACKET_SIZE_OFFSET);
|
|
|
|
+ psize &= ~0x7ff;
|
|
|
|
+ psize |= chdat->transfer_packet_sz;
|
|
|
|
+ musb_writel(ep_conf, TUSB_EP_MAX_PACKET_SIZE_OFFSET, psize);
|
|
|
|
|
|
musb_writel(ep_conf, TUSB_EP_TX_OFFSET,
|
|
musb_writel(ep_conf, TUSB_EP_TX_OFFSET,
|
|
TUSB_EP_CONFIG_XFR_SIZE(chdat->transfer_len));
|
|
TUSB_EP_CONFIG_XFR_SIZE(chdat->transfer_len));
|
|
} else {
|
|
} else {
|
|
/* Receive transfer_packet_sz packets at a time */
|
|
/* Receive transfer_packet_sz packets at a time */
|
|
- musb_writel(ep_conf, TUSB_EP_MAX_PACKET_SIZE_OFFSET,
|
|
|
|
- chdat->transfer_packet_sz << 16);
|
|
|
|
|
|
+ psize = musb_readl(ep_conf, TUSB_EP_MAX_PACKET_SIZE_OFFSET);
|
|
|
|
+ psize &= ~(0x7ff << 16);
|
|
|
|
+ psize |= (chdat->transfer_packet_sz << 16);
|
|
|
|
+ musb_writel(ep_conf, TUSB_EP_MAX_PACKET_SIZE_OFFSET, psize);
|
|
|
|
|
|
musb_writel(ep_conf, TUSB_EP_RX_OFFSET,
|
|
musb_writel(ep_conf, TUSB_EP_RX_OFFSET,
|
|
TUSB_EP_CONFIG_XFR_SIZE(chdat->transfer_len));
|
|
TUSB_EP_CONFIG_XFR_SIZE(chdat->transfer_len));
|