107 lines
3.1 KiB
C
107 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 */
|