rfkill-bt: rtl8723bs-vq0 bringup fixed on PX5.
fixed rfkill bt probe fail when rtl8723bs-vq0 combo is not designed uart flow control. rtl8723bs-vq0 wifi/bt wl_chip_enable always is opened on PX5, because rtl8723bs-vq0 wl_chips_enable gpio is shared for wifi and bt. Change-Id: Ic79682186c2bae896610ac00620ce19ee83d58a1 Signed-off-by: summy.yang <summy.yang@rock-chips.com>
This commit is contained in:
@@ -57,6 +57,7 @@ struct rfkill_rk_platform_data {
|
||||
char *name;
|
||||
enum rfkill_type type;
|
||||
bool power_toggle;
|
||||
bool bt_power_remain;
|
||||
struct pinctrl *pinctrl;
|
||||
struct rfkill_rk_gpio poweron_gpio;
|
||||
struct rfkill_rk_gpio reset_gpio;
|
||||
|
||||
@@ -294,11 +294,11 @@ static int rfkill_rk_set_power(void *data, bool blocked)
|
||||
|
||||
rfkill_rk_sleep_bt(BT_WAKEUP); // ensure bt is wakeup
|
||||
|
||||
if (gpio_is_valid(poweron->io))
|
||||
if (&rfkill->pdata->bt_power_remain == false && gpio_is_valid(poweron->io))
|
||||
{
|
||||
gpio_direction_output(poweron->io, !poweron->enable);
|
||||
gpio_direction_output(poweron->io, !poweron->enable);
|
||||
msleep(20);
|
||||
gpio_direction_output(poweron->io, poweron->enable);
|
||||
gpio_direction_output(poweron->io, poweron->enable);
|
||||
msleep(20);
|
||||
}
|
||||
if (gpio_is_valid(reset->io))
|
||||
@@ -322,7 +322,7 @@ static int rfkill_rk_set_power(void *data, bool blocked)
|
||||
bt_power_state = 1;
|
||||
LOG("bt turn on power\n");
|
||||
} else {
|
||||
if (gpio_is_valid(poweron->io))
|
||||
if (&rfkill->pdata->bt_power_remain == false && gpio_is_valid(poweron->io))
|
||||
{
|
||||
gpio_direction_output(poweron->io, !poweron->enable);
|
||||
msleep(20);
|
||||
@@ -483,6 +483,13 @@ static int bluetooth_platdata_parse_dt(struct device *dev,
|
||||
data->power_toggle = false;
|
||||
}
|
||||
|
||||
if (of_find_property(node, "keep_bt_power_on", NULL)) {
|
||||
data->bt_power_remain = true;
|
||||
LOG("%s: get property keep_bt_power_on.\n", __func__);
|
||||
} else {
|
||||
data->bt_power_remain = false;
|
||||
}
|
||||
|
||||
gpio = of_get_named_gpio_flags(node, "uart_rts_gpios", 0, &flags);
|
||||
if (gpio_is_valid(gpio)) {
|
||||
data->rts_gpio.io = gpio;
|
||||
@@ -495,12 +502,12 @@ static int bluetooth_platdata_parse_dt(struct device *dev,
|
||||
} else {
|
||||
data->pinctrl = NULL;
|
||||
LOG("%s: dts does't define the uart rts iomux.\n", __func__);
|
||||
return -EINVAL;
|
||||
//return -EINVAL;
|
||||
}
|
||||
} else {
|
||||
data->pinctrl = NULL;
|
||||
LOG("%s: uart_rts_gpios is unvalid.\n", __func__);
|
||||
return -EINVAL;
|
||||
//return -EINVAL;
|
||||
}
|
||||
|
||||
gpio = of_get_named_gpio_flags(node, "BT,power_gpio", 0, &flags);
|
||||
@@ -644,7 +651,10 @@ static int rfkill_rk_probe(struct platform_device *pdev)
|
||||
// bt turn off power
|
||||
if (gpio_is_valid(pdata->poweron_gpio.io))
|
||||
{
|
||||
gpio_direction_output(pdata->poweron_gpio.io, !pdata->poweron_gpio.enable);
|
||||
if (pdata->bt_power_remain)
|
||||
gpio_direction_output(pdata->poweron_gpio.io, pdata->poweron_gpio.enable);
|
||||
else
|
||||
gpio_direction_output(pdata->poweron_gpio.io, !pdata->poweron_gpio.enable);
|
||||
}
|
||||
if (gpio_is_valid(pdata->reset_gpio.io))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user