Date: | 2011-07-06 16:20:37 (12 years 5 months ago) |
---|---|
Author: | Werner Almesberger |
Commit: | 6dfb2e55f8f1373e9c87f6952f5d8d7d1b347f7a |
Message: | atusb: removed atusb_build from struct atusb_local and streamlined
"static info" We don't need to keep all this information around after initializing. Also, it's nicer to keep everything in small functions than to spread it out over several of them. Note: it compiles but is otherwise untested. |
Files: |
drivers/spi/atusb.c (4 diffs) |
Change Details
drivers/spi/atusb.c | ||
---|---|---|
42 | 42 | uint8_t ep0_atusb_major; |
43 | 43 | uint8_t ep0_atusb_minor; |
44 | 44 | uint8_t atusb_hw_type; |
45 | unsigned char *atusb_build; | |
46 | 45 | struct spi_master *master; |
47 | 46 | int slave_irq; |
48 | 47 | int usb_irq; |
... | ... | |
163 | 162 | usb_free_urb(urb); |
164 | 163 | } |
165 | 164 | |
166 | static int atusb_get_static_info(struct atusb_local *atusb) | |
165 | static int atusb_get_and_show_revision(struct atusb_local *atusb) | |
167 | 166 | { |
167 | struct usb_device *dev = atusb->udev; | |
168 | 168 | int retval; |
169 | 169 | |
170 | atusb->atusb_build = kzalloc(ATUSB_BUILD_SIZE+1, GFP_KERNEL); | |
171 | if (!atusb->atusb_build) { | |
172 | dev_err(&atusb->udev->dev, "out of memory\n"); | |
173 | retval = -ENOMEM; | |
174 | } | |
175 | ||
176 | 170 | /* Get a couple of the ATMega Firmware values */ |
177 | retval = usb_control_msg(atusb->udev, | |
178 | usb_rcvctrlpipe(atusb->udev, 0), | |
171 | retval = usb_control_msg(dev, | |
172 | usb_rcvctrlpipe(dev, 0), | |
179 | 173 | ATUSB_ID, ATUSB_FROM_DEV, 0, 0, |
180 | 174 | atusb->buffer, 3, 1000); |
181 | 175 | if (retval < 0) { |
182 | dev_info(&atusb->udev->dev, "failed submitting read urb, error %d", | |
183 | retval); | |
184 | retval = (retval == -ENOMEM) ? retval : -EIO; | |
176 | dev_info(&dev->dev, | |
177 | "failed submitting urb for ATUSB_ID, error %d", retval); | |
178 | return retval == -ENOMEM ? retval : -EIO; | |
185 | 179 | } |
186 | 180 | |
187 | retval = usb_control_msg(atusb->udev, | |
181 | atusb->ep0_atusb_major = atusb->buffer[0]; | |
182 | atusb->ep0_atusb_minor = atusb->buffer[1]; | |
183 | atusb->atusb_hw_type = atusb->buffer[2]; | |
184 | dev_info(&dev->dev, | |
185 | "Firmware: major: %u, minor: %u, hardware type: %u\n", | |
186 | atusb->ep0_atusb_major, atusb->ep0_atusb_minor, | |
187 | atusb->atusb_hw_type); | |
188 | ||
189 | return 0; | |
190 | } | |
191 | ||
192 | static int atusb_get_and_show_build(struct atusb_local *atusb) | |
193 | { | |
194 | struct usb_device *dev = atusb->udev; | |
195 | char build[ATUSB_BUILD_SIZE+1]; | |
196 | int retval; | |
197 | ||
198 | retval = usb_control_msg(dev, | |
188 | 199 | usb_rcvctrlpipe(atusb->udev, 0), |
189 | 200 | ATUSB_BUILD, ATUSB_FROM_DEV, 0, 0, |
190 | atusb->atusb_build, ATUSB_BUILD_SIZE+1, 1000); | |
201 | build, ATUSB_BUILD_SIZE+1, 1000); | |
191 | 202 | if (retval < 0) { |
192 | dev_info(&atusb->udev->dev, "failed submitting read urb, error %d", | |
193 | retval); | |
194 | retval = (retval == -ENOMEM) ? retval : -EIO; | |
203 | dev_info(&dev->dev, | |
204 | "failed submitting urb for ATUSB_BUILD, error %d", retval); | |
205 | return retval == -ENOMEM ? retval : -EIO; | |
195 | 206 | } |
196 | 207 | |
197 | return retval; | |
208 | dev_info(&dev->dev, "Firmware: build %s\n", build); | |
209 | ||
210 | return 0; | |
198 | 211 | } |
199 | 212 | |
200 | 213 | static void atusb_reset(void *reset_data) |
... | ... | |
507 | 520 | |
508 | 521 | dev_info(&atusb->spi->dev, "ATUSB ready for mischief (IRQ %d)\n", board_info.irq); |
509 | 522 | |
510 | /* Get the static info from the device and save it */ | |
511 | retval = atusb_get_static_info(atusb); | |
512 | if (retval < 0) { | |
513 | dev_info(&interface->dev, "%s: Failed to get static info: %d\n", | |
514 | __func__, | |
515 | retval); | |
523 | if (atusb_get_and_show_revision(atusb) < 0) | |
524 | goto err_master; | |
525 | if (atusb_get_and_show_build(atusb) < 0) | |
516 | 526 | goto err_master; |
517 | } | |
518 | ||
519 | dev_info(&udev->dev, "Firmware: build %s\n", atusb->atusb_build); | |
520 | atusb->ep0_atusb_major = atusb->buffer[0]; | |
521 | atusb->ep0_atusb_minor = atusb->buffer[1]; | |
522 | atusb->atusb_hw_type = atusb->buffer[2]; | |
523 | dev_info(&udev->dev, "Firmware: major: %u, minor: %u, hardware type: %u\n", | |
524 | atusb->ep0_atusb_major, atusb->ep0_atusb_minor, atusb->atusb_hw_type); | |
525 | 527 | |
526 | 528 | return 0; |
527 | 529 | |
... | ... | |
540 | 542 | struct atusb_local *atusb = usb_get_intfdata(interface); |
541 | 543 | struct spi_master *master = atusb->master; |
542 | 544 | |
543 | kfree(atusb->atusb_build); | |
544 | ||
545 | 545 | usb_set_intfdata(interface, NULL); |
546 | 546 | usb_put_dev(atusb->udev); |
547 | 547 |
Branches:
ben-wpan
ben-wpan-stefan
5396a9238205f20f811ea57898980d3ca82df0b6
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9