|
@@ -995,24 +995,13 @@ static ushort __initdata fifo_mode = 2;
|
|
|
module_param(fifo_mode, ushort, 0);
|
|
|
MODULE_PARM_DESC(fifo_mode, "initial endpoint configuration");
|
|
|
|
|
|
-
|
|
|
-enum fifo_style { FIFO_RXTX, FIFO_TX, FIFO_RX } __attribute__ ((packed));
|
|
|
-enum buf_mode { BUF_SINGLE, BUF_DOUBLE } __attribute__ ((packed));
|
|
|
-
|
|
|
-struct fifo_cfg {
|
|
|
- u8 hw_ep_num;
|
|
|
- enum fifo_style style;
|
|
|
- enum buf_mode mode;
|
|
|
- u16 maxpacket;
|
|
|
-};
|
|
|
-
|
|
|
/*
|
|
|
* tables defining fifo_mode values. define more if you like.
|
|
|
* for host side, make sure both halves of ep1 are set up.
|
|
|
*/
|
|
|
|
|
|
/* mode 0 - fits in 2KB */
|
|
|
-static struct fifo_cfg __initdata mode_0_cfg[] = {
|
|
|
+static struct musb_fifo_cfg __initdata mode_0_cfg[] = {
|
|
|
{ .hw_ep_num = 1, .style = FIFO_TX, .maxpacket = 512, },
|
|
|
{ .hw_ep_num = 1, .style = FIFO_RX, .maxpacket = 512, },
|
|
|
{ .hw_ep_num = 2, .style = FIFO_RXTX, .maxpacket = 512, },
|
|
@@ -1021,7 +1010,7 @@ static struct fifo_cfg __initdata mode_0_cfg[] = {
|
|
|
};
|
|
|
|
|
|
/* mode 1 - fits in 4KB */
|
|
|
-static struct fifo_cfg __initdata mode_1_cfg[] = {
|
|
|
+static struct musb_fifo_cfg __initdata mode_1_cfg[] = {
|
|
|
{ .hw_ep_num = 1, .style = FIFO_TX, .maxpacket = 512, .mode = BUF_DOUBLE, },
|
|
|
{ .hw_ep_num = 1, .style = FIFO_RX, .maxpacket = 512, .mode = BUF_DOUBLE, },
|
|
|
{ .hw_ep_num = 2, .style = FIFO_RXTX, .maxpacket = 512, .mode = BUF_DOUBLE, },
|
|
@@ -1030,7 +1019,7 @@ static struct fifo_cfg __initdata mode_1_cfg[] = {
|
|
|
};
|
|
|
|
|
|
/* mode 2 - fits in 4KB */
|
|
|
-static struct fifo_cfg __initdata mode_2_cfg[] = {
|
|
|
+static struct musb_fifo_cfg __initdata mode_2_cfg[] = {
|
|
|
{ .hw_ep_num = 1, .style = FIFO_TX, .maxpacket = 512, },
|
|
|
{ .hw_ep_num = 1, .style = FIFO_RX, .maxpacket = 512, },
|
|
|
{ .hw_ep_num = 2, .style = FIFO_TX, .maxpacket = 512, },
|
|
@@ -1040,7 +1029,7 @@ static struct fifo_cfg __initdata mode_2_cfg[] = {
|
|
|
};
|
|
|
|
|
|
/* mode 3 - fits in 4KB */
|
|
|
-static struct fifo_cfg __initdata mode_3_cfg[] = {
|
|
|
+static struct musb_fifo_cfg __initdata mode_3_cfg[] = {
|
|
|
{ .hw_ep_num = 1, .style = FIFO_TX, .maxpacket = 512, .mode = BUF_DOUBLE, },
|
|
|
{ .hw_ep_num = 1, .style = FIFO_RX, .maxpacket = 512, .mode = BUF_DOUBLE, },
|
|
|
{ .hw_ep_num = 2, .style = FIFO_TX, .maxpacket = 512, },
|
|
@@ -1050,7 +1039,7 @@ static struct fifo_cfg __initdata mode_3_cfg[] = {
|
|
|
};
|
|
|
|
|
|
/* mode 4 - fits in 16KB */
|
|
|
-static struct fifo_cfg __initdata mode_4_cfg[] = {
|
|
|
+static struct musb_fifo_cfg __initdata mode_4_cfg[] = {
|
|
|
{ .hw_ep_num = 1, .style = FIFO_TX, .maxpacket = 512, },
|
|
|
{ .hw_ep_num = 1, .style = FIFO_RX, .maxpacket = 512, },
|
|
|
{ .hw_ep_num = 2, .style = FIFO_TX, .maxpacket = 512, },
|
|
@@ -1081,7 +1070,7 @@ static struct fifo_cfg __initdata mode_4_cfg[] = {
|
|
|
};
|
|
|
|
|
|
/* mode 5 - fits in 8KB */
|
|
|
-static struct fifo_cfg __initdata mode_5_cfg[] = {
|
|
|
+static struct musb_fifo_cfg __initdata mode_5_cfg[] = {
|
|
|
{ .hw_ep_num = 1, .style = FIFO_TX, .maxpacket = 512, },
|
|
|
{ .hw_ep_num = 1, .style = FIFO_RX, .maxpacket = 512, },
|
|
|
{ .hw_ep_num = 2, .style = FIFO_TX, .maxpacket = 512, },
|
|
@@ -1119,7 +1108,7 @@ static struct fifo_cfg __initdata mode_5_cfg[] = {
|
|
|
*/
|
|
|
static int __init
|
|
|
fifo_setup(struct musb *musb, struct musb_hw_ep *hw_ep,
|
|
|
- const struct fifo_cfg *cfg, u16 offset)
|
|
|
+ const struct musb_fifo_cfg *cfg, u16 offset)
|
|
|
{
|
|
|
void __iomem *mbase = musb->mregs;
|
|
|
int size = 0;
|
|
@@ -1190,17 +1179,23 @@ fifo_setup(struct musb *musb, struct musb_hw_ep *hw_ep,
|
|
|
return offset + (maxpacket << ((c_size & MUSB_FIFOSZ_DPB) ? 1 : 0));
|
|
|
}
|
|
|
|
|
|
-static struct fifo_cfg __initdata ep0_cfg = {
|
|
|
+static struct musb_fifo_cfg __initdata ep0_cfg = {
|
|
|
.style = FIFO_RXTX, .maxpacket = 64,
|
|
|
};
|
|
|
|
|
|
static int __init ep_config_from_table(struct musb *musb)
|
|
|
{
|
|
|
- const struct fifo_cfg *cfg;
|
|
|
+ const struct musb_fifo_cfg *cfg;
|
|
|
unsigned i, n;
|
|
|
int offset;
|
|
|
struct musb_hw_ep *hw_ep = musb->endpoints;
|
|
|
|
|
|
+ if (musb->config->fifo_cfg) {
|
|
|
+ cfg = musb->config->fifo_cfg;
|
|
|
+ n = musb->config->fifo_cfg_size;
|
|
|
+ goto done;
|
|
|
+ }
|
|
|
+
|
|
|
switch (fifo_mode) {
|
|
|
default:
|
|
|
fifo_mode = 0;
|
|
@@ -1235,6 +1230,7 @@ static int __init ep_config_from_table(struct musb *musb)
|
|
|
musb_driver_name, fifo_mode);
|
|
|
|
|
|
|
|
|
+done:
|
|
|
offset = fifo_setup(musb, hw_ep, &ep0_cfg, 0);
|
|
|
/* assert(offset > 0) */
|
|
|
|