[ALPS02931157] sync bt driver code and suspend to power off
[Detail]
build pass
[Solution]
Change-Id: Ic1e7f5d53a7fca3513df1e59c732e348ef02cf2f
Signed-off-by: hongliang hu <hongliang.hu@mediatek.com>
CR-Id: ALPS02931157
Feature: BT AOSP
diff --git a/btmtk_main.c b/btmtk_main.c
index 768f211..51c1749 100755
--- a/btmtk_main.c
+++ b/btmtk_main.c
@@ -53,7 +53,7 @@
adapter->hs_state,
msecs_to_jiffies(WAIT_UNTIL_HS_STATE_CHANGED));
if (ret < 0) {
- pr_notice("event_hs_wait_q terminated (%d): %d,%d,%d\n",
+ pr_err("event_hs_wait_q terminated (%d): %d,%d,%d\n",
ret, adapter->hs_state, adapter->ps_state,
adapter->wakeup_tries);
@@ -75,17 +75,17 @@
pr_debug("%s skb->len %d\n", __func__, skb->len);
if (!skb) {
- pr_notice("%s skb is NULL return -EINVAL\n", __func__);
+ pr_warn("%s skb is NULL return -EINVAL\n", __func__);
return -EINVAL;
}
if (!skb->data) {
- pr_notice("%s skb->data is NULL return -EINVAL\n", __func__);
+ pr_warn("%s skb->data is NULL return -EINVAL\n", __func__);
return -EINVAL;
}
if (!skb->len || ((skb->len + BTM_HEADER_LEN) > BTM_UPLD_SIZE)) {
- pr_notice("Tx Error: Bad skb length %d : %d\n",
+ pr_warn("Tx Error: Bad skb length %d : %d\n",
skb->len, BTM_UPLD_SIZE);
return -EINVAL;
}
@@ -117,7 +117,7 @@
priv->adapter->hw_regs_buf = kzalloc(buf_size, GFP_KERNEL);
if (!priv->adapter->hw_regs_buf) {
priv->adapter->hw_regs = NULL;
- pr_notice("Unable to allocate buffer for hw_regs.\n");
+ pr_err("Unable to allocate buffer for hw_regs.\n");
} else {
priv->adapter->hw_regs =
(u8 *)ALIGN_ADDR(priv->adapter->hw_regs_buf,
@@ -173,7 +173,7 @@
usleep_range(10*1000, 15*1000);
if (i == 1000) {
- pr_notice("%s probe_ready %d i = %d try too many times return\n",
+ pr_warn("%s probe_ready %d i = %d try too many times return\n",
__func__, probe_ready, i);
return 0;
}
@@ -182,7 +182,7 @@
if (priv->adapter)
adapter = priv->adapter;
else {
- pr_notice("%s priv->adapter is NULL return\n", __func__);
+ pr_err("%s priv->adapter is NULL return\n", __func__);
return 0;
}
@@ -191,7 +191,7 @@
add_wait_queue(&thread->wait_q, &wait);
set_current_state(TASK_INTERRUPTIBLE);
if (kthread_should_stop()) {
- pr_notice("main_thread: break from main thread\n");
+ pr_warn("main_thread: break from main thread\n");
break;
}
@@ -208,13 +208,13 @@
remove_wait_queue(&thread->wait_q, &wait);
if (kthread_should_stop()) {
- pr_notice("main_thread: break after wake up\n");
+ pr_warn("main_thread: break after wake up\n");
break;
}
ret = priv->hw_set_own_back(DRIVER_OWN);
if (ret) {
- pr_notice("%s set driver own return fail\n", __func__);
+ pr_err("%s set driver own return fail\n", __func__);
break;
}
@@ -269,7 +269,7 @@
if (skb_queue_empty(&adapter->tx_queue)) {
ret = priv->hw_set_own_back(FW_OWN);
if (ret) {
- pr_notice("%s set fw own return fail\n",
+ pr_err("%s set fw own return fail\n",
__func__);
break;
}
diff --git a/btmtk_sdio.c b/btmtk_sdio.c
index 26f99f1..7db76a5 100755
--- a/btmtk_sdio.c
+++ b/btmtk_sdio.c
@@ -271,7 +271,7 @@
u32 ret = 0;
if (g_card->func == NULL) {
- pr_notice("%s g_card->func is NULL\n", __func__);
+ pr_err("%s g_card->func is NULL\n", __func__);
return -EIO;
}
sdio_claim_host(g_card->func);
@@ -285,7 +285,7 @@
u32 ret = 0;
if (g_card->func == NULL) {
- pr_notice("%s g_card->func is NULL\n", __func__);
+ pr_err("%s g_card->func is NULL\n", __func__);
return -EIO;
}
sdio_claim_host(g_card->func);
@@ -299,7 +299,7 @@
u32 ret = 0;
if (g_card->func == NULL) {
- pr_notice("g_card->func is NULL\n");
+ pr_err("g_card->func is NULL\n");
return -EIO;
}
sdio_claim_host(g_card->func);
@@ -316,7 +316,7 @@
if (skb_headroom(skb) < (BTM_HEADER_LEN)) {
queue_skb = bt_skb_alloc(sdio_header_len, GFP_ATOMIC);
if (queue_skb == NULL) {
- pr_notice("bt_skb_alloc fail return\n");
+ pr_err("bt_skb_alloc fail return\n");
return 0;
}
@@ -402,7 +402,7 @@
if ((u32LoopCount == 0) && (0x100 != (u32ReadCRValue&0x100))
&& (set_checkretry > 0)) {
- pr_notice("%s retry set_check driver own, CHLPCR 0x%x\n",
+ pr_warn("%s retry set_check driver own, CHLPCR 0x%x\n",
__func__, u32ReadCRValue);
set_checkretry--;
mdelay(20);
@@ -420,7 +420,7 @@
if ((u32LoopCount == 0) &&
((u32ReadCRValue&0x100) != 0) &&
(set_checkretry > 0)) {
- pr_notice("%s retry set_check FW own, CHLPCR 0x%x\n",
+ pr_warn("%s retry set_check FW own, CHLPCR 0x%x\n",
__func__, u32ReadCRValue);
set_checkretry--;
goto setretry;
@@ -456,16 +456,16 @@
done:
if (owntype == DRIVER_OWN) {
if (ret)
- pr_notice("%s set driver own fail\n", __func__);
+ pr_err("%s set driver own fail\n", __func__);
else
pr_debug("%s set driver own success\n", __func__);
} else if (owntype == FW_OWN) {
if (ret)
- pr_notice("%s set FW own fail\n", __func__);
+ pr_err("%s set FW own fail\n", __func__);
else
pr_debug("%s set FW own success\n", __func__);
} else
- pr_notice("%s unknown type %d\n", __func__, owntype);
+ pr_err("%s unknown type %d\n", __func__, owntype);
return ret;
}
@@ -507,7 +507,7 @@
sdio_writeb(card->func, mask, card->reg->host_int_mask, &ret);
if (ret) {
- pr_notice("Unable to enable the host interrupt!\n");
+ pr_err("Unable to enable the host interrupt!\n");
ret = -EIO;
}
@@ -529,7 +529,7 @@
sdio_writeb(card->func, host_int_mask, card->reg->host_int_mask, &ret);
if (ret < 0) {
- pr_notice("Unable to disable the host interrupt!\n");
+ pr_err("Unable to disable the host interrupt!\n");
return -EIO;
}
@@ -597,7 +597,7 @@
__func__, u32ReadCRValue);
rx_length = (u32ReadCRValue & RX_PKT_LEN) >> 16;
if (rx_length == 0xFFFF) {
- pr_notice("%s: 0xFFFF==rx_length, error return -EIO\n",
+ pr_warn("%s: 0xFFFF==rx_length, error return -EIO\n",
__func__);
ret = -EIO;
break;
@@ -619,14 +619,14 @@
sdio_header_length |= rxbuf[0];
if (sdio_header_length != rx_length) {
- pr_notice("%s sdio header length %d, rx_length %d mismatch\n",
+ pr_err("%s sdio header length %d, rx_length %d mismatch\n",
__func__, sdio_header_length,
rx_length);
break;
}
if (sdio_header_length == 0) {
- pr_notice("%s: get sdio_header_length = %d\n",
+ pr_warn("%s: get sdio_header_length = %d\n",
__func__, sdio_header_length);
continue;
}
@@ -636,7 +636,7 @@
retry_count--;
if (retry_count <= 0) {
- pr_notice("%s: retry_count = %d,timeout\n",
+ pr_warn("%s: retry_count = %d,timeout\n",
__func__, retry_count);
ret = -EIO;
break;
@@ -679,7 +679,7 @@
if (memcmp(wmt_event, rxbuf+MTK_SDIO_PACKET_HEADER_SIZE,
sizeof(wmt_event)) != 0) {
ret = -EIO;
- pr_notice("%s: fail\n", __func__);
+ pr_warn("%s: fail\n", __func__);
}
return ret;
@@ -773,7 +773,7 @@
break;
if (retrytime < 40)
- pr_notice("%s: retry over 2s, retrytime %d\n",
+ pr_warn("%s: retry over 2s, retrytime %d\n",
__func__, retrytime);
pr_info("%s: retrytime %d\n", __func__, retrytime);
@@ -818,14 +818,14 @@
break;
if (retrytime < 40)
- pr_notice("%s: retry over 2s, retrytime %d\n",
+ pr_warn("%s: retry over 2s, retrytime %d\n",
__func__, retrytime);
} while (!rxbuf[0]);
if (memcmp(event, rxbuf + MTK_SDIO_PACKET_HEADER_SIZE,
event_len) != 0) {
ret = -EIO;
- pr_info("%s: fail\n", __func__);
+ pr_warn("%s: fail\n", __func__);
}
}
@@ -862,22 +862,25 @@
0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
uint8_t set_bdaddr_e[] = {0x04, 0x0E, 0x04, 0x01,
0x1A, 0xFC, 0x00};
- uint8_t set_radio[] = {0x01, 0x79, 0xFC, 0x06,
- 0x07, 0x80, 0x00, 0x06, 0x07, 0x07};
+ uint8_t set_radio[] = {0x01, 0x79, 0xFC, 0x08,
+ 0x07, 0x80, 0x00, 0x06, 0x07, 0x07, 0x00, 0x00};
uint8_t set_radio_e[] = {0x04, 0x0E, 0x04, 0x01,
0x79, 0xFC, 0x00};
uint8_t set_pwr_offset[] = {0x01, 0x93, 0xFC, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
uint8_t set_pwr_offset_e[] = {0x04, 0x0E, 0x04, 0x01,
0x93, 0xFC, 0x00};
+ uint8_t set_xtal[] = {0x01, 0x0E, 0xFC, 0x02, 0x00, 0x00};
+ uint8_t set_xtal_e[] = {0x04, 0x0E, 0x04, 0x01,
+ 0x0E, 0xFC, 0x00};
uint16_t offset = 0;
if (!buf) {
- pr_notice("%s: buf is null\n", __func__);
+ pr_warn("%s: buf is null\n", __func__);
return;
} else if ((is7668 == true && buf_size < 0x389)
|| (is7668 == false && buf_size < 0x133)) {
- pr_notice("%s: incorrect buf size(%d)\n",
+ pr_warn("%s: incorrect buf size(%d)\n",
__func__, (int)buf_size);
return;
}
@@ -910,7 +913,11 @@
/* BLE default power */
set_radio[8] = (*(buf + offset + 1) & 0x07);
/* TX MAX power */
- set_radio[9] = (*(buf + offset) & 0x70);
+ set_radio[9] = (*(buf + offset) & 0x70) >> 4;
+ /* TX power sub level */
+ set_radio[10] = (*(buf + offset + 1) & 0x30) >> 4;
+ /* BR/EDR power diff mode */
+ set_radio[11] = (*(buf + offset + 1) & 0xc0) >> 6;
} else {
offset = 0x132;
/* BT default power */
@@ -966,6 +973,20 @@
set_pwr_offset[6], set_pwr_offset[7],
set_pwr_offset[8], set_pwr_offset[9],
ret < 0 ? "fail" : "OK");
+
+ /* XTAL setting */
+ if (is7668) {
+ offset = 0xF4;
+ /* BT default power */
+ set_xtal[4] = *(buf + offset);
+ set_xtal[5] = *(buf + offset + 1);
+ ret = btmtk_sdio_send_and_check(set_xtal, sizeof(set_xtal),
+ set_xtal_e, sizeof(set_xtal_e));
+ pr_notice("%s: set XTAL(0x%02X %02X) %s\n",
+ __func__,
+ set_xtal[4], set_xtal[5],
+ ret < 0 ? "fail" : "OK");
+ }
}
static void btmtk_eeprom_bin_file(struct btmtk_sdio_card *card)
@@ -1073,7 +1094,7 @@
pr_debug("%s fwlen %d, mode = %d\n", __func__, fwlen, mode);
if (fwlen < Datalen) {
- pr_notice("%s file size = %d,is not corect\n", __func__, fwlen);
+ pr_err("%s file size = %d,is not corect\n", __func__, fwlen);
return -ENOENT;
}
@@ -1225,7 +1246,7 @@
ret = btmtk_sdio_send_wohci(HCI_COMMAND_PKT, sizeof(cmd), cmd);
if (ret) {
- pr_notice("%s btmtk_sdio_send_wohci return fail ret %d\n",
+ pr_err("%s btmtk_sdio_send_wohci return fail ret %d\n",
__func__, ret);
break;
}
@@ -1238,7 +1259,7 @@
if (memcmp(rxbuf+7, event, sizeof(event)) == 0)
return rxbuf[11];
- pr_notice("%s receive event content is not correct, print receive data\n",
+ pr_err("%s receive event content is not correct, print receive data\n",
__func__);
btmtk_print_buffer_conent(rxbuf, rx_length);
}
@@ -1253,7 +1274,7 @@
ret = btmtk_sdio_readl(CHCR, &u32ReadCRValue);
if (ret) {
- pr_notice("%s read CHCR error\n", __func__);
+ pr_err("%s read CHCR error\n", __func__);
ret = EINVAL;
return ret;
}
@@ -1314,14 +1335,14 @@
TX_UNDER_THOLD | TX_EMPTY | RX_DONE);
if (ret) {
- pr_notice("Set interrupt output fail(%d)\n", ret);
+ pr_err("Set interrupt output fail(%d)\n", ret);
ret = -EIO;
}
/*enable interrupt output*/
ret = btmtk_sdio_writel(CHLPCR, C_FW_INT_EN_SET);
if (ret) {
- pr_notice("enable interrupt output fail(%d)\n", ret);
+ pr_err("enable interrupt output fail(%d)\n", ret);
ret = -EIO;
goto done;
}
@@ -1350,7 +1371,7 @@
&card->func->dev);
if ((ret < 0) || !fw_firmware) {
- pr_notice("request_firmware(firmware name %s) failed, error code = %d\n",
+ pr_err("request_firmware(firmware name %s) failed, error code = %d\n",
card->firmware,
ret);
ret = -ENOENT;
@@ -1364,7 +1385,7 @@
&card->func->dev);
if ((ret < 0) || !fw_firmware) {
- pr_notice("request_firmware(firmware name %s) failed, error code = %d\n",
+ pr_err("request_firmware(firmware name %s) failed, error code = %d\n",
card->firmware1, ret);
ret = -ENOENT;
goto done;
@@ -1426,7 +1447,7 @@
TX_UNDER_THOLD | TX_EMPTY | RX_DONE);
if (ret) {
- pr_notice("Set interrupt output fail(%d)\n", ret);
+ pr_err("Set interrupt output fail(%d)\n", ret);
ret = -EIO;
goto done;
}
@@ -1435,7 +1456,7 @@
ret = btmtk_sdio_writel(CHLPCR, C_FW_INT_EN_SET);
if (ret) {
- pr_notice("enable interrupt output fail(%d)\n", ret);
+ pr_err("enable interrupt output fail(%d)\n", ret);
ret = -EIO;
goto done;
}
@@ -1465,7 +1486,7 @@
RedundantSize -= PATCH_DOWNLOAD_SIZE;
if (ret) {
- pr_notice("%s btmtk_send_rom_patch fail\n", __func__);
+ pr_err("%s btmtk_send_rom_patch fail\n", __func__);
goto done;
}
pr_debug("%s RedundantSize %d\n", __func__, RedundantSize);
@@ -1554,7 +1575,7 @@
char *core_dump_end = NULL;
if (!card || !card->func) {
- pr_notice("card or function or is NULL!\n");
+ pr_err("card or function or is NULL!\n");
ret = -EINVAL;
goto exit;
}
@@ -1585,7 +1606,7 @@
sizeof(fw_dump_file_name),
FW_DUMP_FILE_NAME"_%d",
probe_counter);
- pr_notice("%s : open file %s\n",
+ pr_warn("%s : open file %s\n",
__func__,
fw_dump_file_name);
fw_dump_file = filp_open(
@@ -1595,11 +1616,11 @@
if (fw_dump_file) {
current_fwdump_file_number =
probe_counter;
- pr_notice("%s : open file %s success\n",
+ pr_warn("%s : open file %s success\n",
__func__,
fw_dump_file_name);
} else
- pr_notice("%s : open file %s fail\n",
+ pr_warn("%s : open file %s fail\n",
__func__,
fw_dump_file_name);
/* #endif */
@@ -1609,15 +1630,16 @@
#if SAVE_FW_DUMP_IN_KERNEL
if (fw_dump_file->f_op == NULL)
- pr_notice("%s : fw_dump_file->f_op is NULL\n",
+ pr_warn("%s : fw_dump_file->f_op is NULL\n",
__func__);
if (fw_dump_file->f_op->write == NULL)
- pr_notice("%s : fw_dump_file->f_op->write is NULL\n",
+ pr_warn("%s : fw_dump_file->f_op->write is NULL\n",
__func__);
-
- if ((dump_len > 0) && fw_dump_file)
+ if ((dump_len > 0) && fw_dump_file
+ && fw_dump_file->f_op
+ && fw_dump_file->f_op->write)
fw_dump_file->f_op->write(fw_dump_file,
&rxbuf[SDIO_HEADER_LEN+10],
dump_len,
@@ -1629,7 +1651,7 @@
core_dump_end = strstr(
&rxbuf[SDIO_HEADER_LEN+10],
FW_DUMP_END_EVENT);
- pr_notice("%s : core_dump_end %d\n",
+ pr_warn("%s : core_dump_end %d\n",
__func__, SDIO_HEADER_LEN);
if (core_dump_end)
btmtk_sdio_for_code_style();
@@ -1652,7 +1674,7 @@
pr_debug("buf_len : %d\n", buf_len);
if (rx_length <= SDIO_HEADER_LEN) {
- pr_notice("invalid packet length: %d\n", buf_len);
+ pr_warn("invalid packet length: %d\n", buf_len);
ret = -EINVAL;
goto exit;
}
@@ -1661,7 +1683,7 @@
/* rx_length = num_blocks * blksz + BTSDIO_DMA_ALIGN*/
skb = bt_skb_alloc(rx_length, GFP_ATOMIC);
if (skb == NULL) {
- pr_notice("No free skb\n");
+ pr_warn("No free skb\n");
ret = -ENOMEM;
goto exit;
}
@@ -1716,7 +1738,7 @@
break;
case MTK_VENDOR_PKT:
- pr_notice("%s, MTK_VENDOR_PKT no handle now, break\n",
+ pr_warn("%s, MTK_VENDOR_PKT no handle now, break\n",
__func__);
kfree_skb(skb);
break;
@@ -1730,8 +1752,8 @@
break;
default:
- pr_notice("Unknown packet type:%d\n", type);
- pr_notice("hex: %*ph\n", blksz * num_blocks, payload);
+ pr_warn("Unknown packet type:%d\n", type);
+ pr_warn("hex: %*ph\n", blksz * num_blocks, payload);
kfree_skb(skb);
skb = NULL;
@@ -1824,7 +1846,7 @@
int ret = 0;
if (!card || !card->func) {
- pr_notice("Error: card or function is NULL!\n");
+ pr_err("Error: card or function is NULL!\n");
ret = -EINVAL;
goto failed;
}
@@ -1835,7 +1857,7 @@
ret = sdio_enable_func(func);
if (ret) {
- pr_notice("sdio_enable_func() failed: ret=%d\n", ret);
+ pr_err("sdio_enable_func() failed: ret=%d\n", ret);
ret = -EIO;
goto release_host;
}
@@ -1846,7 +1868,7 @@
ret = sdio_claim_irq(func, btmtk_sdio_interrupt);
if (ret) {
- pr_notice("sdio_claim_irq failed: ret=%d\n", ret);
+ pr_err("sdio_claim_irq failed: ret=%d\n", ret);
ret = -EIO;
goto disable_func;
}
@@ -1857,7 +1879,7 @@
ret = sdio_set_block_size(card->func, SDIO_BLOCK_SIZE);
if (ret) {
- pr_notice("cannot set SDIO block size\n");
+ pr_err("cannot set SDIO block size\n");
ret = -EIO;
goto release_irq;
}
@@ -2037,7 +2059,7 @@
}
if (!card || !card->func) {
- pr_notice("card or function is NULL!\n");
+ pr_err("card or function is NULL!\n");
return -EINVAL;
}
@@ -2059,8 +2081,8 @@
sdio_release_host(card->func);
if (ret < 0) {
i++;
- pr_notice("i=%d writesb failed: %d\n", i, ret);
- pr_notice("hex: %*ph\n", nb, txbuf);
+ pr_err("i=%d writesb failed: %d\n", i, ret);
+ pr_err("hex: %*ph\n", nb, txbuf);
ret = -EIO;
if (i > MAX_WRITE_IOMEM_RETRY)
goto exit;
@@ -2080,14 +2102,14 @@
pr_info("%s begin\n", __func__);
if (!card || !card->func) {
- pr_notice("card or function is NULL!\n");
+ pr_err("card or function is NULL!\n");
return -EINVAL;
}
sdio_claim_host(card->func);
if (btmtk_sdio_download_rom_patch(card)) {
- pr_notice("Failed to download firmware!\n");
+ pr_err("Failed to download firmware!\n");
ret = -EIO;
goto done;
}
@@ -2119,7 +2141,7 @@
(metabuffer.read_p - metabuffer.write_p);
if ((remainLen + 1 + len) >= META_BUFFER_SIZE) {
- pr_notice("%s copy copyLen %d > META_BUFFER_SIZE(%d), push back to queue\n",
+ pr_warn("%s copy copyLen %d > META_BUFFER_SIZE(%d), push back to queue\n",
__func__,
(remainLen + 1 + len),
META_BUFFER_SIZE);
@@ -2184,7 +2206,7 @@
}
if (ret)
- pr_notice("%s copy to user fail, ret %d\n", __func__, (int)ret);
+ pr_warn("%s copy to user fail, ret %d\n", __func__, (int)ret);
metabuffer.read_p += (copyLen - ret);
if (metabuffer.read_p >= META_BUFFER_SIZE)
@@ -2234,7 +2256,7 @@
pr_info("%s func device %X\n", __func__, card->func->device);
pr_info("%s Call btmtk_sdio_register_dev\n", __func__);
if (btmtk_sdio_register_dev(card) < 0) {
- pr_notice("Failed to register BT device!\n");
+ pr_err("Failed to register BT device!\n");
return -ENODEV;
}
@@ -2244,7 +2266,7 @@
btmtk_sdio_enable_host_int(card);
pr_info("call btmtk_sdio_enable_host_int done\n");
if (btmtk_sdio_download_fw(card)) {
- pr_notice("Downloading firmware failed!\n");
+ pr_err("Downloading firmware failed!\n");
ret = -ENODEV;
goto unreg_dev;
}
@@ -2255,7 +2277,7 @@
priv = btmtk_add_card(card);
if (!priv) {
- pr_notice("Initializing card failed!\n");
+ pr_err("Initializing card failed!\n");
ret = -ENODEV;
goto unreg_dev;
}
@@ -2299,7 +2321,7 @@
unreg_dev:
btmtk_sdio_unregister_dev(card);
- pr_notice("%s fail end\n", __func__);
+ pr_err("%s fail end\n", __func__);
return ret;
}
@@ -2351,7 +2373,7 @@
u32 send_data_len = cmd_len + BTM_HEADER_LEN;
if (cmd_len == 0) {
- pr_notice("%s cmd_len (%d) error return\n", __func__, cmd_len);
+ pr_err("%s cmd_len (%d) error return\n", __func__, cmd_len);
return -EINVAL;
}
@@ -2387,30 +2409,34 @@
ret = btmtk_sdio_set_own_back(DRIVER_OWN);
if (ret)
- pr_notice("%s set driver own fail\n", __func__);
+ pr_err("%s set driver own fail\n", __func__);
ret = btmtk_sdio_send_woble_cmd();
if (ret)
- pr_notice("%s set woble cmd fail\n", __func__);
+ pr_err("%s set woble cmd fail\n", __func__);
need_reset_stack = 1;
pr_notice("%s set reset_stack 1\n", __func__);
if (func) {
pm_flags = sdio_get_host_pm_caps(func);
- pr_notice("%s: suspend: PM flags = 0x%x\n",
+ pr_debug("%s: suspend: PM flags = 0x%x\n",
sdio_func_id(func), pm_flags);
if (!(pm_flags & MMC_PM_KEEP_POWER)) {
- pr_notice("%s: cannot remain alive while suspended\n",
+ pr_err("%s: cannot remain alive while suspended\n",
sdio_func_id(func));
- //return -EINVAL;
+ return -EINVAL;
}
} else {
- pr_notice("sdio_func is not specified\n");
+ pr_err("sdio_func is not specified\n");
return 0;
}
+ ret = btmtk_sdio_set_own_back(DRIVER_OWN);
+ if (ret)
+ pr_notice("%s set driver own fail\n", __func__);
+ btmtk_sdio_bt_set_power(0);
ret = btmtk_sdio_set_own_back(FW_OWN);
if (ret)
- pr_notice("%s set fw own fail\n", __func__);
+ pr_err("%s set fw own fail\n", __func__);
pr_notice("%s return 0 directly\n", __func__);
return 0;//sdio_set_host_pm_flags(func, MMC_PM_KEEP_POWER);
}
@@ -2418,6 +2444,7 @@
static int btmtk_sdio_resume(struct device *dev)
{
pr_info("%s begin return 0, do nothing\n", __func__);
+ btmtk_sdio_bt_set_power(1);
return 0;
}
@@ -2442,7 +2469,7 @@
pr_info("%s begin\n", __func__);
if (!probe_ready) {
- pr_notice("%s probe_ready is %d return\n",
+ pr_err("%s probe_ready is %d return\n",
__func__, probe_ready);
return -EFAULT;
}
@@ -2454,12 +2481,12 @@
pr_info("%s spin_lock_init end\n", __func__);
#endif
if (g_priv == NULL) {
- pr_notice("%s g_priv is NULL\n", __func__);
+ pr_err("%s g_priv is NULL\n", __func__);
return -ENOENT;
}
if (g_priv->adapter == NULL) {
- pr_notice("%s g_priv->adapter is NULL\n", __func__);
+ pr_err("%s g_priv->adapter is NULL\n", __func__);
return -ENOENT;
}
@@ -2477,7 +2504,7 @@
pr_info("%s begin\n", __func__);
if (!probe_ready) {
- pr_notice("%s probe_ready is %d return\n",
+ pr_err("%s probe_ready is %d return\n",
__func__, probe_ready);
return -EFAULT;
}
@@ -2515,7 +2542,7 @@
/*int i = 0;*/
if (!probe_ready) {
- pr_notice("%s probe_ready is %d return\n",
+ pr_err("%s probe_ready is %d return\n",
__func__, probe_ready);
return -EFAULT;
}
@@ -2607,7 +2634,7 @@
struct sk_buff *skb = NULL;
if (!probe_ready) {
- pr_notice("%s probe_ready is %d return\n",
+ pr_err("%s probe_ready is %d return\n",
__func__, probe_ready);
return -EFAULT;
}
@@ -2675,13 +2702,13 @@
unsigned int mask = 0;
if (!probe_ready) {
- pr_notice("%s probe_ready is %d return\n",
+ pr_err("%s probe_ready is %d return\n",
__func__, probe_ready);
return mask;
}
if (g_priv == NULL) {
- pr_notice("%s g_priv is NULL\n", __func__);
+ pr_err("%s g_priv is NULL\n", __func__);
return -ENODEV;
}
@@ -2716,7 +2743,7 @@
struct file *file)
{
if (g_priv == NULL) {
- pr_notice("%s: ERROR, g_data is NULL!\n", __func__);
+ pr_err("%s: ERROR, g_data is NULL!\n", __func__);
return -ENODEV;
}
@@ -2728,7 +2755,7 @@
struct file *file)
{
if (g_priv == NULL) {
- pr_notice("%s: ERROR, g_data is NULL!\n", __func__);
+ pr_err("%s: ERROR, g_data is NULL!\n", __func__);
return -ENODEV;
}
@@ -2744,7 +2771,7 @@
int copyLen = 0;
if (g_priv == NULL) {
- pr_notice("%s: ERROR, g_data is NULL!\n", __func__);
+ pr_err("%s: ERROR, g_data is NULL!\n", __func__);
return -ENODEV;
}
@@ -2770,7 +2797,7 @@
goto exit;
}
if (count > HCI_MAX_COMMAND_BUF_SIZE) {
- pr_notice("%s: your command is larger than maximum length, count = %zd\n",
+ pr_err("%s: your command is larger than maximum length, count = %zd\n",
__func__, count);
goto exit;
}
@@ -2836,7 +2863,7 @@
o_fwlog_buf[2], o_fwlog_buf[3], o_fwlog_buf[4]);
/* check HCI command length */
if (length > HCI_MAX_COMMAND_SIZE) {
- pr_notice("%s: your command is larger than maximum length, length = %d\n",
+ pr_err("%s: your command is larger than maximum length, length = %d\n",
__func__, length);
goto exit;
}
@@ -2870,7 +2897,7 @@
unsigned int mask = 0;
if (g_priv == NULL) {
- pr_notice("%s: ERROR, g_data is NULL!\n", __func__);
+ pr_err("%s: ERROR, g_data is NULL!\n", __func__);
return -ENODEV;
}
@@ -2885,7 +2912,7 @@
pr_info("%s: ->\n", __func__);
if (g_priv == NULL) {
- pr_notice("%s: ERROR, g_data is NULL!\n", __func__);
+ pr_err("%s: ERROR, g_data is NULL!\n", __func__);
return -ENODEV;
}
@@ -2957,13 +2984,13 @@
ret = alloc_chrdev_region(&devID, 0, 1, "BT_chrdev");
if (ret) {
- pr_notice("fail to allocate chrdev\n");
+ pr_err("fail to allocate chrdev\n");
return ret;
}
ret = alloc_chrdev_region(&devIDfwlog, 0, 1, "BT_chrdevfwlog");
if (ret) {
- pr_notice("fail to allocate chrdev\n");
+ pr_err("fail to allocate chrdev\n");
return ret;
}
@@ -2993,14 +3020,14 @@
pBTClass = class_create(THIS_MODULE, "BT_chrdev");
if (IS_ERR(pBTClass)) {
- pr_notice("class create fail, error code(%ld)\n",
+ pr_err("class create fail, error code(%ld)\n",
PTR_ERR(pBTClass));
goto err1;
}
pBTDev = device_create(pBTClass, NULL, devID, NULL, BT_NODE);
if (IS_ERR(pBTDev)) {
- pr_notice("device create fail, error code(%ld)\n",
+ pr_err("device create fail, error code(%ld)\n",
PTR_ERR(pBTDev));
goto err2;
}
@@ -3008,7 +3035,7 @@
pBTDevfwlog = device_create(pBTClass, NULL,
devIDfwlog, NULL, "stpbtfwlog");
if (IS_ERR(pBTDevfwlog)) {
- pr_notice("device(stpbtfwlog) create fail, error code(%ld)\n",
+ pr_err("device(stpbtfwlog) create fail, error code(%ld)\n",
PTR_ERR(pBTDevfwlog));
goto err2;
}
@@ -3084,7 +3111,7 @@
}
if (sdio_register_driver(&bt_mtk_sdio) != 0) {
- pr_notice("SDIO Driver Registration Failed\n");
+ pr_err("SDIO Driver Registration Failed\n");
return -ENODEV;
}
#ifdef BT_SUPPORT_PMU_EN_CTRL
diff --git a/btmtk_sdio.h b/btmtk_sdio.h
index df1442a..73fb741 100755
--- a/btmtk_sdio.h
+++ b/btmtk_sdio.h
@@ -21,7 +21,7 @@
#ifndef _BTMTK_SDIO_H_
#define _BTMTK_SDIO_H_
-#define VERSION "v0.0.0.30"
+#define VERSION "v0.0.0.32"
#define SDIO_HEADER_LEN 4