drivers: bluetooth: hci: add hardware reset for da1453x
Add ability to perform a hardware reset of the DA1453x during setup of the HCI transport. Signed-off-by: Ian Morris <ian.d.morris@outlook.com>
This commit is contained in:
parent
d87bafea30
commit
8e51ebf499
4 changed files with 97 additions and 0 deletions
|
@ -29,6 +29,7 @@ if(CONFIG_DT_HAS_INFINEON_CAT1_BLESS_HCI_ENABLED)
|
|||
endif()
|
||||
zephyr_library_sources_ifdef(CONFIG_SOC_NRF5340_CPUAPP nrf53_support.c)
|
||||
zephyr_library_sources_ifdef(CONFIG_BT_AMBIQ_HCI hci_ambiq.c apollox_blue.c)
|
||||
zephyr_library_sources_ifdef(CONFIG_BT_DA1453X hci_da1453x.c)
|
||||
zephyr_library_sources_ifdef(CONFIG_BT_DA1469X hci_da1469x.c)
|
||||
zephyr_library_sources_ifdef(CONFIG_BT_NXP hci_nxp.c)
|
||||
zephyr_library_sources_ifdef(CONFIG_BT_H4_NXP_CTLR hci_nxp_setup.c)
|
||||
|
|
|
@ -160,6 +160,15 @@ config BT_PSOC6_BLESS
|
|||
PSOC 6 BLESS driver with BLE Controller which operates in
|
||||
Single CPU mode.
|
||||
|
||||
config BT_DA1453X
|
||||
bool "DA1453x HCI driver"
|
||||
default y
|
||||
depends on DT_HAS_RENESAS_BT_HCI_DA1453X_ENABLED
|
||||
select GPIO
|
||||
help
|
||||
Bluetooth HCI driver for communication with controller
|
||||
running on DA1453x MCU.
|
||||
|
||||
config BT_DA1469X
|
||||
bool
|
||||
default y
|
||||
|
|
59
drivers/bluetooth/hci/hci_da1453x.c
Normal file
59
drivers/bluetooth/hci/hci_da1453x.c
Normal file
|
@ -0,0 +1,59 @@
|
|||
/*
|
||||
* Copyright 2024 Ian Morris
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include <zephyr/kernel.h>
|
||||
#include <zephyr/device.h>
|
||||
#include <zephyr/devicetree.h>
|
||||
#include <zephyr/drivers/gpio.h>
|
||||
#include <zephyr/drivers/uart.h>
|
||||
|
||||
#define LOG_LEVEL CONFIG_BT_HCI_DRIVER_LOG_LEVEL
|
||||
#include <zephyr/logging/log.h>
|
||||
LOG_MODULE_REGISTER(bt_hci_da1453x);
|
||||
|
||||
#define DT_DRV_COMPAT renesas_bt_hci_da1453x
|
||||
|
||||
int bt_hci_transport_setup(const struct device *h4)
|
||||
{
|
||||
int err = 0;
|
||||
|
||||
#if DT_INST_NODE_HAS_PROP(0, reset_gpios)
|
||||
char c;
|
||||
struct gpio_dt_spec bt_reset = GPIO_DT_SPEC_GET(DT_DRV_INST(0), reset_gpios);
|
||||
|
||||
if (!gpio_is_ready_dt(&bt_reset)) {
|
||||
LOG_ERR("Error: failed to configure bt_reset %s pin %d", bt_reset.port->name,
|
||||
bt_reset.pin);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
/* Set bt_reset as output and activate DA1453x reset */
|
||||
err = gpio_pin_configure_dt(&bt_reset, GPIO_OUTPUT_ACTIVE);
|
||||
if (err) {
|
||||
LOG_ERR("Error %d: failed to configure bt_reset %s pin %d", err,
|
||||
bt_reset.port->name, bt_reset.pin);
|
||||
return err;
|
||||
}
|
||||
|
||||
k_sleep(K_MSEC(DT_INST_PROP_OR(0, reset_assert_duration_ms, 0)));
|
||||
|
||||
/* Release the DA1453x from reset */
|
||||
err = gpio_pin_set_dt(&bt_reset, 0);
|
||||
if (err) {
|
||||
return err;
|
||||
}
|
||||
|
||||
/* Wait for the DA1453x to boot */
|
||||
k_sleep(K_MSEC(DT_INST_PROP(0, boot_duration_ms)));
|
||||
|
||||
/* Drain bytes */
|
||||
while (h4 && uart_fifo_read(h4, &c, 1)) {
|
||||
continue;
|
||||
}
|
||||
#endif /* DT_INST_NODE_HAS_PROP(0, reset_gpios) */
|
||||
|
||||
return err;
|
||||
}
|
28
dts/bindings/bluetooth/renesas,bt-hci-da1453x.yaml
Normal file
28
dts/bindings/bluetooth/renesas,bt-hci-da1453x.yaml
Normal file
|
@ -0,0 +1,28 @@
|
|||
# Copyright 2024 Ian Morris
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
description: |
|
||||
Extension of the Bluetooth H:4 HCI driver for a Renesas DA1453x based
|
||||
controller, allowing control of the GPIO used to reset the DA1453x.
|
||||
|
||||
compatible: "renesas,bt-hci-da1453x"
|
||||
|
||||
include: base.yaml
|
||||
|
||||
properties:
|
||||
reset-gpios:
|
||||
type: phandle-array
|
||||
description: |
|
||||
This gpio is used to reset the DA1453x.
|
||||
|
||||
reset-assert-duration-ms:
|
||||
type: int
|
||||
description: |
|
||||
Minimum duration to activate the reset-gpios pin.
|
||||
If not specified no delay beyond the code path execution time is guaranteed.
|
||||
|
||||
boot-duration-ms:
|
||||
type: int
|
||||
default: 200
|
||||
description: |
|
||||
Minimum time to wait for the DA1453x to boot following a hardware reset.
|
Loading…
Add table
Add a link
Reference in a new issue