2010-10-05 06:17:16

by Suraj Sumangala

[permalink] [raw]
Subject: [PATCH] Bluetooth: Support for new firmware for ath3k USB Bluetooth device

This patch add support for new ath3k USB Bluetooth device firmare.
The firmware implements shared antenna support and
fixes few critical bugs.

Signed-off-by: Suraj Sumangala <[email protected]>
---
drivers/bluetooth/ath3k.c | 16 +++++++++++++++-
1 files changed, 15 insertions(+), 1 deletions(-)

diff --git a/drivers/bluetooth/ath3k.c b/drivers/bluetooth/ath3k.c
index 128cae4..eb79a8f 100644
--- a/drivers/bluetooth/ath3k.c
+++ b/drivers/bluetooth/ath3k.c
@@ -103,6 +103,9 @@ error:
return err;
}

+#define FW_COUNT 2
+#define FW_PREFIX "ath3k-"
+#define MAXPATHLEN 30
static int ath3k_probe(struct usb_interface *intf,
const struct usb_device_id *id)
{
@@ -110,6 +113,8 @@ static int ath3k_probe(struct usb_interface *intf,
struct usb_device *udev = interface_to_usbdev(intf);
struct ath3k_data *data;
int size;
+ int i;
+ char fw_file[MAXPATHLEN];

BT_DBG("intf %p id %p", intf, id);

@@ -122,7 +127,16 @@ static int ath3k_probe(struct usb_interface *intf,

data->udev = udev;

- if (request_firmware(&firmware, "ath3k-1.fw", &udev->dev) < 0) {
+ for (i = FW_COUNT; i > 0; i--) {
+ snprintf(fw_file, MAXPATHLEN - 1, "%s%d.fw", FW_PREFIX, i);
+
+ if (request_firmware(&firmware, fw_file,
+ &udev->dev) >= 0)
+ break;
+
+ }
+
+ if (!i) {
kfree(data);
return -EIO;
}
--
1.7.0.4



2010-10-05 07:38:55

by Marcel Holtmann

[permalink] [raw]
Subject: Re: [PATCH] Bluetooth: Support for new firmware for ath3k USB Bluetooth device

Hi David,

> > This patch add support for new ath3k USB Bluetooth device firmare.
> > The firmware implements shared antenna support and
> > fixes few critical bugs.
> [...]
> > static int ath3k_probe(struct usb_interface *intf,
> > const struct usb_device_id *id)
> > {
> > @@ -110,6 +113,8 @@ static int ath3k_probe(struct usb_interface *intf,
> > struct usb_device *udev = interface_to_usbdev(intf);
> > struct ath3k_data *data;
> > int size;
> > + int i;
> > + char fw_file[MAXPATHLEN]
>
> Suggest FW_PATH_LEN here to avoid confusion as most people would expect
> MAXPATHLEN to be enormous.
>
> > BT_DBG("intf %p id %p", intf, id);
> >
> > @@ -122,7 +127,16 @@ static int ath3k_probe(struct usb_interface *intf,
> >
> > data->udev = udev;
> >
> > - if (request_firmware(&firmware, "ath3k-1.fw", &udev->dev) < 0) {
>
> Why not request ath3k-1.fw (for backward compatibility) and ath3k.fw and
> symlink this name to ath3k-2.fw or any future version of firmware?
>
> I think users should be able to update firmware without a kernel update
> where possible.

yes, it is mandatory to support at least the last two firmware version.
Just forcing a firmware update with a new kernel is not going to work.

So NAK on this patch.

Regards

Marcel



2010-10-05 07:01:46

by David Vrabel

[permalink] [raw]
Subject: Re: [PATCH] Bluetooth: Support for new firmware for ath3k USB Bluetooth device

On 05/10/2010 07:17, Suraj Sumangala wrote:
> This patch add support for new ath3k USB Bluetooth device firmare.
> The firmware implements shared antenna support and
> fixes few critical bugs.
[...]
> static int ath3k_probe(struct usb_interface *intf,
> const struct usb_device_id *id)
> {
> @@ -110,6 +113,8 @@ static int ath3k_probe(struct usb_interface *intf,
> struct usb_device *udev = interface_to_usbdev(intf);
> struct ath3k_data *data;
> int size;
> + int i;
> + char fw_file[MAXPATHLEN]

Suggest FW_PATH_LEN here to avoid confusion as most people would expect
MAXPATHLEN to be enormous.

> BT_DBG("intf %p id %p", intf, id);
>
> @@ -122,7 +127,16 @@ static int ath3k_probe(struct usb_interface *intf,
>
> data->udev = udev;
>
> - if (request_firmware(&firmware, "ath3k-1.fw", &udev->dev) < 0) {

Why not request ath3k-1.fw (for backward compatibility) and ath3k.fw and
symlink this name to ath3k-2.fw or any future version of firmware?

I think users should be able to update firmware without a kernel update
where possible.

David