summaryrefslogtreecommitdiff
path: root/drivers/bluetooth/sd8797/bt/bt_sdiommc.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/bluetooth/sd8797/bt/bt_sdiommc.c')
-rw-r--r--drivers/bluetooth/sd8797/bt/bt_sdiommc.c54
1 files changed, 28 insertions, 26 deletions
diff --git a/drivers/bluetooth/sd8797/bt/bt_sdiommc.c b/drivers/bluetooth/sd8797/bt/bt_sdiommc.c
index 293eacb92da8..10bda897c177 100644
--- a/drivers/bluetooth/sd8797/bt/bt_sdiommc.c
+++ b/drivers/bluetooth/sd8797/bt/bt_sdiommc.c
@@ -31,9 +31,9 @@
/** Max retry number of CMD53 write */
#define MAX_WRITE_IOMEM_RETRY 2
/** Firmware name */
-static char *fw_name = NULL;
+static char *fw_name;
/** request firmware nowait */
-static int req_fw_nowait = 0;
+static int req_fw_nowait;
static int multi_fn = BIT(2);
/** Default firmware name */
#define DEFAULT_FW_NAME "mrvl/sd8797_uapsta.bin"
@@ -57,7 +57,7 @@ MODULE_DEVICE_TABLE(sdio, bt_ids);
Global Variables
********************************************************/
/** unregiser bus driver flag */
-static u8 unregister = 0;
+static u8 unregister;
#ifdef SDIO_SUSPEND_RESUME
/** PM keep power */
extern int mbt_pm_keep_power;
@@ -343,7 +343,7 @@ sd_probe_card(struct sdio_func *func, const struct sdio_device_id *id)
goto done;
}
card->func = func;
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
/* wait for chip fully wake up */
if (!func->enable_timeout)
func->enable_timeout = 200;
@@ -384,7 +384,7 @@ int
sd_verify_fw_download(bt_private * priv, int pollnum)
{
int ret = BT_STATUS_FAILURE;
- u16 firmwarestat;
+ u16 firmwarestat = 0;
int tries;
ENTER();
@@ -400,7 +400,10 @@ sd_verify_fw_download(bt_private * priv, int pollnum)
}
mdelay(100);
}
-
+ if ((pollnum > 1) && (ret != BT_STATUS_SUCCESS))
+ PRINTM(ERROR,
+ "Fail to poll firmware status: firmwarestat=0x%x\n",
+ firmwarestat);
LEAVE();
return ret;
}
@@ -443,7 +446,7 @@ sd_init_fw_dpc(bt_private * priv)
tv1 = get_utimeofday();
#endif
- tmpfwbufsz = ALIGN_SZ(BT_UPLD_SIZE, DMA_ALIGNMENT);
+ tmpfwbufsz = BT_UPLD_SIZE + DMA_ALIGNMENT;
tmpfwbuf = kmalloc(tmpfwbufsz, GFP_KERNEL);
if (!tmpfwbuf) {
PRINTM(ERROR,
@@ -655,7 +658,7 @@ sd_request_fw_dpc(const struct firmware *fw_firmware, void *context)
goto done;
}
if (fw_firmware) {
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32)
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 32)
if (!req_fw_nowait)
#endif
release_firmware(fw_firmware);
@@ -665,7 +668,7 @@ sd_request_fw_dpc(const struct firmware *fw_firmware, void *context)
done:
if (fw_firmware) {
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32)
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 32)
if (!req_fw_nowait)
#endif
release_firmware(fw_firmware);
@@ -732,25 +735,24 @@ sd_download_firmware_w_helper(bt_private * priv)
cur_fw_name = fw_name;
if (req_fw_nowait) {
-#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,32)
- if ((ret =
- request_firmware_nowait(THIS_MODULE, FW_ACTION_HOTPLUG,
- cur_fw_name, priv->hotplug_device,
- GFP_KERNEL, priv,
- sd_request_fw_callback)) < 0)
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 32)
+ ret = request_firmware_nowait(THIS_MODULE, FW_ACTION_HOTPLUG,
+ cur_fw_name, priv->hotplug_device,
+ GFP_KERNEL, priv,
+ sd_request_fw_callback);
#else
- if ((ret =
- request_firmware_nowait(THIS_MODULE, FW_ACTION_HOTPLUG,
- cur_fw_name, priv->hotplug_device,
- priv, sd_request_fw_callback)) < 0)
+ ret = request_firmware_nowait(THIS_MODULE, FW_ACTION_HOTPLUG,
+ cur_fw_name, priv->hotplug_device,
+ priv, sd_request_fw_callback);
#endif
+ if (ret < 0)
PRINTM(FATAL,
"BT: request_firmware_nowait() failed, error code = %#x\n",
ret);
} else {
- if ((err =
- request_firmware(&priv->firmware, cur_fw_name,
- priv->hotplug_device)) < 0) {
+ err = request_firmware(&priv->firmware, cur_fw_name,
+ priv->hotplug_device);
+ if (err < 0) {
PRINTM(FATAL,
"BT: request_firmware() failed, error code = %#x\n",
err);
@@ -989,7 +991,7 @@ sd_card_to_host(bt_private * priv)
}
break;
case MRVL_VENDOR_PKT:
- // Just think here need to back compatible FM
+ /* Just think here need to back compatible FM */
bt_cb(skb)->pkt_type = HCI_VENDOR_PKT;
skb_put(skb, buf_len);
skb_pull(skb, BT_HEADER_LEN);
@@ -1556,9 +1558,11 @@ sbi_host_to_card(bt_private * priv, u8 * payload, u16 nb)
}
buf = payload;
+ blksz = SD_BLOCK_SIZE;
+ buf_block_len = (nb + blksz - 1) / blksz;
/* Allocate buffer and copy payload */
if ((t_ptr) payload & (DMA_ALIGNMENT - 1)) {
- tmpbufsz = ALIGN_SZ(nb, DMA_ALIGNMENT);
+ tmpbufsz = buf_block_len * blksz + DMA_ALIGNMENT;
tmpbuf = kmalloc(tmpbufsz, GFP_KERNEL);
if (!tmpbuf) {
LEAVE();
@@ -1569,8 +1573,6 @@ sbi_host_to_card(bt_private * priv, u8 * payload, u16 nb)
buf = (u8 *) ALIGN_ADDR(tmpbuf, DMA_ALIGNMENT);
memcpy(buf, payload, nb);
}
- blksz = SD_BLOCK_SIZE;
- buf_block_len = (nb + blksz - 1) / blksz;
sdio_claim_host(card->func);
#define MAX_WRITE_IOMEM_RETRY 2
do {