kernel-fxtec-pro1x/include/linux/bluetooth-power.h
priyankar efab7ef9d1 Bluetooth: Implement a minimum off-time for AON discharge issue
Sometimes it is seen that AON LDO output takes minimum
off-time (worst case 100ms) to fully discharge. If BT is
turned on in this timeframe when AON is not fully discharged
yet ,BT would fail to turn ON.
This fix ensures to:
Toggle BT_EN high when WL_EN is already high.
Handle corner case if WL_EN goes low in step 1.
Add 100ms to toggle BT_EN high when WL_EN is low.

Change-Id: I7b035d3c91e4b73564a866f40ebdff25f1a315b4
Signed-off-by: priyankar <prigup@codeaurora.org>
2020-11-10 23:59:03 -08:00

106 lines
3.1 KiB
C

/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2016-2020, The Linux Foundation. All rights reserved.
*/
#ifndef __LINUX_BLUETOOTH_POWER_H
#define __LINUX_BLUETOOTH_POWER_H
/*
* voltage regulator information required for configuring the
* bluetooth chipset
*/
struct bt_power_vreg_data {
/* voltage regulator handle */
struct regulator *reg;
/* regulator name */
const char *name;
/* voltage levels to be set */
unsigned int low_vol_level;
unsigned int high_vol_level;
/* current level to be set */
unsigned int load_uA;
/*
* is set voltage supported for this regulator?
* false => set voltage is not supported
* true => set voltage is supported
*
* Some regulators (like gpio-regulators, LVS (low voltage swtiches)
* PMIC regulators) dont have the capability to call
* regulator_set_voltage or regulator_set_optimum_mode
* Use this variable to indicate if its a such regulator or not
*/
bool set_voltage_sup;
/* is this regulator enabled? */
bool is_enabled;
};
struct bt_power_clk_data {
/* clock regulator handle */
struct clk *clk;
/* clock name */
const char *name;
/* is this clock enabled? */
bool is_enabled;
};
/*
* Platform data for the bluetooth power driver.
*/
struct bluetooth_power_platform_data {
/* Bluetooth reset gpio */
int bt_gpio_sys_rst;
/* Bluetooth sw_ctrl gpio */
int bt_gpio_sw_ctrl;
/* Wlan reset gpio */
int wl_gpio_sys_rst;
/* Bluetooth debug gpio */
int bt_gpio_debug;
struct device *slim_dev;
/* VDDIO voltage regulator */
struct bt_power_vreg_data *bt_vdd_io;
/* VDD_PA voltage regulator */
struct bt_power_vreg_data *bt_vdd_pa;
/* VDD_LDOIN voltage regulator */
struct bt_power_vreg_data *bt_vdd_ldo;
/* VDD_XTAL voltage regulator */
struct bt_power_vreg_data *bt_vdd_xtal;
/* VDD_CORE voltage regulator */
struct bt_power_vreg_data *bt_vdd_core;
/* VDD_AON digital voltage regulator */
struct bt_power_vreg_data *bt_vdd_aon;
/* VDD_DIG digital voltage regulator */
struct bt_power_vreg_data *bt_vdd_dig;
/* VDD RFA1 digital voltage regulator */
struct bt_power_vreg_data *bt_vdd_rfa1;
/* VDD RFA2 digital voltage regulator */
struct bt_power_vreg_data *bt_vdd_rfa2;
/* VDD ASD digital voltage regulator */
struct bt_power_vreg_data *bt_vdd_asd;
/* Optional: chip power down gpio-regulator
* chip power down data is required when bluetooth module
* and other modules like wifi co-exist in a single chip and
* shares a common gpio to bring chip out of reset.
*/
struct bt_power_vreg_data *bt_chip_pwd;
/* bluetooth reference clock */
struct bt_power_clk_data *bt_chip_clk;
/* Optional: Bluetooth power setup function */
int (*bt_power_setup)(int id);
};
int bt_register_slimdev(struct device *dev);
int get_chipset_version(void);
#define BT_CMD_SLIM_TEST 0xbfac
#define BT_CMD_PWR_CTRL 0xbfad
#define BT_CMD_CHIPSET_VERS 0xbfae
/* 0xbfaf --> reserved for kernel 5.4 */
#define BT_CMD_CHECK_SW_CTRL 0xbfb0
#define BT_CMD_GETVAL_POWER_SRCS 0xbfb1
/* total number of power src */
#define BT_POWER_SRC_SIZE 28
#endif /* __LINUX_BLUETOOTH_POWER_H */