summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafaël Carré <rafael.carre@gmail.com>2011-12-19 23:10:41 +0000
committerRafaël Carré <rafael.carre@gmail.com>2011-12-19 23:10:41 +0000
commit74516e06e79cd7c789395d790b79f8dc6e847f50 (patch)
tree96e681cfdebf9d8e342eac36289e9f55f865a3d8
parent02fad29a0783e1ed7d234ee5c940d95dde1b9148 (diff)
downloadrockbox-74516e06e79cd7c789395d790b79f8dc6e847f50.tar.gz
rockbox-74516e06e79cd7c789395d790b79f8dc6e847f50.zip
usb-drv-as3525v2: revert part of r31243
assigning a partially initialized structure (through casting) will initialize members unspecified in the initialization git-svn-id: svn://svn.rockbox.org/rockbox/trunk@31372 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/target/arm/as3525/usb-drv-as3525v2.c33
1 files changed, 15 insertions, 18 deletions
diff --git a/firmware/target/arm/as3525/usb-drv-as3525v2.c b/firmware/target/arm/as3525/usb-drv-as3525v2.c
index c0542d5c45..a96d0d1596 100644
--- a/firmware/target/arm/as3525/usb-drv-as3525v2.c
+++ b/firmware/target/arm/as3525/usb-drv-as3525v2.c
@@ -116,13 +116,12 @@ static void reset_endpoints(void)
116 for (unsigned i = 0; i < num_eps(dir == DIR_OUT); i++) 116 for (unsigned i = 0; i < num_eps(dir == DIR_OUT); i++)
117 { 117 {
118 int ep = ((dir == DIR_IN) ? in_ep_list : out_ep_list)[i]; 118 int ep = ((dir == DIR_IN) ? in_ep_list : out_ep_list)[i];
119 endpoints[ep][out] = (struct usb_endpoint) { 119 struct usb_endpoint *endpoint = &endpoints[ep][out];
120 .active = false, 120 endpoint->active = false;
121 .busy = false, 121 endpoint->busy = false;
122 .status = -1, 122 endpoint->status = -1;
123 .done = false, 123 endpoint->done = false;
124 }; 124 semaphore_release(&endpoint->complete);
125 semaphore_release(&endpoints[ep][out].complete);
126 125
127 if (i != 0) 126 if (i != 0)
128 DEPCTL(ep, out) = DEPCTL_setd0pid; 127 DEPCTL(ep, out) = DEPCTL_setd0pid;
@@ -149,12 +148,11 @@ static void cancel_all_transfers(bool cancel_ep0)
149 for (unsigned i = !!cancel_ep0; i < num_eps(dir == DIR_OUT); i++) 148 for (unsigned i = !!cancel_ep0; i < num_eps(dir == DIR_OUT); i++)
150 { 149 {
151 int ep = ((dir == DIR_IN) ? in_ep_list : out_ep_list)[i]; 150 int ep = ((dir == DIR_IN) ? in_ep_list : out_ep_list)[i];
152 endpoints[ep][dir == DIR_OUT] = (struct usb_endpoint) { 151 struct usb_endpoint *endpoint = &endpoints[ep][dir == DIR_OUT];
153 .status = -1, 152 endpoint->status = -1;
154 .busy = false, 153 endpoint->busy = false;
155 .done = false, 154 endpoint->done = false;
156 }; 155 semaphore_release(&endpoint->complete);
157 semaphore_release(&endpoints[ep][dir == DIR_OUT].complete);
158 DEPCTL(ep, dir) = (DEPCTL(ep, dir) & ~DEPCTL_usbactep); 156 DEPCTL(ep, dir) = (DEPCTL(ep, dir) & ~DEPCTL_usbactep);
159 } 157 }
160 158
@@ -429,11 +427,10 @@ static void usb_drv_transfer(int ep, void *ptr, int len, bool out)
429 /* disable interrupts to avoid any race */ 427 /* disable interrupts to avoid any race */
430 int oldlevel = disable_irq_save(); 428 int oldlevel = disable_irq_save();
431 429
432 endpoints[ep][out ? DIR_OUT : DIR_IN] = (struct usb_endpoint) { 430 struct usb_endpoint *endpoint = &endpoints[ep][out ? DIR_OUT : DIR_IN];
433 .busy = true, 431 endpoint->busy = true;
434 .len = len, 432 endpoint->len = len;
435 .status = -1, 433 endpoint->status = -1;
436 };
437 434
438 if (out) 435 if (out)
439 DEPCTL(ep, out) &= ~DEPCTL_naksts; 436 DEPCTL(ep, out) &= ~DEPCTL_naksts;