mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 20:07:46 +09:00
BT: add rts control.
This commit is contained in:
@@ -116,6 +116,11 @@
|
||||
rockchip,drive = <VALUE_DRV_DEFAULT>;
|
||||
//rockchip,tristate = <VALUE_TRI_DEFAULT>;
|
||||
};
|
||||
|
||||
uart0_rts_gpio: uart0-rts-gpio {
|
||||
rockchip,pins = <FUNC_TO_GPIO(UART0_RTSN)>;
|
||||
rockchip,drive = <VALUE_DRV_DEFAULT>;
|
||||
};
|
||||
};
|
||||
|
||||
gpio1_uart1 {
|
||||
@@ -143,6 +148,11 @@
|
||||
rockchip,drive = <VALUE_DRV_DEFAULT>;
|
||||
//rockchip,tristate = <VALUE_TRI_DEFAULT>;
|
||||
};
|
||||
|
||||
uart1_rts_gpio: uart1-rts-gpio {
|
||||
rockchip,pins = <FUNC_TO_GPIO(UART1_RTSN)>;
|
||||
rockchip,drive = <VALUE_DRV_DEFAULT>;
|
||||
};
|
||||
};
|
||||
|
||||
gpio1_uart2 {
|
||||
@@ -182,6 +192,11 @@
|
||||
rockchip,drive = <VALUE_DRV_DEFAULT>;
|
||||
//rockchip,tristate = <VALUE_TRI_DEFAULT>;
|
||||
};
|
||||
|
||||
uart3_rts_gpio: uart3-rts-gpio {
|
||||
rockchip,pins = <FUNC_TO_GPIO(UART3_RTSN)>;
|
||||
rockchip,drive = <VALUE_DRV_DEFAULT>;
|
||||
};
|
||||
};
|
||||
|
||||
gpio1_i2c0 {
|
||||
|
||||
@@ -41,10 +41,10 @@
|
||||
wireless-bluetooth {
|
||||
compatible = "bluetooth-platdata";
|
||||
|
||||
support_uart_rts_ctrl;
|
||||
uart_rts_gpios = <&gpio1 GPIO_A3 GPIO_ACTIVE_LOW>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-names = "default","rts_gpio";
|
||||
pinctrl-0 = <&uart0_rts>;
|
||||
pinctrl-1 = <&uart0_rts_gpio>;
|
||||
|
||||
BT,power_gpio = <&gpio3 GPIO_C7 GPIO_ACTIVE_HIGH>;
|
||||
BT,reset_gpio = <&gpio3 GPIO_D1 GPIO_ACTIVE_HIGH>;
|
||||
@@ -131,6 +131,7 @@
|
||||
&uart0 {
|
||||
status = "okay";
|
||||
dma-names = "!tx", "!rx";
|
||||
pinctrl-0 = <&uart0_xfer &uart0_cts>;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -274,9 +274,8 @@ static int rfkill_rk_set_power(void *data, bool blocked)
|
||||
msleep(20);
|
||||
gpio_direction_output(reset->io, reset->enable);
|
||||
}
|
||||
|
||||
#if defined(CONFIG_AP6210) || defined(CONFIG_AP6335)
|
||||
if (gpio_is_valid(rts->io))
|
||||
if (pinctrl != NULL && gpio_is_valid(rts->io))
|
||||
{
|
||||
pinctrl_select_state(pinctrl, rts->gpio_state);
|
||||
LOG("ENABLE UART_RTS\n");
|
||||
@@ -287,7 +286,6 @@ static int rfkill_rk_set_power(void *data, bool blocked)
|
||||
pinctrl_select_state(pinctrl, rts->default_state);
|
||||
}
|
||||
#endif
|
||||
|
||||
LOG("bt turn on power\n");
|
||||
} else {
|
||||
if (gpio_is_valid(poweron->io))
|
||||
@@ -323,11 +321,11 @@ static int rfkill_rk_pm_prepare(struct device *dev)
|
||||
wake_host_irq = &rfkill->pdata->wake_host_irq;
|
||||
|
||||
//To prevent uart to receive bt data when suspended
|
||||
if (gpio_is_valid(rts->io))
|
||||
if (pinctrl != NULL && gpio_is_valid(rts->io))
|
||||
{
|
||||
DBG("Disable UART_RTS\n");
|
||||
//pinctrl_select_state(pinctrl, rts->gpio_state);
|
||||
//gpio_direction_output(rts->io, !rts->enable);
|
||||
pinctrl_select_state(pinctrl, rts->gpio_state);
|
||||
gpio_direction_output(rts->io, !rts->enable);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_BT_AUTOSLEEP
|
||||
@@ -370,7 +368,7 @@ static void rfkill_rk_pm_complete(struct device *dev)
|
||||
disable_irq(wake_host_irq->irq);
|
||||
}
|
||||
|
||||
if (gpio_is_valid(rts->io))
|
||||
if (pinctrl != NULL && gpio_is_valid(rts->io))
|
||||
{
|
||||
DBG("Enable UART_RTS\n");
|
||||
gpio_direction_output(rts->io, rts->enable);
|
||||
@@ -439,23 +437,24 @@ static int bluetooth_platdata_parse_dt(struct device *dev,
|
||||
|
||||
memset(data, 0, sizeof(*data));
|
||||
|
||||
if (of_find_property(node, "support_uart_rts_ctrl", NULL)) {
|
||||
gpio = of_get_named_gpio_flags(node, "uart_rts_gpios", 0, &flags);
|
||||
if (gpio_is_valid(gpio)) {
|
||||
data->rts_gpio.io = gpio;
|
||||
data->rts_gpio.enable = flags;
|
||||
LOG("%s: get property: uart_rts_gpios = %d.\n", __func__, gpio);
|
||||
data->pinctrl = devm_pinctrl_get(dev);
|
||||
if (!IS_ERR(data->pinctrl)) {
|
||||
data->rts_gpio.default_state = pinctrl_lookup_state(data->pinctrl, "default");
|
||||
} else {
|
||||
LOG("%s: dts does't define the uart rts iomux.\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
gpio = of_get_named_gpio_flags(node, "uart_rts_gpios", 0, &flags);
|
||||
if (gpio_is_valid(gpio)) {
|
||||
data->rts_gpio.io = gpio;
|
||||
data->rts_gpio.enable = (flags == GPIO_ACTIVE_HIGH)? 1:0;
|
||||
LOG("%s: get property: uart_rts_gpios = %d.\n", __func__, gpio);
|
||||
data->pinctrl = devm_pinctrl_get(dev);
|
||||
if (!IS_ERR(data->pinctrl)) {
|
||||
data->rts_gpio.default_state = pinctrl_lookup_state(data->pinctrl, "default");
|
||||
data->rts_gpio.gpio_state = pinctrl_lookup_state(data->pinctrl, "rts_gpio");
|
||||
} else {
|
||||
LOG("%s: uart_rts_gpios is unvalid.\n", __func__);
|
||||
data->pinctrl = NULL;
|
||||
LOG("%s: dts does't define the uart rts iomux.\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
} else {
|
||||
data->pinctrl = NULL;
|
||||
LOG("%s: uart_rts_gpios is unvalid.\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
gpio = of_get_named_gpio_flags(node, "BT,power_gpio", 0, &flags);
|
||||
@@ -579,8 +578,8 @@ static int rfkill_rk_probe(struct platform_device *pdev)
|
||||
ret = rfkill_rk_setup_wake_irq(rfkill);
|
||||
if (ret) goto fail_gpio;
|
||||
|
||||
//ret = rfkill_rk_setup_gpio(pdev, &pdata->rts_gpio, rfkill->pdata->name, "rts");
|
||||
//if (ret) goto fail_gpio;
|
||||
ret = rfkill_rk_setup_gpio(pdev, &pdata->rts_gpio, rfkill->pdata->name, "rts");
|
||||
if (ret) goto fail_gpio;
|
||||
|
||||
DBG("setup rfkill\n");
|
||||
rfkill->rfkill_dev = rfkill_alloc(pdata->name, &pdev->dev, pdata->type,
|
||||
|
||||
Reference in New Issue
Block a user