AP6255 蓝牙驱动移植

2025-10-26 22:01:00

1、配置UART4

static iomux_v3_cfg_t mx6sl_uart4_pads[] = {

MX6SL_PAD_KEY_COL6__UART4_RXD,

MX6SL_PAD_KEY_COL7__UART4_RTS,

MX6SL_PAD_KEY_ROW6__UART4_TXD,

MX6SL_PAD_KEY_ROW7__UART4_CTS,};

然后make menuconfig

CONFIG_BT=y

CONFIG_BT_RFCOMM=y

CONFIG_BT_RFCOMM_TTY=y

CONFIG_BT_BNEP=y

CONFIG_BT_BNEP_MC_FILTER=y

CONFIG_BT_BNEP_PROTO_FILTER=y

CONFIG_BT_HIDP=y

CONFIG_BT_HCIBTUSB=y

CONFIG_BT_HCIUART=y

CONFIG_BT_HCIUART_H4=y

配置

#define MX6_BRD_FEC_BT_REG_ON IMX_GPIO_NR(3, 25)

根据蓝牙模块的上电时序,上电

3:主要修改hal层:

hardware\broadcom\libbt\conf\AP6255:

AP6255 蓝牙驱动移植

2、bd_addr.txt 11:22:33:44:55:66

bt_vendor.conf:

# UART device port where Bluetooth controller is attached

UartPort = /dev/ttymxc3

# Firmware patch file location

FwPatchFilePath = /system/etc/firmware/

#

# #Firmware name

FwPatchFileName = BCM4345C0.hcd

#

使用第4个串口,为/dev/ttymxc3, 固件位置FwPatchFilePath = /system/etc/firmware/

固件名字:FwPatchFileName = BCM4345C0.hcd

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := bt_vendor.conf

LOCAL_MODULE_CLASS := ETC

LOCAL_MODULE_PATH := $(TARGET_OUT)/etc/bluetooth

LOCAL_MODULE_TAGS := eng

LOCAL_SRC_FILES := $(LOCAL_MODULE)

include $(BUILD_PREBUILT)

配置:BoardConfig.mk

BOARD_HAVE_BLUETOOTH:True

BOARD_HAVE_BLUETOOTH_BCM:True

修改:hardware/broadcom/libbt/include/bt_vendor_brcm.h

UART_TARGET_BAUD_RATE 3000000

LPM_SLEEP_MODE     0

4:rfkill 主要控制蓝牙的上电与下电

static struct platform_device mxc_bt_rfkill = {

.name = "mxc_bt_rfkill",};

static struct imx_bt_rfkill_platform_data mxc_bt_rfkill_data = {

.power_change = mx6sl_evk_bt_power_change,};

mxc_register_device(&mxc_bt_rfkill, &mxc_bt_rfkill_data);

static struct platform_driver mxc_bt_rfkill_driver = {

.driver = {

.name = "mxc_bt_rfkill",},

.probe = mxc_bt_rfkill_probe,

.remove = __devexit_p(mxc_bt_rfkill_remove),};

static int mxc_bt_set_block(void *rfkdata, bool blocked)

{

struct imx_bt_rfkill_platform_data *data = rfkdata;

int ret;

/* Bluetooth stack will reset the bluetooth chip during

* resume, since we keep bluetooth's power during suspend,

* don't let rfkill to actually reset the chip. */

if (system_in_suspend)

return 0;

pr_info("rfkill: BT RF going to : %s\n", blocked ? "off" : "on");

if (!blocked)

ret = data->power_change(1);

else

ret = data->power_change(0);

return ret;

}

static const struct rfkill_ops mxc_bt_rfkill_ops = {

.set_block = mxc_bt_set_block,

};

通过power_change,打开关闭蓝牙

int mx6sl_evk_bt_power_change(int status)

{

if (status)

mx6sl_evk_bt_reset();

else

mx6sl_evk_bt_off();

return 0;

}

操作gpio实现,上电与下电。

实际问题会比较多,有不懂的可以留言

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢