BT: introduce power_down_disable property in DT

PD#163673: BT: introduce power_down_disable property in DT

introduce a power_down_disable property in the DT file, we need to
keep power on for the ap62x8 in order to pass the vts test

Change-Id: I1984ded1e7f96732630b4e94a97bbb2705a8fbd6
Signed-off-by: Kuibao Zhang <kuibao.zhang@amlogic.com>
This commit is contained in:
Kuibao Zhang
2018-04-13 19:53:38 +08:00
committed by Yixun Lan
parent 9253361a99
commit 4ad0ec9c9a
4 changed files with 43 additions and 31 deletions

View File

@@ -603,6 +603,7 @@
compatible = "amlogic, bt-dev";
dev_name = "bt-dev";
status = "okay";
power_down_disable = <1>;
gpio_reset = <&gpio_ao GPIOAO_13 GPIO_ACTIVE_HIGH>;
//gpio_en = <&gpio_ao GPIOAO_5 GPIO_ACTIVE_HIGH>;
};

View File

@@ -612,6 +612,7 @@
compatible = "amlogic, bt-dev";
dev_name = "bt-dev";
status = "okay";
power_down_disable = <1>;
gpio_reset = <&gpio_ao GPIOAO_8 GPIO_ACTIVE_HIGH>;
//gpio_en = <&gpio_ao GPIOAO_5 GPIO_ACTIVE_HIGH>;
};

View File

@@ -85,25 +85,26 @@ static void bt_device_deinit(struct bt_dev_data *pdata)
static void bt_device_on(struct bt_dev_data *pdata)
{
if (pdata->gpio_reset > 0) {
if ((pdata->power_on_pin_OD) && (pdata->power_low_level)) {
gpio_direction_input(pdata->gpio_reset);
} else {
gpio_direction_output(pdata->gpio_reset,
pdata->power_low_level);
if (pdata->power_down_disable == 0) {
if (pdata->gpio_reset > 0) {
if ((pdata->power_on_pin_OD)
&& (pdata->power_low_level)) {
gpio_direction_input(pdata->gpio_reset);
} else {
gpio_direction_output(pdata->gpio_reset,
pdata->power_low_level);
}
}
}
if (pdata->gpio_en > 0) {
if ((pdata->power_on_pin_OD)
&& (pdata->power_low_level)) {
gpio_direction_input(pdata->gpio_en);
} else {
set_usb_bt_power(0);
if (pdata->gpio_en > 0) {
if ((pdata->power_on_pin_OD)
&& (pdata->power_low_level)) {
gpio_direction_input(pdata->gpio_en);
} else {
set_usb_bt_power(0);
}
}
msleep(200);
}
msleep(200);
if (pdata->gpio_reset > 0) {
if ((pdata->power_on_pin_OD)
@@ -128,25 +129,27 @@ static void bt_device_on(struct bt_dev_data *pdata)
static void bt_device_off(struct bt_dev_data *pdata)
{
if (pdata->power_off_flag > 0) { /*bt rc wakeup by bcm.set it by dts*/
if (pdata->gpio_reset > 0) {
if ((pdata->power_on_pin_OD)
&& (pdata->power_low_level)) {
gpio_direction_input(pdata->gpio_reset);
} else {
gpio_direction_output(pdata->gpio_reset,
if (pdata->power_down_disable == 0) {
if (pdata->power_off_flag > 0) { /*bt rc wakeup flag for bcm.*/
if (pdata->gpio_reset > 0) {
if ((pdata->power_on_pin_OD)
&& (pdata->power_low_level)) {
gpio_direction_input(pdata->gpio_reset);
} else {
gpio_direction_output(pdata->gpio_reset,
pdata->power_low_level);
}
}
}
if (pdata->gpio_en > 0) {
if ((pdata->power_on_pin_OD)
&& (pdata->power_low_level)) {
gpio_direction_input(pdata->gpio_en);
} else {
set_usb_bt_power(0);
if (pdata->gpio_en > 0) {
if ((pdata->power_on_pin_OD)
&& (pdata->power_low_level)) {
gpio_direction_input(pdata->gpio_en);
} else {
set_usb_bt_power(0);
}
}
msleep(20);
}
msleep(20);
}
}
@@ -260,6 +263,12 @@ static int bt_probe(struct platform_device *pdev)
if (ret)
pdata->power_off_flag = 1;/*bt poweroff*/
pr_info("bt: power_off_flag = %d;\n", pdata->power_off_flag);
ret = of_property_read_u32(pdev->dev.of_node,
"power_down_disable", &pdata->power_down_disable);
if (ret)
pdata->power_down_disable = 0;
pr_info("dis power down = %d;\n", pdata->power_down_disable);
} else {
pdata = (struct bt_dev_data *)(pdev->dev.platform_data);
}

View File

@@ -25,6 +25,7 @@ struct bt_dev_data {
int power_low_level;
int power_on_pin_OD;
int power_off_flag;
int power_down_disable;
};
extern void set_usb_bt_power(int is_power);
#endif