Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0a83eab6 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "Bluetooth: Implement a minimum off-time for AON discharge issue"

parents 09abe575 0e123a02
Loading
Loading
Loading
Loading
+40 −7
Original line number Diff line number Diff line
@@ -297,6 +297,7 @@ static int bt_configure_gpios(int on)
{
	int rc = 0;
	int bt_reset_gpio = bt_power_pdata->bt_gpio_sys_rst;
	int wl_reset_gpio = bt_power_pdata->wl_gpio_sys_rst;
	int bt_sw_ctrl_gpio  =  bt_power_pdata->bt_gpio_sw_ctrl;
	int bt_debug_gpio  =  bt_power_pdata->bt_gpio_debug;
	int assert_dbg_gpio = 0;
@@ -327,14 +328,36 @@ static int bt_configure_gpios(int on)
				bt_sw_ctrl_gpio,
				bt_power_src_status[BT_SW_CTRL_GPIO]);
		}
		pr_debug("BTON:Turn Bt On wl-reset-gpio(%d) value(%d)\n",
			wl_reset_gpio, gpio_get_value(wl_reset_gpio));

		if ((wl_reset_gpio < 0) ||
			((wl_reset_gpio >= 0) && gpio_get_value(wl_reset_gpio))) {
			rc = gpio_direction_output(bt_reset_gpio, 1);
			if (rc) {
			pr_err("%s: Unable to set direction\n", __func__);
				pr_debug("%s: Unable to set direction\n", __func__);
				return rc;
			}
		bt_power_src_status[BT_RESET_GPIO] =
			gpio_get_value(bt_reset_gpio);
		}
		if ((wl_reset_gpio >= 0) && (gpio_get_value(wl_reset_gpio) == 0)) {
			if (gpio_get_value(bt_reset_gpio)) {
				pr_debug("%s: Wlan Off and BT On too close\n", __func__);
				pr_debug("%s: reset BT_EN, enable it after delay\n", __func__);
				rc = gpio_direction_output(bt_reset_gpio, 0);
				if (rc) {
					pr_debug("%s: Unable to set direction\n", __func__);
					return rc;
				}
			}
			pr_debug("%s:add 100ms delay for AON output to fully discharge\n",
				 __func__);
			msleep(100);
			rc = gpio_direction_output(bt_reset_gpio, 1);
			if (rc) {
				pr_debug("%s: Unable to set direction\n", __func__);
				return rc;
			}
		}
		msleep(50);
		/*  Check  if  SW_CTRL  is  asserted  */
		if  (bt_sw_ctrl_gpio  >=  0)  {
@@ -429,6 +452,8 @@ static int bluetooth_power(int on)
gpio_fail:
		if (bt_power_pdata->bt_gpio_sys_rst > 0)
			gpio_free(bt_power_pdata->bt_gpio_sys_rst);
		if (bt_power_pdata->wl_gpio_sys_rst > 0)
			gpio_free(bt_power_pdata->wl_gpio_sys_rst);
		if  (bt_power_pdata->bt_gpio_sw_ctrl  >  0)
			gpio_free(bt_power_pdata->bt_gpio_sw_ctrl);
		if  (bt_power_pdata->bt_gpio_debug  >  0)
@@ -720,6 +745,14 @@ static int bt_power_populate_dt_pinfo(struct platform_device *pdev)
		if (bt_power_pdata->bt_gpio_sys_rst < 0)
			pr_warn("bt-reset-gpio not provided in devicetree\n");

		bt_power_pdata->wl_gpio_sys_rst =
			of_get_named_gpio(pdev->dev.of_node,
						"qcom,wl-reset-gpio", 0);
		if (bt_power_pdata->wl_gpio_sys_rst < 0)
			pr_err("%s: wl-reset-gpio not provided in device tree\n",
				__func__);


		bt_power_pdata->bt_gpio_sw_ctrl  =
			of_get_named_gpio(pdev->dev.of_node,
						"qcom,bt-sw-ctrl-gpio",  0);
+1 −0
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@ struct btpower_tcs_table_info {
 */
struct bluetooth_power_platform_data {
	int bt_gpio_sys_rst;                   /* Bluetooth reset gpio */
	int wl_gpio_sys_rst;                   /* Wlan reset gpio */
	int bt_gpio_sw_ctrl;                   /* Bluetooth sw_ctrl gpio */
	int bt_gpio_debug;                     /* Bluetooth debug gpio */
	struct device *slim_dev;