| .. | .. |
|---|
| 649 | 649 | deb_info("firmware chunk, addr: 0x%04x, len: 0x%04x, total length: 0x%04zx\n",addr,len,fw->size); |
|---|
| 650 | 650 | if ((ret = bcm3510_write_ram(st,addr,&b[i+4],len)) < 0) { |
|---|
| 651 | 651 | err("firmware download failed: %d\n",ret); |
|---|
| 652 | + release_firmware(fw); |
|---|
| 652 | 653 | return ret; |
|---|
| 653 | 654 | } |
|---|
| 654 | 655 | i += 4 + len; |
|---|
| .. | .. |
|---|
| 773 | 774 | deb_info("attempting to download firmware\n"); |
|---|
| 774 | 775 | if ((ret = bcm3510_init_cold(st)) < 0) |
|---|
| 775 | 776 | return ret; |
|---|
| 776 | | - /* fall-through */ |
|---|
| 777 | + fallthrough; |
|---|
| 777 | 778 | case JDEC_EEPROM_LOAD_WAIT: |
|---|
| 778 | 779 | deb_info("firmware is loaded\n"); |
|---|
| 779 | 780 | bcm3510_check_firmware_version(st); |
|---|
| .. | .. |
|---|
| 834 | 835 | kfree(state); |
|---|
| 835 | 836 | return NULL; |
|---|
| 836 | 837 | } |
|---|
| 837 | | -EXPORT_SYMBOL(bcm3510_attach); |
|---|
| 838 | +EXPORT_SYMBOL_GPL(bcm3510_attach); |
|---|
| 838 | 839 | |
|---|
| 839 | 840 | static const struct dvb_frontend_ops bcm3510_ops = { |
|---|
| 840 | 841 | .delsys = { SYS_ATSC, SYS_DVBC_ANNEX_B }, |
|---|