diff mbox series

Bluetooth: btusb: avoid unused function warning

Message ID 20190918195918.2190556-1-arnd@arndb.de
State Accepted
Commit 42d22098127d6384f789107f59caae87d7520fc4
Headers show
Series Bluetooth: btusb: avoid unused function warning | expand

Commit Message

Arnd Bergmann Sept. 18, 2019, 7:59 p.m. UTC
The btusb_rtl_cmd_timeout() function is used inside of an
ifdef, leading to a warning when this part is hidden
from the compiler:

drivers/bluetooth/btusb.c:530:13: error: unused function 'btusb_rtl_cmd_timeout' [-Werror,-Wunused-function]

Use an IS_ENABLED() check instead so the compiler can see
the code and then discard it silently.

Fixes: d7ef0d1e3968 ("Bluetooth: btusb: Use cmd_timeout to reset Realtek device")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>

---
 drivers/bluetooth/btusb.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

-- 
2.20.0

Comments

Marcel Holtmann Sept. 19, 2019, 7:32 a.m. UTC | #1
Hi Arnd,

> The btusb_rtl_cmd_timeout() function is used inside of an

> ifdef, leading to a warning when this part is hidden

> from the compiler:

> 

> drivers/bluetooth/btusb.c:530:13: error: unused function 'btusb_rtl_cmd_timeout' [-Werror,-Wunused-function]

> 

> Use an IS_ENABLED() check instead so the compiler can see

> the code and then discard it silently.

> 

> Fixes: d7ef0d1e3968 ("Bluetooth: btusb: Use cmd_timeout to reset Realtek device")

> Signed-off-by: Arnd Bergmann <arnd@arndb.de>

> ---

> drivers/bluetooth/btusb.c | 5 ++---

> 1 file changed, 2 insertions(+), 3 deletions(-)

> 

> diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c

> index a9c35ebb30f8..23e606aaaea4 100644

> --- a/drivers/bluetooth/btusb.c

> +++ b/drivers/bluetooth/btusb.c

> @@ -3807,8 +3807,8 @@ static int btusb_probe(struct usb_interface *intf,

> 		btusb_check_needs_reset_resume(intf);

> 	}

> 

> -#ifdef CONFIG_BT_HCIBTUSB_RTL

> -	if (id->driver_info & BTUSB_REALTEK) {

> +	if (IS_ENABLED(CONFIG_BT_HCIBTUSB_RTL) &&

> +	    (id->driver_info & BTUSB_REALTEK)) {

> 		hdev->setup = btrtl_setup_realtek;

> 		hdev->shutdown = btrtl_shutdown_realtek;

> 		hdev->cmd_timeout = btusb_rtl_cmd_timeout;

> @@ -3819,7 +3819,6 @@ static int btusb_probe(struct usb_interface *intf,

> 		 */

> 		set_bit(BTUSB_WAKEUP_DISABLE, &data->flags);

> 	}

> -#endif


I prefer that we stick another ifdef around the btusb_rtl_cmd_timeout function since that is how we did it for the other vendors as well.

However I start to wonder if we need all these vendor ifdef anyway. The vendor specific functions should turn into empty stubs if their support is not selected.

Regards

Marcel
Arnd Bergmann Sept. 19, 2019, 12:26 p.m. UTC | #2
On Thu, Sep 19, 2019 at 9:32 AM Marcel Holtmann <marcel@holtmann.org> wrote:
>

> > The btusb_rtl_cmd_timeout() function is used inside of an

> > ifdef, leading to a warning when this part is hidden

> > from the compiler:

> >

> > drivers/bluetooth/btusb.c:530:13: error: unused function 'btusb_rtl_cmd_timeout' [-Werror,-Wunused-function]

> >

> > Use an IS_ENABLED() check instead so the compiler can see

> > the code and then discard it silently.

> >

> > Fixes: d7ef0d1e3968 ("Bluetooth: btusb: Use cmd_timeout to reset Realtek device")

> > Signed-off-by: Arnd Bergmann <arnd@arndb.de>

> > ---

> > drivers/bluetooth/btusb.c | 5 ++---

> > 1 file changed, 2 insertions(+), 3 deletions(-)

> >

> > diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c

> > index a9c35ebb30f8..23e606aaaea4 100644

> > --- a/drivers/bluetooth/btusb.c

> > +++ b/drivers/bluetooth/btusb.c

> > @@ -3807,8 +3807,8 @@ static int btusb_probe(struct usb_interface *intf,

> >               btusb_check_needs_reset_resume(intf);

> >       }

> >

> > -#ifdef CONFIG_BT_HCIBTUSB_RTL

> > -     if (id->driver_info & BTUSB_REALTEK) {

> > +     if (IS_ENABLED(CONFIG_BT_HCIBTUSB_RTL) &&

> > +         (id->driver_info & BTUSB_REALTEK)) {

> >               hdev->setup = btrtl_setup_realtek;

> >               hdev->shutdown = btrtl_shutdown_realtek;

> >               hdev->cmd_timeout = btusb_rtl_cmd_timeout;

> > @@ -3819,7 +3819,6 @@ static int btusb_probe(struct usb_interface *intf,

> >                */

> >               set_bit(BTUSB_WAKEUP_DISABLE, &data->flags);

> >       }

> > -#endif

>

> I prefer that we stick another ifdef around the btusb_rtl_cmd_timeout function since that

> is how we did it for the other vendors as well.


Ok. Can you just commit that with 'Reported-by: Arnd Bergmann <arnd@arndb.de>'?

> However I start to wonder if we need all these vendor ifdef anyway. The vendor specific

> functions should turn into empty stubs if their support is not selected.


It just wastes a little bit of object code space, which my approach
above avoids.

I guess one could also be clever and redefine those macros like

#define BTUSB_REALTEK (IS_ENABLED(CONFIG_BT_HCIBTUSB_RTL) ? 0x20000 : 0)

so the if() section gets silently dropped, in addition to treating
zero like BTUSB_IGNORE.

      Arnd
diff mbox series

Patch

diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index a9c35ebb30f8..23e606aaaea4 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -3807,8 +3807,8 @@  static int btusb_probe(struct usb_interface *intf,
 		btusb_check_needs_reset_resume(intf);
 	}
 
-#ifdef CONFIG_BT_HCIBTUSB_RTL
-	if (id->driver_info & BTUSB_REALTEK) {
+	if (IS_ENABLED(CONFIG_BT_HCIBTUSB_RTL) &&
+	    (id->driver_info & BTUSB_REALTEK)) {
 		hdev->setup = btrtl_setup_realtek;
 		hdev->shutdown = btrtl_shutdown_realtek;
 		hdev->cmd_timeout = btusb_rtl_cmd_timeout;
@@ -3819,7 +3819,6 @@  static int btusb_probe(struct usb_interface *intf,
 		 */
 		set_bit(BTUSB_WAKEUP_DISABLE, &data->flags);
 	}
-#endif
 
 	if (id->driver_info & BTUSB_AMP) {
 		/* AMP controllers do not support SCO packets */