drivers: hci: spi: update to new GPIO API
Update bluetooth hcp spi driver to new GPIO API. Following changes have been done: - Use new gpio api functions - Get reset, irq and cs flags from dt defines - Define reset pin as active low and invert set/unset logic. Tested on disco_l475_iot1 and 96b_carbon. Signed-off-by: Erwan Gouriou <erwan.gouriou@linaro.org>
This commit is contained in:
parent
2a117748f6
commit
bfc1a50eb9
4 changed files with 23 additions and 24 deletions
|
@ -84,8 +84,8 @@
|
|||
bt-hci@0 {
|
||||
compatible = "zephyr,bt-hci-spi";
|
||||
reg = <0>;
|
||||
reset-gpios = <&gpiob 4 0>;
|
||||
irq-gpios = <&gpiob 1 0>;
|
||||
reset-gpios = <&gpiob 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
|
||||
irq-gpios = <&gpiob 1 GPIO_ACTIVE_HIGH>;
|
||||
spi-max-frequency = <2000000>;
|
||||
label = "BT_HCI";
|
||||
};
|
||||
|
|
|
@ -117,13 +117,14 @@
|
|||
&spi3 {
|
||||
status = "okay";
|
||||
|
||||
cs-gpios = <&gpiod 13 0>, <&gpioe 0 GPIO_ACTIVE_HIGH>;
|
||||
cs-gpios = <&gpiod 13 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>,
|
||||
<&gpioe 0 GPIO_ACTIVE_HIGH>;
|
||||
|
||||
spbtle-rf@0 {
|
||||
compatible = "zephyr,bt-hci-spi";
|
||||
reg = <0>;
|
||||
reset-gpios = <&gpioa 8 0>;
|
||||
irq-gpios = <&gpioe 6 0>;
|
||||
reset-gpios = <&gpioa 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
|
||||
irq-gpios = <&gpioe 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>;
|
||||
spi-max-frequency = <2000000>;
|
||||
label = "SPBTLE-RF";
|
||||
};
|
||||
|
|
|
@ -5,13 +5,13 @@
|
|||
*/
|
||||
|
||||
&arduino_spi {
|
||||
cs-gpios = <&arduino_header 16 0>; /* D10 */
|
||||
cs-gpios = <&arduino_header 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; /* D10 */
|
||||
|
||||
spbtle-rf@0 {
|
||||
compatible = "zephyr,bt-hci-spi";
|
||||
reg = <0>;
|
||||
reset-gpios = <&arduino_header 13 0>; /* D7 */
|
||||
irq-gpios = <&arduino_header 0 0>; /* A0 */
|
||||
reset-gpios = <&arduino_header 13 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; /* D7 */
|
||||
irq-gpios = <&arduino_header 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>; /* A0 */
|
||||
spi-max-frequency = <2000000>;
|
||||
label = "SPBTLE-RF";
|
||||
};
|
||||
|
|
|
@ -46,9 +46,12 @@
|
|||
#define CMD_OCF 2
|
||||
|
||||
#define GPIO_IRQ_PIN DT_INST_0_ZEPHYR_BT_HCI_SPI_IRQ_GPIOS_PIN
|
||||
#define GPIO_IRQ_FLAGS DT_INST_0_ZEPHYR_BT_HCI_SPI_IRQ_GPIOS_FLAGS
|
||||
#define GPIO_RESET_PIN DT_INST_0_ZEPHYR_BT_HCI_SPI_RESET_GPIOS_PIN
|
||||
#define GPIO_RESET_FLAGS DT_INST_0_ZEPHYR_BT_HCI_SPI_RESET_GPIOS_FLAGS
|
||||
#ifdef DT_INST_0_ZEPHYR_BT_HCI_SPI_CS_GPIOS_PIN
|
||||
#define GPIO_CS_PIN DT_INST_0_ZEPHYR_BT_HCI_SPI_CS_GPIOS_PIN
|
||||
#define GPIO_CS_FLAGS DT_INST_0_ZEPHYR_BT_HCI_SPI_CS_GPIOS_FLAGS
|
||||
#endif /* DT_INST_0_ZEPHYR_BT_HCI_SPI_CS_GPIOS_PIN */
|
||||
|
||||
/* Max SPI buffer length for transceive operations.
|
||||
|
@ -201,22 +204,23 @@ static int configure_cs(void)
|
|||
return -EIO;
|
||||
}
|
||||
|
||||
/* Configure pin as output and set to active */
|
||||
gpio_pin_configure(cs_dev, GPIO_CS_PIN,
|
||||
GPIO_DIR_OUT | GPIO_PUD_PULL_UP);
|
||||
gpio_pin_write(cs_dev, GPIO_CS_PIN, 1);
|
||||
GPIO_OUTPUT_ACTIVE | GPIO_CS_FLAGS);
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void kick_cs(void)
|
||||
{
|
||||
gpio_pin_write(cs_dev, GPIO_CS_PIN, 1);
|
||||
gpio_pin_write(cs_dev, GPIO_CS_PIN, 0);
|
||||
gpio_pin_set(cs_dev, GPIO_CS_PIN, 1);
|
||||
gpio_pin_set(cs_dev, GPIO_CS_PIN, 0);
|
||||
}
|
||||
|
||||
static void release_cs(void)
|
||||
{
|
||||
gpio_pin_write(cs_dev, GPIO_CS_PIN, 1);
|
||||
gpio_pin_set(cs_dev, GPIO_CS_PIN, 1);
|
||||
}
|
||||
|
||||
static bool irq_pin_high(void)
|
||||
|
@ -480,16 +484,11 @@ static int bt_spi_open(void)
|
|||
{
|
||||
/* Configure RST pin and hold BLE in Reset */
|
||||
gpio_pin_configure(rst_dev, GPIO_RESET_PIN,
|
||||
GPIO_DIR_OUT | GPIO_PUD_PULL_UP);
|
||||
gpio_pin_write(rst_dev, GPIO_RESET_PIN, 0);
|
||||
GPIO_OUTPUT_ACTIVE | GPIO_RESET_FLAGS);
|
||||
|
||||
/* Configure IRQ pin and the IRQ call-back/handler */
|
||||
gpio_pin_configure(irq_dev, GPIO_IRQ_PIN,
|
||||
#if defined(CONFIG_BT_SPI_BLUENRG)
|
||||
GPIO_PUD_PULL_DOWN |
|
||||
#endif
|
||||
GPIO_DIR_IN | GPIO_INT |
|
||||
GPIO_INT_EDGE | GPIO_INT_ACTIVE_HIGH);
|
||||
GPIO_INPUT | GPIO_IRQ_FLAGS);
|
||||
|
||||
gpio_init_callback(&gpio_cb, bt_spi_isr, BIT(GPIO_IRQ_PIN));
|
||||
|
||||
|
@ -497,9 +496,8 @@ static int bt_spi_open(void)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (gpio_pin_enable_callback(irq_dev, GPIO_IRQ_PIN)) {
|
||||
return -EINVAL;
|
||||
}
|
||||
gpio_pin_interrupt_configure(irq_dev, GPIO_IRQ_PIN,
|
||||
GPIO_INT_EDGE_TO_ACTIVE);
|
||||
|
||||
/* Start RX thread */
|
||||
k_thread_create(&spi_rx_thread_data, spi_rx_stack,
|
||||
|
@ -509,7 +507,7 @@ static int bt_spi_open(void)
|
|||
0, K_NO_WAIT);
|
||||
|
||||
/* Take BLE out of reset */
|
||||
gpio_pin_write(rst_dev, GPIO_RESET_PIN, 1);
|
||||
gpio_pin_set(rst_dev, GPIO_RESET_PIN, 0);
|
||||
|
||||
/* Device will let us know when it's ready */
|
||||
k_sem_take(&sem_initialised, K_FOREVER);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue