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
4242    uint8_t ep0_atusb_major;
4343    uint8_t ep0_atusb_minor;
4444    uint8_t atusb_hw_type;
45    unsigned char *atusb_build;
4645    struct spi_master *master;
4746    int slave_irq;
4847    int usb_irq;
...... 
163162    usb_free_urb(urb);
164163}
165164
166static int atusb_get_static_info(struct atusb_local *atusb)
165static int atusb_get_and_show_revision(struct atusb_local *atusb)
167166{
167    struct usb_device *dev = atusb->udev;
168168    int retval;
169169
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
176170    /* 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),
179173        ATUSB_ID, ATUSB_FROM_DEV, 0, 0,
180174        atusb->buffer, 3, 1000);
181175    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;
185179    }
186180
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
192static 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,
188199        usb_rcvctrlpipe(atusb->udev, 0),
189200        ATUSB_BUILD, ATUSB_FROM_DEV, 0, 0,
190        atusb->atusb_build, ATUSB_BUILD_SIZE+1, 1000);
201        build, ATUSB_BUILD_SIZE+1, 1000);
191202    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;
195206    }
196207
197    return retval;
208    dev_info(&dev->dev, "Firmware: build %s\n", build);
209
210    return 0;
198211}
199212
200213static void atusb_reset(void *reset_data)
...... 
507520
508521    dev_info(&atusb->spi->dev, "ATUSB ready for mischief (IRQ %d)\n", board_info.irq);
509522
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)
516526        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);
525527
526528    return 0;
527529
...... 
540542    struct atusb_local *atusb = usb_get_intfdata(interface);
541543    struct spi_master *master = atusb->master;
542544
543    kfree(atusb->atusb_build);
544
545545    usb_set_intfdata(interface, NULL);
546546    usb_put_dev(atusb->udev);
547547

Archive Download the corresponding diff file



interactive