All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tony Lindgren <tony@atomide.com>
To: Andrew de Quincey <adq_dvb@lidskialf.net>,
	"Tervo Ville (NMP/Helsinki)" <Ville.Tervo@nokia.com>
Cc: linux-omap@vger.kernel.org
Subject: Re: [patch] Fix brf6510 cleanup code
Date: Mon, 15 Jun 2009 01:02:43 -0700	[thread overview]
Message-ID: <20090615080242.GD4474@atomide.com> (raw)
In-Reply-To: <20090608210333.11295srly8te8xog@lidskialf.net>

* Andrew de Quincey <adq_dvb@lidskialf.net> [090608 13:04]:
> The brf6150 driver is missing several necessary cleanup steps to allow  
> module unloading. Add them.

I've removed the brf6150 from linux-omap as this should get merged into
the mainline kernel via bt list.

Ville & Andrew, can you guys please coordinate on the bt list to get
the driver merged in? I believe there were some changes needed for
passing the hw address as a module option and for loading the firmware
or something..

Thanks,

Tony

> Signed-off-by: Andrew de Quincey <adq@lidskialf.net>
>

> commit bf0e4cba53819df5590a88d551b35a2e79f4de75
> Author: Andrew de Quincey <adq@lidskialf.net>
> Date:   Sat May 30 18:01:58 2009 +0100
> 
>     Fix brf6150 init/shutdown cleanup
> 
> diff --git a/drivers/bluetooth/brf6150.c b/drivers/bluetooth/brf6150.c
> index f29caf5..4f0112a 100644
> --- a/drivers/bluetooth/brf6150.c
> +++ b/drivers/bluetooth/brf6150.c
> @@ -312,7 +312,7 @@ static int brf6150_send_negotiation(struct brf6150_info *info)
>  	skb = brf6150_read_fw_cmd(info, GFP_KERNEL);
>  
>  	if (!skb) {
> -		printk(KERN_WARNING "Cannot read negoatiation message");
> +		printk(KERN_WARNING "Cannot read negotiation message");
>  		return -1;
>  	}
>  
> @@ -873,6 +873,7 @@ static int brf6150_register_hdev(struct brf6150_info *info)
>  	hdev->owner = THIS_MODULE;
>  
>  	if (hci_register_dev(hdev) < 0) {
> +		hci_free_dev(hdev);
>  		printk(KERN_WARNING "brf6150: Can't register HCI device %s.\n", hdev->name);
>  		return -ENODEV;
>  	}
> @@ -885,10 +886,9 @@ static int __init brf6150_init(void)
>  	struct brf6150_info *info;
>  	int irq, err;
>  
> -	info = kmalloc(sizeof(struct brf6150_info), GFP_KERNEL);
> +	info = kzalloc(sizeof(struct brf6150_info), GFP_KERNEL);
>  	if (!info)
>  		return -ENOMEM;
> -	memset(info, 0, sizeof(struct brf6150_info));
>  
>  	brf6150_device.dev.driver_data = info;
>  	init_completion(&info->init_completion);
> @@ -906,8 +906,11 @@ static int __init brf6150_init(void)
>  	exit_info = NULL;
>  
>  	info->btinfo = omap_get_config(OMAP_TAG_NOKIA_BT, struct omap_bluetooth_config);
> -	if (info->btinfo == NULL)
> +	if (info->btinfo == NULL) {
> +		tasklet_kill(&info->tx_task);
> +		kfree(info);
>  		return -1;
> +	}
>  
>  	NBT_DBG("RESET gpio: %d\n", info->btinfo->reset_gpio);
>  	NBT_DBG("BTWU gpio: %d\n", info->btinfo->bt_wakeup_gpio);
> @@ -920,6 +923,7 @@ static int __init brf6150_init(void)
>  	{
>  		printk(KERN_WARNING "Cannot get GPIO line %d", 
>  		       info->btinfo->reset_gpio);
> +		tasklet_kill(&info->tx_task);
>  		kfree(info);
>  		return err;
>  	}
> @@ -930,6 +934,7 @@ static int __init brf6150_init(void)
>  		printk(KERN_WARNING "Cannot get GPIO line 0x%d",
>  		       info->btinfo->bt_wakeup_gpio);
>  		gpio_free(info->btinfo->reset_gpio);
> +		tasklet_kill(&info->tx_task);
>  		kfree(info);
>  		return err;
>  	}
> @@ -941,6 +946,7 @@ static int __init brf6150_init(void)
>  		       info->btinfo->host_wakeup_gpio);
>  		gpio_free(info->btinfo->reset_gpio);
>  		gpio_free(info->btinfo->bt_wakeup_gpio);
> +		tasklet_kill(&info->tx_task);
>  		kfree(info);
>  		return err;
>  	}
> @@ -1027,6 +1033,7 @@ cleanup:
>  	gpio_free(info->btinfo->reset_gpio);
>  	gpio_free(info->btinfo->bt_wakeup_gpio);
>  	gpio_free(info->btinfo->host_wakeup_gpio);
> +	tasklet_kill(&info->tx_task);
>  	kfree(info);
>  
>  	return err;
> @@ -1035,12 +1042,16 @@ cleanup:
>  static void __exit brf6150_exit(void)
>  {
>  	brf6150_hci_close(exit_info->hdev);
> +	hci_unregister_dev(exit_info->hdev);
>  	hci_free_dev(exit_info->hdev);
>  	gpio_free(exit_info->btinfo->reset_gpio);
>  	gpio_free(exit_info->btinfo->bt_wakeup_gpio);
>  	gpio_free(exit_info->btinfo->host_wakeup_gpio);
>  	free_irq(exit_info->irq, (void *)exit_info);
>  	free_irq(gpio_to_irq(exit_info->btinfo->host_wakeup_gpio), (void *)exit_info);
> +	tasklet_kill(&exit_info->tx_task);
> +	platform_device_unregister(&brf6150_device);
> +	platform_driver_unregister(&brf6150_driver);
>  	kfree(exit_info);
>  }
>  

  reply	other threads:[~2009-06-15  8:02 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-05-30 17:07 prepatch: Fix brf6510 cleanup code Andrew de Quincey
2009-06-08 20:03 ` [patch] " Andrew de Quincey
2009-06-15  8:02   ` Tony Lindgren [this message]
2009-06-15  8:38     ` Ville Tervo
2009-06-15  8:58       ` Tony Lindgren
2009-06-15  9:53         ` Tony Lindgren

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090615080242.GD4474@atomide.com \
    --to=tony@atomide.com \
    --cc=Ville.Tervo@nokia.com \
    --cc=adq_dvb@lidskialf.net \
    --cc=linux-omap@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.