Bluetooth: btqca: Rename ROME specific functions to generic functions
Some of the QCA BTSoC ROME functions, are used for different versions or different make of BTSoC's. Instead of duplicating the same functions for new chip, update names of the functions that are used for both chips to keep this generic and would help in future when we would have new BT SoC. To have generic text in logs updated from ROME to QCA where ever possible. This avoids confusion to user, when using the future Qualcomm Bluetooth SoC's. Updated BT_DBG, BT_ERR and BT_INFO with bt_dev_dbg, bt_dev_err and bt_dev_info where ever applicable. Signed-off-by: Balakrishna Godavarthi <bgodavar@codeaurora.org> Reviewed-by: Matthias Kaehlcke <mka@chromium.org> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
parent
505013555a
commit
ba493d4fbc
3 changed files with 51 additions and 46 deletions
|
@ -27,7 +27,7 @@
|
|||
|
||||
#define VERSION "0.1"
|
||||
|
||||
static int rome_patch_ver_req(struct hci_dev *hdev, u32 *rome_version)
|
||||
int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version)
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
struct edl_event_hdr *edl;
|
||||
|
@ -35,36 +35,35 @@ static int rome_patch_ver_req(struct hci_dev *hdev, u32 *rome_version)
|
|||
char cmd;
|
||||
int err = 0;
|
||||
|
||||
BT_DBG("%s: ROME Patch Version Request", hdev->name);
|
||||
bt_dev_dbg(hdev, "QCA Version Request");
|
||||
|
||||
cmd = EDL_PATCH_VER_REQ_CMD;
|
||||
skb = __hci_cmd_sync_ev(hdev, EDL_PATCH_CMD_OPCODE, EDL_PATCH_CMD_LEN,
|
||||
&cmd, HCI_VENDOR_PKT, HCI_INIT_TIMEOUT);
|
||||
if (IS_ERR(skb)) {
|
||||
err = PTR_ERR(skb);
|
||||
BT_ERR("%s: Failed to read version of ROME (%d)", hdev->name,
|
||||
bt_dev_err(hdev, "Reading QCA version information failed (%d)",
|
||||
err);
|
||||
return err;
|
||||
}
|
||||
|
||||
if (skb->len != sizeof(*edl) + sizeof(*ver)) {
|
||||
BT_ERR("%s: Version size mismatch len %d", hdev->name,
|
||||
skb->len);
|
||||
bt_dev_err(hdev, "QCA Version size mismatch len %d", skb->len);
|
||||
err = -EILSEQ;
|
||||
goto out;
|
||||
}
|
||||
|
||||
edl = (struct edl_event_hdr *)(skb->data);
|
||||
if (!edl) {
|
||||
BT_ERR("%s: TLV with no header", hdev->name);
|
||||
bt_dev_err(hdev, "QCA TLV with no header");
|
||||
err = -EILSEQ;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (edl->cresp != EDL_CMD_REQ_RES_EVT ||
|
||||
edl->rtype != EDL_APP_VER_RES_EVT) {
|
||||
BT_ERR("%s: Wrong packet received %d %d", hdev->name,
|
||||
edl->cresp, edl->rtype);
|
||||
bt_dev_err(hdev, "QCA Wrong packet received %d %d", edl->cresp,
|
||||
edl->rtype);
|
||||
err = -EIO;
|
||||
goto out;
|
||||
}
|
||||
|
@ -76,11 +75,11 @@ static int rome_patch_ver_req(struct hci_dev *hdev, u32 *rome_version)
|
|||
BT_DBG("%s: ROM :0x%08x", hdev->name, le16_to_cpu(ver->rome_ver));
|
||||
BT_DBG("%s: SOC :0x%08x", hdev->name, le32_to_cpu(ver->soc_id));
|
||||
|
||||
/* ROME chipset version can be decided by patch and SoC
|
||||
/* QCA chipset version can be decided by patch and SoC
|
||||
* version, combination with upper 2 bytes from SoC
|
||||
* and lower 2 bytes from patch will be used.
|
||||
*/
|
||||
*rome_version = (le32_to_cpu(ver->soc_id) << 16) |
|
||||
*soc_version = (le32_to_cpu(ver->soc_id) << 16) |
|
||||
(le16_to_cpu(ver->rome_ver) & 0x0000ffff);
|
||||
|
||||
out:
|
||||
|
@ -88,18 +87,19 @@ out:
|
|||
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(qca_read_soc_version);
|
||||
|
||||
static int rome_reset(struct hci_dev *hdev)
|
||||
static int qca_send_reset(struct hci_dev *hdev)
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
int err;
|
||||
|
||||
BT_DBG("%s: ROME HCI_RESET", hdev->name);
|
||||
bt_dev_dbg(hdev, "QCA HCI_RESET");
|
||||
|
||||
skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL, HCI_INIT_TIMEOUT);
|
||||
if (IS_ERR(skb)) {
|
||||
err = PTR_ERR(skb);
|
||||
BT_ERR("%s: Reset failed (%d)", hdev->name, err);
|
||||
bt_dev_err(hdev, "QCA Reset failed (%d)", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -108,7 +108,7 @@ static int rome_reset(struct hci_dev *hdev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void rome_tlv_check_data(struct rome_config *config,
|
||||
static void qca_tlv_check_data(struct rome_config *config,
|
||||
const struct firmware *fw)
|
||||
{
|
||||
const u8 *data;
|
||||
|
@ -207,7 +207,7 @@ static void rome_tlv_check_data(struct rome_config *config,
|
|||
}
|
||||
}
|
||||
|
||||
static int rome_tlv_send_segment(struct hci_dev *hdev, int seg_size,
|
||||
static int qca_tlv_send_segment(struct hci_dev *hdev, int seg_size,
|
||||
const u8 *data, enum rome_tlv_dnld_mode mode)
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
|
@ -228,19 +228,19 @@ static int rome_tlv_send_segment(struct hci_dev *hdev, int seg_size,
|
|||
HCI_VENDOR_PKT, HCI_INIT_TIMEOUT);
|
||||
if (IS_ERR(skb)) {
|
||||
err = PTR_ERR(skb);
|
||||
BT_ERR("%s: Failed to send TLV segment (%d)", hdev->name, err);
|
||||
bt_dev_err(hdev, "QCA Failed to send TLV segment (%d)", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
if (skb->len != sizeof(*edl) + sizeof(*tlv_resp)) {
|
||||
BT_ERR("%s: TLV response size mismatch", hdev->name);
|
||||
bt_dev_err(hdev, "QCA TLV response size mismatch");
|
||||
err = -EILSEQ;
|
||||
goto out;
|
||||
}
|
||||
|
||||
edl = (struct edl_event_hdr *)(skb->data);
|
||||
if (!edl) {
|
||||
BT_ERR("%s: TLV with no header", hdev->name);
|
||||
bt_dev_err(hdev, "TLV with no header");
|
||||
err = -EILSEQ;
|
||||
goto out;
|
||||
}
|
||||
|
@ -249,8 +249,8 @@ static int rome_tlv_send_segment(struct hci_dev *hdev, int seg_size,
|
|||
|
||||
if (edl->cresp != EDL_CMD_REQ_RES_EVT ||
|
||||
edl->rtype != EDL_TVL_DNLD_RES_EVT || tlv_resp->result != 0x00) {
|
||||
BT_ERR("%s: TLV with error stat 0x%x rtype 0x%x (0x%x)",
|
||||
hdev->name, edl->cresp, edl->rtype, tlv_resp->result);
|
||||
bt_dev_err(hdev, "QCA TLV with error stat 0x%x rtype 0x%x (0x%x)",
|
||||
edl->cresp, edl->rtype, tlv_resp->result);
|
||||
err = -EIO;
|
||||
}
|
||||
|
||||
|
@ -260,23 +260,23 @@ out:
|
|||
return err;
|
||||
}
|
||||
|
||||
static int rome_download_firmware(struct hci_dev *hdev,
|
||||
static int qca_download_firmware(struct hci_dev *hdev,
|
||||
struct rome_config *config)
|
||||
{
|
||||
const struct firmware *fw;
|
||||
const u8 *segment;
|
||||
int ret, remain, i = 0;
|
||||
|
||||
bt_dev_info(hdev, "ROME Downloading %s", config->fwname);
|
||||
bt_dev_info(hdev, "QCA Downloading %s", config->fwname);
|
||||
|
||||
ret = request_firmware(&fw, config->fwname, &hdev->dev);
|
||||
if (ret) {
|
||||
BT_ERR("%s: Failed to request file: %s (%d)", hdev->name,
|
||||
bt_dev_err(hdev, "QCA Failed to request file: %s (%d)",
|
||||
config->fwname, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
rome_tlv_check_data(config, fw);
|
||||
qca_tlv_check_data(config, fw);
|
||||
|
||||
segment = fw->data;
|
||||
remain = fw->size;
|
||||
|
@ -290,7 +290,7 @@ static int rome_download_firmware(struct hci_dev *hdev,
|
|||
if (!remain || segsize < MAX_SIZE_PER_TLV_SEGMENT)
|
||||
config->dnld_mode = ROME_SKIP_EVT_NONE;
|
||||
|
||||
ret = rome_tlv_send_segment(hdev, segsize, segment,
|
||||
ret = qca_tlv_send_segment(hdev, segsize, segment,
|
||||
config->dnld_mode);
|
||||
if (ret)
|
||||
break;
|
||||
|
@ -317,8 +317,7 @@ int qca_set_bdaddr_rome(struct hci_dev *hdev, const bdaddr_t *bdaddr)
|
|||
HCI_VENDOR_PKT, HCI_INIT_TIMEOUT);
|
||||
if (IS_ERR(skb)) {
|
||||
err = PTR_ERR(skb);
|
||||
BT_ERR("%s: Change address command failed (%d)",
|
||||
hdev->name, err);
|
||||
bt_dev_err(hdev, "QCA Change address command failed (%d)", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -328,32 +327,32 @@ int qca_set_bdaddr_rome(struct hci_dev *hdev, const bdaddr_t *bdaddr)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(qca_set_bdaddr_rome);
|
||||
|
||||
int qca_uart_setup_rome(struct hci_dev *hdev, uint8_t baudrate)
|
||||
int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate)
|
||||
{
|
||||
u32 rome_ver = 0;
|
||||
struct rome_config config;
|
||||
int err;
|
||||
|
||||
BT_DBG("%s: ROME setup on UART", hdev->name);
|
||||
bt_dev_dbg(hdev, "QCA setup on UART");
|
||||
|
||||
config.user_baud_rate = baudrate;
|
||||
|
||||
/* Get ROME version information */
|
||||
err = rome_patch_ver_req(hdev, &rome_ver);
|
||||
/* Get QCA version information */
|
||||
err = qca_read_soc_version(hdev, &rome_ver);
|
||||
if (err < 0 || rome_ver == 0) {
|
||||
BT_ERR("%s: Failed to get version 0x%x", hdev->name, err);
|
||||
bt_dev_err(hdev, "QCA Failed to get version %d", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
bt_dev_info(hdev, "ROME controller version 0x%08x", rome_ver);
|
||||
bt_dev_info(hdev, "QCA controller version 0x%08x", rome_ver);
|
||||
|
||||
/* Download rampatch file */
|
||||
config.type = TLV_TYPE_PATCH;
|
||||
snprintf(config.fwname, sizeof(config.fwname), "qca/rampatch_%08x.bin",
|
||||
rome_ver);
|
||||
err = rome_download_firmware(hdev, &config);
|
||||
err = qca_download_firmware(hdev, &config);
|
||||
if (err < 0) {
|
||||
BT_ERR("%s: Failed to download patch (%d)", hdev->name, err);
|
||||
bt_dev_err(hdev, "QCA Failed to download patch (%d)", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -361,24 +360,24 @@ int qca_uart_setup_rome(struct hci_dev *hdev, uint8_t baudrate)
|
|||
config.type = TLV_TYPE_NVM;
|
||||
snprintf(config.fwname, sizeof(config.fwname), "qca/nvm_%08x.bin",
|
||||
rome_ver);
|
||||
err = rome_download_firmware(hdev, &config);
|
||||
err = qca_download_firmware(hdev, &config);
|
||||
if (err < 0) {
|
||||
BT_ERR("%s: Failed to download NVM (%d)", hdev->name, err);
|
||||
bt_dev_err(hdev, "QCA Failed to download NVM (%d)", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
/* Perform HCI reset */
|
||||
err = rome_reset(hdev);
|
||||
err = qca_send_reset(hdev);
|
||||
if (err < 0) {
|
||||
BT_ERR("%s: Failed to run HCI_RESET (%d)", hdev->name, err);
|
||||
bt_dev_err(hdev, "QCA Failed to run HCI_RESET (%d)", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
bt_dev_info(hdev, "ROME setup on UART is completed");
|
||||
bt_dev_info(hdev, "QCA setup on UART is completed");
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(qca_uart_setup_rome);
|
||||
EXPORT_SYMBOL_GPL(qca_uart_setup);
|
||||
|
||||
MODULE_AUTHOR("Ben Young Tae Kim <ytkim@qca.qualcomm.com>");
|
||||
MODULE_DESCRIPTION("Bluetooth support for Qualcomm Atheros family ver " VERSION);
|
||||
|
|
|
@ -127,7 +127,8 @@ struct tlv_type_hdr {
|
|||
#if IS_ENABLED(CONFIG_BT_QCA)
|
||||
|
||||
int qca_set_bdaddr_rome(struct hci_dev *hdev, const bdaddr_t *bdaddr);
|
||||
int qca_uart_setup_rome(struct hci_dev *hdev, uint8_t baudrate);
|
||||
int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate);
|
||||
int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version);
|
||||
|
||||
#else
|
||||
|
||||
|
@ -136,7 +137,12 @@ static inline int qca_set_bdaddr_rome(struct hci_dev *hdev, const bdaddr_t *bdad
|
|||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline int qca_uart_setup_rome(struct hci_dev *hdev, int speed)
|
||||
static inline int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
|
|
@ -966,7 +966,7 @@ static int qca_setup(struct hci_uart *hu)
|
|||
}
|
||||
|
||||
/* Setup patch / NVM configurations */
|
||||
ret = qca_uart_setup_rome(hdev, qca_baudrate);
|
||||
ret = qca_uart_setup(hdev, qca_baudrate);
|
||||
if (!ret) {
|
||||
set_bit(STATE_IN_BAND_SLEEP_ENABLED, &qca->flags);
|
||||
qca_debugfs_init(hdev);
|
||||
|
|
Loading…
Reference in a new issue