* [PATCH 1/3] Bluetooth: decode btmrvl MODULE_BRINGUP_REG response correctly
@ 2010-03-03 22:37 Bing Zhao
2010-03-03 22:37 ` [PATCH 2/3] Bluetooth: separate btmrvl_register_hdev() from btmrvl_add_card() Bing Zhao
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Bing Zhao @ 2010-03-03 22:37 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Bing Zhao
btmrvl MODULE_BRINGUP_REQ command response returns success with
either 0x00 or 0x0c.
Signed-off-by: Bing Zhao <bzhao@marvell.com>
---
drivers/bluetooth/btmrvl_drv.h | 5 ++++-
drivers/bluetooth/btmrvl_main.c | 6 ++++--
2 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/drivers/bluetooth/btmrvl_drv.h b/drivers/bluetooth/btmrvl_drv.h
index 523d197..bdf5187 100644
--- a/drivers/bluetooth/btmrvl_drv.h
+++ b/drivers/bluetooth/btmrvl_drv.h
@@ -87,8 +87,11 @@ struct btmrvl_private {
#define BT_CMD_HOST_SLEEP_ENABLE 0x5A
#define BT_CMD_MODULE_CFG_REQ 0x5B
-/* Sub-commands: Module Bringup/Shutdown Request */
+/* Sub-commands: Module Bringup/Shutdown Request/Response */
#define MODULE_BRINGUP_REQ 0xF1
+#define MODULE_BROUGHT_UP 0x00
+#define MODULE_ALREADY_UP 0x0C
+
#define MODULE_SHUTDOWN_REQ 0xF2
#define BT_EVENT_POWER_STATE 0x20
diff --git a/drivers/bluetooth/btmrvl_main.c b/drivers/bluetooth/btmrvl_main.c
index 53a43ad..31e7412 100644
--- a/drivers/bluetooth/btmrvl_main.c
+++ b/drivers/bluetooth/btmrvl_main.c
@@ -112,8 +112,10 @@ int btmrvl_process_event(struct btmrvl_private *priv, struct sk_buff *skb)
case BT_CMD_MODULE_CFG_REQ:
if (priv->btmrvl_dev.sendcmdflag &&
event->data[1] == MODULE_BRINGUP_REQ) {
- BT_DBG("EVENT:%s", (event->data[2]) ?
- "Bring-up failed" : "Bring-up succeed");
+ BT_DBG("EVENT:%s",
+ ((event->data[2] == MODULE_BROUGHT_UP) ||
+ (event->data[2] == MODULE_ALREADY_UP)) ?
+ "Bring-up succeed" : "Bring-up failed");
} else if (priv->btmrvl_dev.sendcmdflag &&
event->data[1] == MODULE_SHUTDOWN_REQ) {
BT_DBG("EVENT:%s", (event->data[2]) ?
--
1.5.3.6
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/3] Bluetooth: separate btmrvl_register_hdev() from btmrvl_add_card()
2010-03-03 22:37 [PATCH 1/3] Bluetooth: decode btmrvl MODULE_BRINGUP_REG response correctly Bing Zhao
@ 2010-03-03 22:37 ` Bing Zhao
2010-03-09 0:58 ` Marcel Holtmann
2010-03-03 22:37 ` [PATCH 3/3] Bluetooth: set hdev->dev_type based on Marvell device type Bing Zhao
2010-03-09 0:58 ` [PATCH 1/3] Bluetooth: decode btmrvl MODULE_BRINGUP_REG response correctly Marcel Holtmann
2 siblings, 1 reply; 6+ messages in thread
From: Bing Zhao @ 2010-03-03 22:37 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Bing Zhao
Move btmrvl hdev registration code out of btmrvl_add_card().
New function btmrvl_register_hdev() is added.
Signed-off-by: Bing Zhao <bzhao@marvell.com>
---
drivers/bluetooth/btmrvl_drv.h | 1 +
drivers/bluetooth/btmrvl_main.c | 75 ++++++++++++++++++++++----------------
drivers/bluetooth/btmrvl_sdio.c | 7 +++-
3 files changed, 50 insertions(+), 33 deletions(-)
diff --git a/drivers/bluetooth/btmrvl_drv.h b/drivers/bluetooth/btmrvl_drv.h
index bdf5187..ec8ac5e 100644
--- a/drivers/bluetooth/btmrvl_drv.h
+++ b/drivers/bluetooth/btmrvl_drv.h
@@ -125,6 +125,7 @@ struct btmrvl_event {
/* Prototype of global function */
+int btmrvl_register_hdev(struct btmrvl_private *priv);
struct btmrvl_private *btmrvl_add_card(void *card);
int btmrvl_remove_card(struct btmrvl_private *priv);
diff --git a/drivers/bluetooth/btmrvl_main.c b/drivers/bluetooth/btmrvl_main.c
index 31e7412..277cb10 100644
--- a/drivers/bluetooth/btmrvl_main.c
+++ b/drivers/bluetooth/btmrvl_main.c
@@ -524,47 +524,20 @@ static int btmrvl_service_main_thread(void *data)
return 0;
}
-struct btmrvl_private *btmrvl_add_card(void *card)
+int btmrvl_register_hdev(struct btmrvl_private *priv)
{
struct hci_dev *hdev = NULL;
- struct btmrvl_private *priv;
int ret;
- priv = kzalloc(sizeof(*priv), GFP_KERNEL);
- if (!priv) {
- BT_ERR("Can not allocate priv");
- goto err_priv;
- }
-
- priv->adapter = kzalloc(sizeof(*priv->adapter), GFP_KERNEL);
- if (!priv->adapter) {
- BT_ERR("Allocate buffer for btmrvl_adapter failed!");
- goto err_adapter;
- }
-
- btmrvl_init_adapter(priv);
-
hdev = hci_alloc_dev();
if (!hdev) {
BT_ERR("Can not allocate HCI device");
goto err_hdev;
}
- BT_DBG("Starting kthread...");
- priv->main_thread.priv = priv;
- spin_lock_init(&priv->driver_lock);
-
- init_waitqueue_head(&priv->main_thread.wait_q);
- priv->main_thread.task = kthread_run(btmrvl_service_main_thread,
- &priv->main_thread, "btmrvl_main_service");
-
priv->btmrvl_dev.hcidev = hdev;
- priv->btmrvl_dev.card = card;
-
hdev->driver_data = priv;
- priv->btmrvl_dev.tx_dnld_rdy = true;
-
hdev->bus = HCI_SDIO;
hdev->open = btmrvl_open;
hdev->close = btmrvl_close;
@@ -574,6 +547,8 @@ struct btmrvl_private *btmrvl_add_card(void *card)
hdev->ioctl = btmrvl_ioctl;
hdev->owner = THIS_MODULE;
+ btmrvl_send_module_cfg_cmd(priv, MODULE_BRINGUP_REQ);
+
ret = hci_register_dev(hdev);
if (ret < 0) {
BT_ERR("Can not register HCI device");
@@ -584,16 +559,52 @@ struct btmrvl_private *btmrvl_add_card(void *card)
btmrvl_debugfs_init(hdev);
#endif
- return priv;
+ return 0;
err_hci_register_dev:
- /* Stop the thread servicing the interrupts */
- kthread_stop(priv->main_thread.task);
-
hci_free_dev(hdev);
err_hdev:
+ /* Stop the thread servicing the interrupts */
+ kthread_stop(priv->main_thread.task);
+
btmrvl_free_adapter(priv);
+ kfree(priv);
+
+ return -ENOMEM;
+}
+EXPORT_SYMBOL_GPL(btmrvl_register_hdev);
+
+struct btmrvl_private *btmrvl_add_card(void *card)
+{
+ struct btmrvl_private *priv;
+
+ priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+ if (!priv) {
+ BT_ERR("Can not allocate priv");
+ goto err_priv;
+ }
+
+ priv->adapter = kzalloc(sizeof(*priv->adapter), GFP_KERNEL);
+ if (!priv->adapter) {
+ BT_ERR("Allocate buffer for btmrvl_adapter failed!");
+ goto err_adapter;
+ }
+
+ btmrvl_init_adapter(priv);
+
+ BT_DBG("Starting kthread...");
+ priv->main_thread.priv = priv;
+ spin_lock_init(&priv->driver_lock);
+
+ init_waitqueue_head(&priv->main_thread.wait_q);
+ priv->main_thread.task = kthread_run(btmrvl_service_main_thread,
+ &priv->main_thread, "btmrvl_main_service");
+
+ priv->btmrvl_dev.card = card;
+ priv->btmrvl_dev.tx_dnld_rdy = true;
+
+ return priv;
err_adapter:
kfree(priv);
diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c
index 94f1f55..874a5e8 100644
--- a/drivers/bluetooth/btmrvl_sdio.c
+++ b/drivers/bluetooth/btmrvl_sdio.c
@@ -930,7 +930,12 @@ static int btmrvl_sdio_probe(struct sdio_func *func,
priv->hw_host_to_card = btmrvl_sdio_host_to_card;
priv->hw_wakeup_firmware = btmrvl_sdio_wakeup_fw;
- btmrvl_send_module_cfg_cmd(priv, MODULE_BRINGUP_REQ);
+ if (btmrvl_register_hdev(priv)) {
+ BT_ERR("Register hdev failed!");
+ ret = -ENODEV;
+ goto disable_host_int;
+ }
+
priv->btmrvl_dev.psmode = 1;
btmrvl_enable_ps(priv);
--
1.5.3.6
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 3/3] Bluetooth: set hdev->dev_type based on Marvell device type
2010-03-03 22:37 [PATCH 1/3] Bluetooth: decode btmrvl MODULE_BRINGUP_REG response correctly Bing Zhao
2010-03-03 22:37 ` [PATCH 2/3] Bluetooth: separate btmrvl_register_hdev() from btmrvl_add_card() Bing Zhao
@ 2010-03-03 22:37 ` Bing Zhao
2010-03-09 0:59 ` Marcel Holtmann
2010-03-09 0:58 ` [PATCH 1/3] Bluetooth: decode btmrvl MODULE_BRINGUP_REG response correctly Marcel Holtmann
2 siblings, 1 reply; 6+ messages in thread
From: Bing Zhao @ 2010-03-03 22:37 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Bing Zhao
Get the device type from MODULE_BRINGUP_REQ command response.
Signed-off-by: Bing Zhao <bzhao@marvell.com>
---
drivers/bluetooth/btmrvl_drv.h | 2 ++
drivers/bluetooth/btmrvl_main.c | 9 +++++++++
2 files changed, 11 insertions(+), 0 deletions(-)
diff --git a/drivers/bluetooth/btmrvl_drv.h b/drivers/bluetooth/btmrvl_drv.h
index ec8ac5e..bd91652 100644
--- a/drivers/bluetooth/btmrvl_drv.h
+++ b/drivers/bluetooth/btmrvl_drv.h
@@ -41,6 +41,8 @@ struct btmrvl_device {
void *card;
struct hci_dev *hcidev;
+ u8 dev_type;
+
u8 tx_dnld_rdy;
u8 psmode;
diff --git a/drivers/bluetooth/btmrvl_main.c b/drivers/bluetooth/btmrvl_main.c
index 277cb10..956f40c 100644
--- a/drivers/bluetooth/btmrvl_main.c
+++ b/drivers/bluetooth/btmrvl_main.c
@@ -116,6 +116,13 @@ int btmrvl_process_event(struct btmrvl_private *priv, struct sk_buff *skb)
((event->data[2] == MODULE_BROUGHT_UP) ||
(event->data[2] == MODULE_ALREADY_UP)) ?
"Bring-up succeed" : "Bring-up failed");
+
+ if (event->length > 3)
+ priv->btmrvl_dev.dev_type = event->data[3];
+ else
+ priv->btmrvl_dev.dev_type = HCI_BREDR;
+
+ BT_DBG("dev_type: %d", priv->btmrvl_dev.dev_type);
} else if (priv->btmrvl_dev.sendcmdflag &&
event->data[1] == MODULE_SHUTDOWN_REQ) {
BT_DBG("EVENT:%s", (event->data[2]) ?
@@ -549,6 +556,8 @@ int btmrvl_register_hdev(struct btmrvl_private *priv)
btmrvl_send_module_cfg_cmd(priv, MODULE_BRINGUP_REQ);
+ hdev->dev_type = priv->btmrvl_dev.dev_type;
+
ret = hci_register_dev(hdev);
if (ret < 0) {
BT_ERR("Can not register HCI device");
--
1.5.3.6
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 1/3] Bluetooth: decode btmrvl MODULE_BRINGUP_REG response correctly
2010-03-03 22:37 [PATCH 1/3] Bluetooth: decode btmrvl MODULE_BRINGUP_REG response correctly Bing Zhao
2010-03-03 22:37 ` [PATCH 2/3] Bluetooth: separate btmrvl_register_hdev() from btmrvl_add_card() Bing Zhao
2010-03-03 22:37 ` [PATCH 3/3] Bluetooth: set hdev->dev_type based on Marvell device type Bing Zhao
@ 2010-03-09 0:58 ` Marcel Holtmann
2 siblings, 0 replies; 6+ messages in thread
From: Marcel Holtmann @ 2010-03-09 0:58 UTC (permalink / raw)
To: Bing Zhao; +Cc: linux-bluetooth
Hi Bing,
> btmrvl MODULE_BRINGUP_REQ command response returns success with
> either 0x00 or 0x0c.
patch has been applied. Thanks.
Regards
Marcel
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/3] Bluetooth: separate btmrvl_register_hdev() from btmrvl_add_card()
2010-03-03 22:37 ` [PATCH 2/3] Bluetooth: separate btmrvl_register_hdev() from btmrvl_add_card() Bing Zhao
@ 2010-03-09 0:58 ` Marcel Holtmann
0 siblings, 0 replies; 6+ messages in thread
From: Marcel Holtmann @ 2010-03-09 0:58 UTC (permalink / raw)
To: Bing Zhao; +Cc: linux-bluetooth
Hi Bing,
> Move btmrvl hdev registration code out of btmrvl_add_card().
> New function btmrvl_register_hdev() is added.
patch has been applied. Thanks.
Regards
Marcel
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 3/3] Bluetooth: set hdev->dev_type based on Marvell device type
2010-03-03 22:37 ` [PATCH 3/3] Bluetooth: set hdev->dev_type based on Marvell device type Bing Zhao
@ 2010-03-09 0:59 ` Marcel Holtmann
0 siblings, 0 replies; 6+ messages in thread
From: Marcel Holtmann @ 2010-03-09 0:59 UTC (permalink / raw)
To: Bing Zhao; +Cc: linux-bluetooth
Hi Bing,
> Get the device type from MODULE_BRINGUP_REQ command response.
patch has been applied. Thanks.
Regards
Marcel
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2010-03-09 0:59 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-03-03 22:37 [PATCH 1/3] Bluetooth: decode btmrvl MODULE_BRINGUP_REG response correctly Bing Zhao
2010-03-03 22:37 ` [PATCH 2/3] Bluetooth: separate btmrvl_register_hdev() from btmrvl_add_card() Bing Zhao
2010-03-09 0:58 ` Marcel Holtmann
2010-03-03 22:37 ` [PATCH 3/3] Bluetooth: set hdev->dev_type based on Marvell device type Bing Zhao
2010-03-09 0:59 ` Marcel Holtmann
2010-03-09 0:58 ` [PATCH 1/3] Bluetooth: decode btmrvl MODULE_BRINGUP_REG response correctly Marcel Holtmann
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).