On Fri, Jan 21, 2011 at 12:51 AM, zhangfei gao <zhangfei.gao@xxxxxxxxx> wrote: > Hi Johan, > > Is there any general method to open/close bluetooth, using rfkill or > pm_runtime_get/put_* API. > > Currently we use rfkill to close bluetooth, however we met dead lock > issue, for mutex_lock(&rfkill_global_mutex). > So we use workaround to rmmod bt.ko first, or revert the rfkill patch > in hci_core.c. > > BT/WIFI device have chip select pin, we register one rfkill with > sd8x_set_block, and control chip select pin to open/close bt/wifi/fm. > for example: > rfkill unblock bluetooth to open bt > rfkill block bluetooth to close bt > > When "rfkill block bluetooth", > rfkill_fop_write->mutex_lock(&rfkill_global_mutex)->rfkill_set_block->sd8x_set_block->waiting > for card is freed. > BT driver will call > hci_unregister_dev->rfkill_unregister->mutex_lock(&rfkill_global_mutex); > So mutex_lock(&rfkill_global_mutex) will be dead locked. > > If so, do we have to use other method to control chip select pin to > control bt power, such as pm_runtime_get/put_* API. > > Thanks in advance. > Hi, Marcel Do you have some suggestion? When we use "rfkill block bluetooth" to disable bt, bt driver call hci_unregister_dev to free driver. The dead lock happens for acquiring mutex_lock(&rfkill_global_mutex). One in rfkill_unregister from hci_unregister_dev, the other in rfkill_fop_write from "rfkill block bluetooth" . Is this the correct method to open/close bluetooth. Thanks -- To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html